revision.c: --all adds HEAD from all worktrees
Unless single_worktree is set, --all now adds HEAD from all worktrees. Since reachable.c code does not use setup_revisions(), we need to call other_head_refs_submodule() explicitly there to have the same effect on "git prune", so that we won't accidentally delete objects needed by some other HEADs. A new FIXME is added because we would need something like int refs_other_head_refs(struct ref_store *, each_ref_fn, cb_data); in addition to other_head_refs() to handle it, which might require int get_submodule_worktrees(const char *submodule, int flags); It could be a separate topic to reduce the scope of this one. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
419221c106
commit
d0c39a49cc
14
revision.c
14
revision.c
@ -2133,6 +2133,14 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
||||
int argcount;
|
||||
|
||||
if (submodule) {
|
||||
/*
|
||||
* We need some something like get_submodule_worktrees()
|
||||
* before we can go through all worktrees of a submodule,
|
||||
* .e.g with adding all HEADs from --all, which is not
|
||||
* supported right now, so stick to single worktree.
|
||||
*/
|
||||
if (!revs->single_worktree)
|
||||
die("BUG: --single-worktree cannot be used together with submodule");
|
||||
refs = get_submodule_ref_store(submodule);
|
||||
} else
|
||||
refs = get_main_ref_store();
|
||||
@ -2150,6 +2158,12 @@ static int handle_revision_pseudo_opt(const char *submodule,
|
||||
if (!strcmp(arg, "--all")) {
|
||||
handle_refs(refs, revs, *flags, refs_for_each_ref);
|
||||
handle_refs(refs, revs, *flags, refs_head_ref);
|
||||
if (!revs->single_worktree) {
|
||||
struct all_refs_cb cb;
|
||||
|
||||
init_all_refs_cb(&cb, revs, *flags);
|
||||
other_head_refs(handle_one_ref, &cb);
|
||||
}
|
||||
clear_ref_exclusion(&revs->ref_excludes);
|
||||
} else if (!strcmp(arg, "--branches")) {
|
||||
handle_refs(refs, revs, *flags, refs_for_each_branch_ref);
|
||||
|
Reference in New Issue
Block a user