Linus Torvalds | b2d4619 | 2005-07-03 13:38:01 -0700 | [diff] [blame] | 1 | #!/bin/sh |
Junio C Hamano | ccf1ee3 | 2005-08-24 10:40:58 -0700 | [diff] [blame] | 2 | # |
| 3 | # Copyright (c) 2005 Linus Torvalds |
| 4 | # |
| 5 | |
Junio C Hamano | 215a7ad | 2005-09-07 17:26:23 -0700 | [diff] [blame] | 6 | . git-sh-setup || die "Not a git archive" |
Linus Torvalds | b33e966 | 2005-07-08 10:57:21 -0700 | [diff] [blame] | 7 | |
Linus Torvalds | f7aac2e | 2005-10-13 15:38:29 -0700 | [diff] [blame] | 8 | no_update_info= all_into_one= remove_redundant= local= |
Junio C Hamano | ccf1ee3 | 2005-08-24 10:40:58 -0700 | [diff] [blame] | 9 | while case "$#" in 0) break ;; esac |
| 10 | do |
| 11 | case "$1" in |
| 12 | -n) no_update_info=t ;; |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 13 | -a) all_into_one=t ;; |
| 14 | -d) remove_redandant=t ;; |
Linus Torvalds | f7aac2e | 2005-10-13 15:38:29 -0700 | [diff] [blame] | 15 | -l) local=t ;; |
Junio C Hamano | ccf1ee3 | 2005-08-24 10:40:58 -0700 | [diff] [blame] | 16 | *) break ;; |
| 17 | esac |
| 18 | shift |
| 19 | done |
| 20 | |
Linus Torvalds | 5f3de58 | 2005-07-03 15:34:04 -0700 | [diff] [blame] | 21 | rm -f .tmp-pack-* |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 22 | PACKDIR="$GIT_OBJECT_DIRECTORY/pack" |
| 23 | |
| 24 | # There will be more repacking strategies to come... |
| 25 | case ",$all_into_one," in |
| 26 | ,,) |
| 27 | rev_list='--unpacked' |
| 28 | rev_parse='--all' |
| 29 | pack_objects='--incremental' |
| 30 | ;; |
| 31 | ,t,) |
| 32 | rev_list= |
| 33 | rev_parse='--all' |
| 34 | pack_objects= |
| 35 | # This part is a stop-gap until we have proper pack redundancy |
| 36 | # checker. |
| 37 | existing=`cd "$PACKDIR" && \ |
| 38 | find . -type f \( -name '*.pack' -o -name '*.idx' \) -print` |
| 39 | ;; |
| 40 | esac |
Linus Torvalds | f7aac2e | 2005-10-13 15:38:29 -0700 | [diff] [blame] | 41 | if [ "$local" ]; then |
| 42 | pack_objects="$pack_objects --local" |
| 43 | fi |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 44 | name=$(git-rev-list --objects $rev_list $(git-rev-parse $rev_parse) | |
| 45 | git-pack-objects --non-empty $pack_objects .tmp-pack) || |
Linus Torvalds | b2d4619 | 2005-07-03 13:38:01 -0700 | [diff] [blame] | 46 | exit 1 |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 47 | if [ -z "$name" ]; then |
| 48 | echo Nothing new to pack. |
Linus Torvalds | b2d4619 | 2005-07-03 13:38:01 -0700 | [diff] [blame] | 49 | exit 0 |
| 50 | fi |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 51 | echo "Pack pack-$name created." |
Junio C Hamano | ccf1ee3 | 2005-08-24 10:40:58 -0700 | [diff] [blame] | 52 | |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 53 | mkdir -p "$PACKDIR" || exit |
| 54 | |
| 55 | mv .tmp-pack-$name.pack "$PACKDIR/pack-$name.pack" && |
| 56 | mv .tmp-pack-$name.idx "$PACKDIR/pack-$name.idx" || |
| 57 | exit |
| 58 | |
| 59 | if test "$remove_redandant" = t |
| 60 | then |
| 61 | # We know $existing are all redandant only when |
| 62 | # all-into-one is used. |
| 63 | if test "$all_into_one" != '' && test "$existing" != '' |
| 64 | then |
Linus Torvalds | 41f222e | 2005-10-28 09:45:53 -0700 | [diff] [blame] | 65 | sync |
Junio C Hamano | 490e23d | 2005-09-17 23:35:49 -0700 | [diff] [blame] | 66 | ( cd "$PACKDIR" && |
| 67 | for e in $existing |
| 68 | do |
| 69 | case "$e" in |
| 70 | ./pack-$name.pack | ./pack-$name.idx) ;; |
| 71 | *) rm -f $e ;; |
| 72 | esac |
| 73 | done |
| 74 | ) |
Junio C Hamano | d5acdcf | 2005-08-29 10:29:53 -0700 | [diff] [blame] | 75 | fi |
| 76 | fi |
| 77 | |
Junio C Hamano | ccf1ee3 | 2005-08-24 10:40:58 -0700 | [diff] [blame] | 78 | case "$no_update_info" in |
| 79 | t) : ;; |
| 80 | *) git-update-server-info ;; |
| 81 | esac |