From cd673c1f17228d272c4b7f81fbb28bc31cf0cac6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 27 Feb 2009 23:15:53 -0800 Subject: has_sha1_pack(): refactor "pretend these packs do not exist" interface Most of the callers of this function except only one pass NULL to its last parameter, ignore_packed. Introduce has_sha1_kept_pack() function that has the function signature and the semantics of this function, and convert the sole caller that does not pass NULL to call this new function. All other callers and has_sha1_pack() lose the ignore_packed parameter. Signed-off-by: Junio C Hamano --- revision.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'revision.c') diff --git a/revision.c b/revision.c index 45fd7a3660..746eeed972 100644 --- a/revision.c +++ b/revision.c @@ -1485,7 +1485,8 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) { if (commit->object.flags & SHOWN) return commit_ignore; - if (revs->unpacked && has_sha1_pack(commit->object.sha1, revs->ignore_packed)) + if (revs->unpacked && + has_sha1_kept_pack(commit->object.sha1, revs->ignore_packed)) return commit_ignore; if (revs->show_all) return commit_show; -- cgit v1.2.3 From b8431b033f9e60f87a75b864612873307a3e5966 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 27 Feb 2009 23:30:38 -0800 Subject: has_sha1_kept_pack(): take "struct rev_info" Its "ignore_packed" parameter always comes from struct rev_info. This patch makes the function take a pointer to the surrounding structure, so that the refactoring in the next patch becomes easier to review. There is an unfortunate header file dependency and the easiest workaround is to temporarily move the function declaration from cache.h to revision.h; this will be moved back to cache.h once the function loses this "ignore_packed" parameter altogether in the later part of the series. Signed-off-by: Junio C Hamano --- cache.h | 1 - revision.c | 2 +- revision.h | 2 ++ sha1_file.c | 16 +++++++++------- 4 files changed, 12 insertions(+), 9 deletions(-) (limited to 'revision.c') diff --git a/cache.h b/cache.h index c1539bf89a..8e43f382e8 100644 --- a/cache.h +++ b/cache.h @@ -566,7 +566,6 @@ extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned l extern int move_temp_to_file(const char *tmpfile, const char *filename); extern int has_sha1_pack(const unsigned char *sha1); -extern int has_sha1_kept_pack(const unsigned char *sha1, const char **ignore); extern int has_sha1_file(const unsigned char *sha1); extern int has_loose_object_nonlocal(const unsigned char *sha1); diff --git a/revision.c b/revision.c index 746eeed972..795e0c03fe 100644 --- a/revision.c +++ b/revision.c @@ -1486,7 +1486,7 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) if (commit->object.flags & SHOWN) return commit_ignore; if (revs->unpacked && - has_sha1_kept_pack(commit->object.sha1, revs->ignore_packed)) + has_sha1_kept_pack(commit->object.sha1, revs)) return commit_ignore; if (revs->show_all) return commit_show; diff --git a/revision.h b/revision.h index 91f194478b..930429625f 100644 --- a/revision.h +++ b/revision.h @@ -158,4 +158,6 @@ enum commit_action { extern enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit); +extern int has_sha1_kept_pack(const unsigned char *sha1, const struct rev_info *); + #endif diff --git a/sha1_file.c b/sha1_file.c index ac4375d298..f963c3cadb 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -16,6 +16,8 @@ #include "refs.h" #include "pack-revindex.h" #include "sha1-lookup.h" +#include "diff.h" +#include "revision.h" #ifndef O_NOATIME #if defined(__linux__) && (defined(__i386__) || defined(__PPC__)) @@ -1875,7 +1877,7 @@ int matches_pack_name(struct packed_git *p, const char *name) } static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, - const char **ignore_packed) + const struct rev_info *revs) { static struct packed_git *last_found = (void *)1; struct packed_git *p; @@ -1887,9 +1889,9 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, p = (last_found == (void *)1) ? packed_git : last_found; do { - if (ignore_packed) { + if (revs->ignore_packed) { const char **ig; - for (ig = ignore_packed; *ig; ig++) + for (ig = revs->ignore_packed; *ig; ig++) if (matches_pack_name(p, *ig)) break; if (*ig) @@ -1941,9 +1943,9 @@ static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) } static int find_kept_pack_entry(const unsigned char *sha1, struct pack_entry *e, - const char **ignore_packed) + const struct rev_info *revs) { - return find_pack_ent(sha1, e, ignore_packed); + return find_pack_ent(sha1, e, revs); } struct packed_git *find_sha1_pack(const unsigned char *sha1, @@ -2413,10 +2415,10 @@ int has_sha1_pack(const unsigned char *sha1) return find_pack_entry(sha1, &e); } -int has_sha1_kept_pack(const unsigned char *sha1, const char **ignore_packed) +int has_sha1_kept_pack(const unsigned char *sha1, const struct rev_info *revs) { struct pack_entry e; - return find_kept_pack_entry(sha1, &e, ignore_packed); + return find_kept_pack_entry(sha1, &e, revs); } int has_sha1_file(const unsigned char *sha1) -- cgit v1.2.3 From 03a9683d22eca52bc2b2b9b09258a143e76416f6 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 28 Feb 2009 00:00:21 -0800 Subject: Simplify is_kept_pack() This removes --unpacked= parameter from the revision parser, and rewrites its use in git-repack to pass a single --kept-pack-only option instead. The new --kept-pack-only option means just that. When this option is given, is_kept_pack() that used to say "not on the --unpacked= list" now says "the packfile has corresponding .keep file". Signed-off-by: Junio C Hamano --- builtin-pack-objects.c | 6 +++--- git-repack.sh | 5 ++++- revision.c | 20 +++++--------------- revision.h | 8 +++----- sha1_file.c | 30 +++--------------------------- 5 files changed, 18 insertions(+), 51 deletions(-) (limited to 'revision.c') diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 7e7719b832..150258b629 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -1915,7 +1915,7 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs) const unsigned char *sha1; struct object *o; - if (is_kept_pack(p, revs)) + if (is_kept_pack(p)) continue; if (open_pack_index(p)) die("cannot open pack index"); @@ -1951,7 +1951,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs) const unsigned char *sha1; for (p = packed_git; p; p = p->next) { - if (is_kept_pack(p, revs)) + if (is_kept_pack(p)) continue; if (open_pack_index(p)) @@ -2149,7 +2149,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) continue; } if (!strcmp("--unpacked", arg) || - !prefixcmp(arg, "--unpacked=") || + !strcmp("--kept-pack-only", arg) || !strcmp("--reflog", arg) || !strcmp("--all", arg)) { use_internal_rev_list = 1; diff --git a/git-repack.sh b/git-repack.sh index 86000151cc..a736009c67 100755 --- a/git-repack.sh +++ b/git-repack.sh @@ -68,10 +68,13 @@ case ",$all_into_one," in if [ -e "$PACKDIR/$e.keep" ]; then : keep else - args="$args --unpacked=$e.pack" existing="$existing $e" fi done + if test -n "$existing" + then + args="--kept-pack-only" + fi if test -n "$args" -a -n "$unpack_unreachable" -a \ -n "$remove_redundant" then diff --git a/revision.c b/revision.c index 795e0c03fe..3cfd6539ab 100644 --- a/revision.c +++ b/revision.c @@ -963,16 +963,6 @@ static void add_message_grep(struct rev_info *revs, const char *pattern) add_grep(revs, pattern, GREP_PATTERN_BODY); } -static void add_ignore_packed(struct rev_info *revs, const char *name) -{ - int num = ++revs->num_ignore_packed; - - revs->ignore_packed = xrealloc(revs->ignore_packed, - sizeof(const char *) * (num + 1)); - revs->ignore_packed[num-1] = name; - revs->ignore_packed[num] = NULL; -} - static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv, int *unkc, const char **unkv) { @@ -1072,12 +1062,12 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->edge_hint = 1; } else if (!strcmp(arg, "--unpacked")) { revs->unpacked = 1; - free(revs->ignore_packed); - revs->ignore_packed = NULL; - revs->num_ignore_packed = 0; - } else if (!prefixcmp(arg, "--unpacked=")) { + revs->kept_pack_only = 0; + } else if (!strcmp(arg, "--kept-pack-only")) { revs->unpacked = 1; - add_ignore_packed(revs, arg+11); + revs->kept_pack_only = 1; + } else if (!prefixcmp(arg, "--unpacked=")) { + die("--unpacked= no longer supported."); } else if (!strcmp(arg, "-r")) { revs->diff = 1; DIFF_OPT_SET(&revs->diffopt, RECURSIVE); diff --git a/revision.h b/revision.h index af414e5d94..f63596ff45 100644 --- a/revision.h +++ b/revision.h @@ -47,7 +47,8 @@ struct rev_info { blob_objects:1, edge_hint:1, limited:1, - unpacked:1, /* see also ignore_packed below */ + unpacked:1, + kept_pack_only:1, boundary:2, left_right:1, rewrite_parents:1, @@ -75,9 +76,6 @@ struct rev_info { missing_newline:1; enum date_mode date_mode; - const char **ignore_packed; /* pretend objects in these are unpacked */ - int num_ignore_packed; - unsigned int abbrev; enum cmit_fmt commit_format; struct log_info *loginfo; @@ -159,6 +157,6 @@ enum commit_action { extern enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit); extern int has_sha1_kept_pack(const unsigned char *sha1, const struct rev_info *); -extern int is_kept_pack(const struct packed_git *, const struct rev_info *); +extern int is_kept_pack(const struct packed_git *); #endif diff --git a/sha1_file.c b/sha1_file.c index 6e0a462f10..e8a9517d01 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1858,33 +1858,9 @@ off_t find_pack_entry_one(const unsigned char *sha1, return 0; } -static int matches_pack_name(const struct packed_git *p, const char *name) +int is_kept_pack(const struct packed_git *p) { - const char *last_c, *c; - - if (!strcmp(p->pack_name, name)) - return 1; - - for (c = p->pack_name, last_c = c; *c;) - if (*c == '/') - last_c = ++c; - else - ++c; - if (!strcmp(last_c, name)) - return 1; - - return 0; -} - -int is_kept_pack(const struct packed_git *p, const struct rev_info *revs) -{ - int i; - - for (i = 0; i < revs->num_ignore_packed; i++) { - if (matches_pack_name(p, revs->ignore_packed[i])) - return 0; - } - return 1; + return p->pack_keep; } static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, @@ -1900,7 +1876,7 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, p = (last_found == (void *)1) ? packed_git : last_found; do { - if (revs->ignore_packed && !is_kept_pack(p, revs)) + if (revs->kept_pack_only && !is_kept_pack(p)) goto next; if (p->num_bad_objects) { unsigned i; -- cgit v1.2.3 From 69e020ae00ebd3f7ae3c2f35acb139361417ef64 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 28 Feb 2009 00:37:19 -0800 Subject: is_kept_pack(): final clean-up Now is_kept_pack() is just a member lookup into a structure, we can write it as such. Also rewrite the sole caller of has_sha1_kept_pack() to switch on the criteria the callee uses (namely, revs->kept_pack_only) between calling has_sha1_kept_pack() and has_sha1_pack(), so that these two callees do not have to take a pointer to struct rev_info as an argument. This removes the header file dependency issue temporarily introduced by the earlier commit, so we revert changes associated to that as well. Signed-off-by: Junio C Hamano --- builtin-pack-objects.c | 4 ++-- cache.h | 1 + revision.c | 4 +++- revision.h | 3 --- sha1_file.c | 22 +++++++--------------- 5 files changed, 13 insertions(+), 21 deletions(-) (limited to 'revision.c') diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index 150258b629..b2e46264ee 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -1915,7 +1915,7 @@ static void add_objects_in_unpacked_packs(struct rev_info *revs) const unsigned char *sha1; struct object *o; - if (is_kept_pack(p)) + if (p->pack_keep) continue; if (open_pack_index(p)) die("cannot open pack index"); @@ -1951,7 +1951,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs) const unsigned char *sha1; for (p = packed_git; p; p = p->next) { - if (is_kept_pack(p)) + if (p->pack_keep) continue; if (open_pack_index(p)) diff --git a/cache.h b/cache.h index 23c16d0d99..0a3d523d26 100644 --- a/cache.h +++ b/cache.h @@ -566,6 +566,7 @@ extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned l extern int move_temp_to_file(const char *tmpfile, const char *filename); extern int has_sha1_pack(const unsigned char *sha1); +extern int has_sha1_kept_pack(const unsigned char *sha1); extern int has_sha1_file(const unsigned char *sha1); extern int has_loose_object_nonlocal(const unsigned char *sha1); diff --git a/revision.c b/revision.c index 3cfd6539ab..6d8ac46081 100644 --- a/revision.c +++ b/revision.c @@ -1476,7 +1476,9 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) if (commit->object.flags & SHOWN) return commit_ignore; if (revs->unpacked && - has_sha1_kept_pack(commit->object.sha1, revs)) + (revs->kept_pack_only + ? has_sha1_kept_pack(commit->object.sha1) + : has_sha1_pack(commit->object.sha1))) return commit_ignore; if (revs->show_all) return commit_show; diff --git a/revision.h b/revision.h index f63596ff45..b9fa9c2a67 100644 --- a/revision.h +++ b/revision.h @@ -156,7 +156,4 @@ enum commit_action { extern enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit); -extern int has_sha1_kept_pack(const unsigned char *sha1, const struct rev_info *); -extern int is_kept_pack(const struct packed_git *); - #endif diff --git a/sha1_file.c b/sha1_file.c index e8a9517d01..7ead56cc3e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -16,8 +16,6 @@ #include "refs.h" #include "pack-revindex.h" #include "sha1-lookup.h" -#include "diff.h" -#include "revision.h" #ifndef O_NOATIME #if defined(__linux__) && (defined(__i386__) || defined(__PPC__)) @@ -1858,13 +1856,8 @@ off_t find_pack_entry_one(const unsigned char *sha1, return 0; } -int is_kept_pack(const struct packed_git *p) -{ - return p->pack_keep; -} - static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, - const struct rev_info *revs) + int kept_pack_only) { static struct packed_git *last_found = (void *)1; struct packed_git *p; @@ -1876,7 +1869,7 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, p = (last_found == (void *)1) ? packed_git : last_found; do { - if (revs->kept_pack_only && !is_kept_pack(p)) + if (kept_pack_only && !p->pack_keep) goto next; if (p->num_bad_objects) { unsigned i; @@ -1919,13 +1912,12 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) { - return find_pack_ent(sha1, e, NULL); + return find_pack_ent(sha1, e, 0); } -static int find_kept_pack_entry(const unsigned char *sha1, struct pack_entry *e, - const struct rev_info *revs) +static int find_kept_pack_entry(const unsigned char *sha1, struct pack_entry *e) { - return find_pack_ent(sha1, e, revs); + return find_pack_ent(sha1, e, 1); } struct packed_git *find_sha1_pack(const unsigned char *sha1, @@ -2395,10 +2387,10 @@ int has_sha1_pack(const unsigned char *sha1) return find_pack_entry(sha1, &e); } -int has_sha1_kept_pack(const unsigned char *sha1, const struct rev_info *revs) +int has_sha1_kept_pack(const unsigned char *sha1) { struct pack_entry e; - return find_kept_pack_entry(sha1, &e, revs); + return find_kept_pack_entry(sha1, &e); } int has_sha1_file(const unsigned char *sha1) -- cgit v1.2.3 From 4d6acb70411cd4fe69610cf1b22f186fa01614f7 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Thu, 19 Mar 2009 22:47:54 -0500 Subject: Remove --kept-pack-only option and associated infrastructure This option to pack-objects/rev-list was created to improve the -A and -a options of repack. It was found to be lacking in that it did not provide the ability to differentiate between local and non-local kept packs, and found to be unnecessary since objects residing in local kept packs can be filtered out by the --honor-pack-keep option. Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- builtin-pack-objects.c | 1 - cache.h | 1 - revision.c | 9 +-------- revision.h | 1 - sha1_file.c | 21 +-------------------- 5 files changed, 2 insertions(+), 31 deletions(-) (limited to 'revision.c') diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index aae4d243b3..6222f19c78 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -2149,7 +2149,6 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) continue; } if (!strcmp("--unpacked", arg) || - !strcmp("--kept-pack-only", arg) || !strcmp("--reflog", arg) || !strcmp("--all", arg)) { use_internal_rev_list = 1; diff --git a/cache.h b/cache.h index 0a3d523d26..23c16d0d99 100644 --- a/cache.h +++ b/cache.h @@ -566,7 +566,6 @@ extern int check_sha1_signature(const unsigned char *sha1, void *buf, unsigned l extern int move_temp_to_file(const char *tmpfile, const char *filename); extern int has_sha1_pack(const unsigned char *sha1); -extern int has_sha1_kept_pack(const unsigned char *sha1); extern int has_sha1_file(const unsigned char *sha1); extern int has_loose_object_nonlocal(const unsigned char *sha1); diff --git a/revision.c b/revision.c index 6d8ac46081..50a5b5f394 100644 --- a/revision.c +++ b/revision.c @@ -1062,10 +1062,6 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg revs->edge_hint = 1; } else if (!strcmp(arg, "--unpacked")) { revs->unpacked = 1; - revs->kept_pack_only = 0; - } else if (!strcmp(arg, "--kept-pack-only")) { - revs->unpacked = 1; - revs->kept_pack_only = 1; } else if (!prefixcmp(arg, "--unpacked=")) { die("--unpacked= no longer supported."); } else if (!strcmp(arg, "-r")) { @@ -1475,10 +1471,7 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) { if (commit->object.flags & SHOWN) return commit_ignore; - if (revs->unpacked && - (revs->kept_pack_only - ? has_sha1_kept_pack(commit->object.sha1) - : has_sha1_pack(commit->object.sha1))) + if (revs->unpacked && has_sha1_pack(commit->object.sha1)) return commit_ignore; if (revs->show_all) return commit_show; diff --git a/revision.h b/revision.h index b9fa9c2a67..1d322759aa 100644 --- a/revision.h +++ b/revision.h @@ -48,7 +48,6 @@ struct rev_info { edge_hint:1, limited:1, unpacked:1, - kept_pack_only:1, boundary:2, left_right:1, rewrite_parents:1, diff --git a/sha1_file.c b/sha1_file.c index 7ead56cc3e..500fd93127 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1856,8 +1856,7 @@ off_t find_pack_entry_one(const unsigned char *sha1, return 0; } -static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, - int kept_pack_only) +static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) { static struct packed_git *last_found = (void *)1; struct packed_git *p; @@ -1869,8 +1868,6 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, p = (last_found == (void *)1) ? packed_git : last_found; do { - if (kept_pack_only && !p->pack_keep) - goto next; if (p->num_bad_objects) { unsigned i; for (i = 0; i < p->num_bad_objects; i++) @@ -1910,16 +1907,6 @@ static int find_pack_ent(const unsigned char *sha1, struct pack_entry *e, return 0; } -static int find_pack_entry(const unsigned char *sha1, struct pack_entry *e) -{ - return find_pack_ent(sha1, e, 0); -} - -static int find_kept_pack_entry(const unsigned char *sha1, struct pack_entry *e) -{ - return find_pack_ent(sha1, e, 1); -} - struct packed_git *find_sha1_pack(const unsigned char *sha1, struct packed_git *packs) { @@ -2387,12 +2374,6 @@ int has_sha1_pack(const unsigned char *sha1) return find_pack_entry(sha1, &e); } -int has_sha1_kept_pack(const unsigned char *sha1) -{ - struct pack_entry e; - return find_kept_pack_entry(sha1, &e); -} - int has_sha1_file(const unsigned char *sha1) { struct pack_entry e; -- cgit v1.2.3