worktree: introduce is_shared_symref()
Add a new function, is_shared_symref(), which contains the heart of find_shared_symref(). Refactor find_shared_symref() to use the new function is_shared_symref(). Soon, we will use is_shared_symref() to search for symref beyond the first worktree that matches. Signed-off-by: Rubén Justo <rjusto@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
56c8fb1e95
commit
662078caac
42
worktree.c
42
worktree.c
@ -403,44 +403,44 @@ int is_worktree_being_bisected(const struct worktree *wt,
|
|||||||
* bisect). New commands that do similar things should update this
|
* bisect). New commands that do similar things should update this
|
||||||
* function as well.
|
* function as well.
|
||||||
*/
|
*/
|
||||||
const struct worktree *find_shared_symref(struct worktree **worktrees,
|
int is_shared_symref(const struct worktree *wt, const char *symref,
|
||||||
const char *symref,
|
|
||||||
const char *target)
|
const char *target)
|
||||||
{
|
{
|
||||||
const struct worktree *existing = NULL;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
for (i = 0; worktrees[i]; i++) {
|
|
||||||
struct worktree *wt = worktrees[i];
|
|
||||||
const char *symref_target;
|
const char *symref_target;
|
||||||
struct ref_store *refs;
|
struct ref_store *refs;
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
if (wt->is_bare)
|
if (wt->is_bare)
|
||||||
continue;
|
return 0;
|
||||||
|
|
||||||
if (wt->is_detached && !strcmp(symref, "HEAD")) {
|
if (wt->is_detached && !strcmp(symref, "HEAD")) {
|
||||||
if (is_worktree_being_rebased(wt, target)) {
|
if (is_worktree_being_rebased(wt, target))
|
||||||
existing = wt;
|
return 1;
|
||||||
break;
|
if (is_worktree_being_bisected(wt, target))
|
||||||
}
|
return 1;
|
||||||
if (is_worktree_being_bisected(wt, target)) {
|
|
||||||
existing = wt;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
refs = get_worktree_ref_store(wt);
|
refs = get_worktree_ref_store(wt);
|
||||||
symref_target = refs_resolve_ref_unsafe(refs, symref, 0,
|
symref_target = refs_resolve_ref_unsafe(refs, symref, 0,
|
||||||
NULL, &flags);
|
NULL, &flags);
|
||||||
if ((flags & REF_ISSYMREF) &&
|
if ((flags & REF_ISSYMREF) &&
|
||||||
symref_target && !strcmp(symref_target, target)) {
|
symref_target && !strcmp(symref_target, target))
|
||||||
existing = wt;
|
return 1;
|
||||||
break;
|
|
||||||
}
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct worktree *find_shared_symref(struct worktree **worktrees,
|
||||||
|
const char *symref,
|
||||||
|
const char *target)
|
||||||
|
{
|
||||||
|
|
||||||
|
for (int i = 0; worktrees[i]; i++) {
|
||||||
|
if (is_shared_symref(worktrees[i], symref, target))
|
||||||
|
return worktrees[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
return existing;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int submodule_uses_worktrees(const char *path)
|
int submodule_uses_worktrees(const char *path)
|
||||||
|
@ -149,6 +149,12 @@ const struct worktree *find_shared_symref(struct worktree **worktrees,
|
|||||||
const char *symref,
|
const char *symref,
|
||||||
const char *target);
|
const char *target);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns true if a symref points to a ref in a worktree.
|
||||||
|
*/
|
||||||
|
int is_shared_symref(const struct worktree *wt,
|
||||||
|
const char *symref, const char *target);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Similar to head_ref() for all HEADs _except_ one from the current
|
* Similar to head_ref() for all HEADs _except_ one from the current
|
||||||
* worktree, which is covered by head_ref().
|
* worktree, which is covered by head_ref().
|
||||||
|
Loading…
Reference in New Issue
Block a user