Guest User

Untitled

a guest
May 2nd, 2012
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment