Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/bash
- compose_name() {
- if [[ $(which git 2> /dev/null) ]]
- then
- STATUS=$(git status 2>/dev/null)
- if [[ -z $STATUS ]]
- then
- return
- fi
- TARGET="./$(git rev-parse --show-cdup)$1"
- cd $TARGET
- echo "$(basename $(pwd))"
- cd - > /dev/null
- return
- else
- return
- fi
- }
- function usage {
- echo "`basename $0` [OPTIONS]"
- echo "Archives repository tree."
- echo " "
- echo "Options:"
- echo " -f|--format FORMAT ... Archive format ([targz], tarbz, zip)"
- echo " -r|--revision REV ... Revision (default=HEAD)"
- echo " -p|--prefix PREFIX ... prefix to add before directory paths in archive"
- echo " (default = repository name)"
- echo " --no-prefix ... suppress prefix before directory paths in archive"
- echo " -n|--name NAME ... Archive file basename"
- echo " (default = repository name)"
- echo " -o|--output DIR ... Archive output directory (default = current)"
- echo " -h|--help ... Show help"
- exit 1
- }
- NOPREFIX=0
- while [ -n $1 ]; do
- case $1 in
- -f|--format)
- FORMAT=$2
- shift 2
- ;;
- -r|--revision)
- REVISION=$2
- shift 2
- ;;
- --no-prefix)
- NOPREFIX=1
- shift
- ;;
- -p|--prefix)
- PREFIX=$2
- shift 2
- ;;
- -n|--name)
- REPONAME=$2
- shift 2
- ;;
- -o|--output)
- OUTPUTDIR=$2
- shift 2
- ;;
- -h|--help)
- usage
- ;;
- *)
- break
- ;;
- esac
- done
- if [[ -z $FORMAT ]]
- then
- FORMAT="targz"
- fi
- if [[ -z "$REVISION" ]]
- then
- REVISION="HEAD"
- fi
- if [[ -z $REPONAME ]]
- then
- REPONAME=$(compose_name)
- if [[ -z $REPONAME ]]
- then
- echo "FATAL: not a Git repository, or could not parse repository name (supply using '-p'/'--prefix' flag)"
- exit 1
- fi
- fi
- if [[ -z "$OUTPUTDIR" ]]
- then
- OUTPUTDIR="."
- fi
- if [[ $FORMAT == "zip" ]]
- then
- GITARCHIVEFORMAT="zip"
- EXT=".zip"
- else
- GITARCHIVEFORMAT="tar"
- if [[ $FORMAT == "tarbz" ]]
- then
- EXT=".tar.bz2"
- COMPRESS="bzip2"
- elif [[ $FORMAT == "targz" ]]
- then
- EXT=".tar.gz"
- COMPRESS="gzip"
- else
- echo "FATAL: Unrecognized format '$FORMAT'"
- exit 1
- fi
- fi
- if [[ $NOPREFIX == 1 ]]
- then
- PREFIXCOMMAND=""
- elif [[ -z "$PREFIX" ]]
- then
- PREFIXCOMMAND="--prefix=$REPONAME/"
- else
- PREFIXCOMMAND="--prefix=$PREFIX/"
- fi
- ARCHIVEBASENAME="$REPONAME-$(git describe --always)"
- OUTPUTPATH="$OUTPUTDIR/$ARCHIVEBASENAME$EXT"
- if [[ $FORMAT == "zip" ]]
- then
- git archive --format="$GITARCHIVEFORMAT" $PREFIXCOMMAND $REVISION > $OUTPUTPATH
- else
- git archive --format="$GITARCHIVEFORMAT" $PREFIXCOMMAND $REVISION | $COMPRESS >$OUTPUTPATH
- fi
Advertisement
Add Comment
Please, Sign In to add comment