git-pack-refs --all
authorJunio C Hamano <junkio@cox.net>
Sun, 8 Oct 2006 08:36:08 +0000 (01:36 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 8 Oct 2006 08:36:08 +0000 (01:36 -0700)
This changes 'git-pack-refs' to pack only tags by default.
Branches are meant to be updated, either by committing onto it
yourself or tracking remote branches, and packed entries can
become stale easily, but tags are usually "create once and live
forever" and benefit more from packing.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-pack-refs.c
t/t3210-pack-refs.sh

index 23d0d0720e2e617b9a4187ac1ba37b2605e4a940..1087657674840820662cba686f525a69a68e689c 100644 (file)
@@ -2,7 +2,7 @@
 #include "refs.h"
 
 static const char builtin_pack_refs_usage[] =
-"git-pack-refs [--prune]";
+"git-pack-refs [--all] [--prune]";
 
 struct ref_to_prune {
        struct ref_to_prune *next;
@@ -68,6 +68,7 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
 {
        int fd, i;
        struct pack_refs_cb_data cbdata;
+       int (*iterate_ref)(each_ref_fn, void *) = for_each_tag_ref;
 
        memset(&cbdata, 0, sizeof(cbdata));
 
@@ -77,6 +78,10 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
                        cbdata.prune = 1;
                        continue;
                }
+               if (!strcmp(arg, "--all")) {
+                       iterate_ref = for_each_ref;
+                       continue;
+               }
                /* perhaps other parameters later... */
                break;
        }
@@ -88,7 +93,7 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix)
        if (!cbdata.refs_file)
                die("unable to create ref-pack file structure (%s)",
                    strerror(errno));
-       for_each_ref(handle_one_ref, &cbdata);
+       iterate_ref(handle_one_ref, &cbdata);
        fflush(cbdata.refs_file);
        fsync(fd);
        fclose(cbdata.refs_file);
index ca5bd49ba6cc86f15d7633ecebaee1c569229256..a4fbfda467602a196c4e39c099720f540ae76cd1 100755 (executable)
@@ -31,7 +31,7 @@ test_expect_success \
 test_expect_success \
     'see if a branch still exists when packed' \
     'git-branch b &&
-     git-pack-refs &&
+     git-pack-refs --all &&
      rm .git/refs/heads/b &&
      echo "$SHA1 refs/heads/b" >expect &&
      git-show-ref b >result &&
@@ -40,14 +40,14 @@ test_expect_success \
 test_expect_failure \
     'git branch c/d should barf if branch c exists' \
     'git-branch c &&
-     git-pack-refs &&
+     git-pack-refs --all &&
      rm .git/refs/heads/c &&
      git-branch c/d'
 
 test_expect_success \
     'see if a branch still exists after git pack-refs --prune' \
     'git-branch e &&
-     git-pack-refs --prune &&
+     git-pack-refs --all --prune &&
      echo "$SHA1 refs/heads/e" >expect &&
      git-show-ref e >result &&
      diff expect result'
@@ -55,22 +55,22 @@ test_expect_success \
 test_expect_failure \
     'see if git pack-refs --prune remove ref files' \
     'git-branch f &&
-     git-pack-refs --prune &&
+     git-pack-refs --all --prune &&
      ls .git/refs/heads/f'
 
 test_expect_success \
     'git branch g should work when git branch g/h has been deleted' \
     'git-branch g/h &&
-     git-pack-refs --prune &&
+     git-pack-refs --all --prune &&
      git-branch -d g/h &&
      git-branch g &&
-     git-pack-refs &&
+     git-pack-refs --all &&
      git-branch -d g'
 
 test_expect_failure \
     'git branch i/j/k should barf if branch i exists' \
     'git-branch i &&
-     git-pack-refs --prune &&
+     git-pack-refs --all --prune &&
      git-branch i/j/k'
 
 test_expect_success \
@@ -90,7 +90,7 @@ test_expect_success \
      git-branch -d n/o &&
      git-branch n/o/p &&
      git-branch -d n/op &&
-     git-pack-refs --prune &&
+     git-pack-refs --all --prune &&
      git-branch -d n/o/p &&
      git-branch n'