
Untitled
By: a guest on
May 2nd, 2012 | syntax:
None | size: 2.81 KB | hits: 15 | expires: Never
#! /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