diff options
Diffstat (limited to 'worktree.c')
-rw-r--r-- | worktree.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/worktree.c b/worktree.c index c0c5a2b373..f5da7d286d 100644 --- a/worktree.c +++ b/worktree.c @@ -31,7 +31,7 @@ static void add_head_info(struct worktree *wt) target = refs_resolve_ref_unsafe(get_worktree_ref_store(wt), "HEAD", 0, - wt->head_sha1, &flags); + &wt->head_oid, &flags); if (!target) return; @@ -307,7 +307,6 @@ const struct worktree *find_shared_symref(const char *symref, for (i = 0; worktrees[i]; i++) { struct worktree *wt = worktrees[i]; const char *symref_target; - unsigned char sha1[20]; struct ref_store *refs; int flags; @@ -327,8 +326,9 @@ const struct worktree *find_shared_symref(const char *symref, refs = get_worktree_ref_store(wt); symref_target = refs_resolve_ref_unsafe(refs, symref, 0, - sha1, &flags); - if ((flags & REF_ISSYMREF) && !strcmp(symref_target, target)) { + NULL, &flags); + if ((flags & REF_ISSYMREF) && + symref_target && !strcmp(symref_target, target)) { existing = wt; break; } @@ -386,3 +386,25 @@ int submodule_uses_worktrees(const char *path) closedir(dir); return ret; } + +int other_head_refs(each_ref_fn fn, void *cb_data) +{ + struct worktree **worktrees, **p; + int ret = 0; + + worktrees = get_worktrees(0); + for (p = worktrees; *p; p++) { + struct worktree *wt = *p; + struct ref_store *refs; + + if (wt->is_current) + continue; + + refs = get_worktree_ref_store(wt); + ret = refs_head_ref(refs, fn, cb_data); + if (ret) + break; + } + free_worktrees(worktrees); + return ret; +} |