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