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