diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-07-19 20:30:21 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-19 20:30:21 +0200 |
commit | 68e65ded5b790bfd8a1072a7f551a8f283f62f29 (patch) | |
tree | cb8013cd29b7766aa63ba5812fd172aefcdbc0d6 /revision.c | |
parent | Merge branch 'nd/tree-walk-with-repo' (diff) | |
parent | check_everything_connected: assume alternate ref tips are valid (diff) | |
download | git-68e65ded5b790bfd8a1072a7f551a8f283f62f29.tar.xz git-68e65ded5b790bfd8a1072a7f551a8f283f62f29.zip |
Merge branch 'jk/check-connected-with-alternates'
The tips of refs from the alternate object store can be used as
starting point for reachability computation now.
* jk/check-connected-with-alternates:
check_everything_connected: assume alternate ref tips are valid
object-store.h: move for_each_alternate_ref() from transport.h
Diffstat (limited to 'revision.c')
-rw-r--r-- | revision.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/revision.c b/revision.c index 621feb9df7..07412297f0 100644 --- a/revision.c +++ b/revision.c @@ -1554,6 +1554,32 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) free_worktrees(worktrees); } +struct add_alternate_refs_data { + struct rev_info *revs; + unsigned int flags; +}; + +static void add_one_alternate_ref(const struct object_id *oid, + void *vdata) +{ + const char *name = ".alternate"; + struct add_alternate_refs_data *data = vdata; + struct object *obj; + + obj = get_reference(data->revs, name, oid, data->flags); + add_rev_cmdline(data->revs, obj, name, REV_CMD_REV, data->flags); + add_pending_object(data->revs, obj, name); +} + +static void add_alternate_refs_to_pending(struct rev_info *revs, + unsigned int flags) +{ + struct add_alternate_refs_data data; + data.revs = revs; + data.flags = flags; + for_each_alternate_ref(add_one_alternate_ref, &data); +} + static int add_parents_only(struct rev_info *revs, const char *arg_, int flags, int exclude_parent) { @@ -1956,6 +1982,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg !strcmp(arg, "--no-walk") || !strcmp(arg, "--do-walk") || !strcmp(arg, "--bisect") || starts_with(arg, "--glob=") || !strcmp(arg, "--indexed-objects") || + !strcmp(arg, "--alternate-refs") || starts_with(arg, "--exclude=") || starts_with(arg, "--branches=") || starts_with(arg, "--tags=") || starts_with(arg, "--remotes=") || starts_with(arg, "--no-walk=")) @@ -2442,6 +2469,8 @@ static int handle_revision_pseudo_opt(const char *submodule, add_reflogs_to_pending(revs, *flags); } else if (!strcmp(arg, "--indexed-objects")) { add_index_objects_to_pending(revs, *flags); + } else if (!strcmp(arg, "--alternate-refs")) { + add_alternate_refs_to_pending(revs, *flags); } else if (!strcmp(arg, "--not")) { *flags ^= UNINTERESTING | BOTTOM; } else if (!strcmp(arg, "--no-walk")) { |