Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 2nd, 2012  |  syntax: None  |  size: 2.81 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #! /bin/bash
  2.  
  3. compose_name() {
  4.     if [[ $(which git 2> /dev/null) ]]
  5.     then
  6.         STATUS=$(git status 2>/dev/null)
  7.         if [[ -z $STATUS ]]
  8.         then
  9.             return
  10.         fi
  11.         TARGET="./$(git rev-parse --show-cdup)$1"
  12.         cd $TARGET
  13.         echo "$(basename $(pwd))"
  14.         cd - > /dev/null
  15.         return
  16.     else
  17.         return
  18.     fi
  19. }
  20.  
  21. function usage {
  22.     echo "`basename $0` [OPTIONS]"
  23.     echo "Archives repository tree."
  24.     echo " "
  25.     echo "Options:"
  26.     echo "  -f|--format FORMAT  ... Archive format ([targz], tarbz, zip)"
  27.     echo "  -r|--revision REV   ... Revision (default=HEAD)"
  28.     echo "  -p|--prefix PREFIX  ... prefix to add before directory paths in archive"
  29.     echo "                          (default = repository name)"
  30.     echo "  --no-prefix         ... suppress prefix before directory paths in archive"
  31.     echo "  -n|--name NAME      ... Archive file basename"
  32.     echo "                          (default = repository name)"
  33.     echo "  -o|--output DIR     ... Archive output directory (default = current)"
  34.     echo "  -h|--help           ... Show help"
  35.     exit 1
  36. }
  37.  
  38. NOPREFIX=0
  39. while [ -n $1 ]; do
  40.     case $1 in
  41.     -f|--format)
  42.         FORMAT=$2
  43.         shift 2
  44.         ;;
  45.     -r|--revision)
  46.         REVISION=$2
  47.         shift 2
  48.         ;;
  49.     --no-prefix)
  50.         NOPREFIX=1
  51.         shift
  52.         ;;
  53.     -p|--prefix)
  54.         PREFIX=$2
  55.         shift 2
  56.         ;;
  57.     -n|--name)
  58.         REPONAME=$2
  59.         shift 2
  60.         ;;
  61.     -o|--output)
  62.         OUTPUTDIR=$2
  63.         shift 2
  64.         ;;
  65.     -h|--help)
  66.         usage
  67.         ;;
  68.     *)
  69.         break
  70.         ;;
  71.     esac
  72. done
  73.  
  74. if [[ -z $FORMAT ]]
  75. then
  76.     FORMAT="targz"
  77. fi
  78.  
  79. if [[ -z "$REVISION" ]]
  80. then
  81.     REVISION="HEAD"
  82. fi
  83.  
  84. if [[ -z $REPONAME ]]
  85. then
  86.     REPONAME=$(compose_name)
  87.     if [[ -z $REPONAME ]]
  88.     then
  89.         echo "FATAL: not a Git repository, or could not parse repository name (supply using '-p'/'--prefix' flag)"
  90.         exit 1
  91.     fi
  92. fi
  93.  
  94. if [[ -z "$OUTPUTDIR" ]]
  95. then
  96.     OUTPUTDIR="."
  97. fi
  98.  
  99. if [[ $FORMAT == "zip" ]]
  100. then
  101.     GITARCHIVEFORMAT="zip"
  102.     EXT=".zip"
  103. else
  104.     GITARCHIVEFORMAT="tar"
  105.     if [[ $FORMAT == "tarbz" ]]
  106.     then
  107.         EXT=".tar.bz2"
  108.         COMPRESS="bzip2"
  109.     elif [[ $FORMAT == "targz" ]]
  110.     then
  111.         EXT=".tar.gz"
  112.         COMPRESS="gzip"
  113.     else
  114.         echo "FATAL: Unrecognized format '$FORMAT'"
  115.         exit 1
  116.     fi
  117. fi
  118.  
  119. if [[ $NOPREFIX == 1 ]]
  120. then
  121.     PREFIXCOMMAND=""
  122. elif [[ -z "$PREFIX" ]]
  123. then
  124.     PREFIXCOMMAND="--prefix=$REPONAME/"
  125. else
  126.     PREFIXCOMMAND="--prefix=$PREFIX/"
  127. fi
  128.  
  129. ARCHIVEBASENAME="$REPONAME-$(git describe --always)"
  130. OUTPUTPATH="$OUTPUTDIR/$ARCHIVEBASENAME$EXT"
  131. if [[ $FORMAT == "zip" ]]
  132. then
  133.     git archive --format="$GITARCHIVEFORMAT" $PREFIXCOMMAND $REVISION > $OUTPUTPATH
  134. else
  135.     git archive --format="$GITARCHIVEFORMAT" $PREFIXCOMMAND $REVISION | $COMPRESS >$OUTPUTPATH
  136. fi