Browse Source

Merge branch 'nd/worktree-kill-parse-ref'

"git branch -M a b" while on a branch that is completely unrelated
to either branch a or branch b misbehaved when multiple worktree
was in use.  This has been fixed.

* nd/worktree-kill-parse-ref:
  branch: fix branch renaming not updating HEADs correctly
maint
Junio C Hamano 8 years ago
parent
commit
79553b94f9
  1. 5
      branch.c
  2. 13
      t/t3200-branch.sh
  3. 2
      worktree.c

5
branch.c

@ -357,8 +357,9 @@ int replace_each_worktree_head_symref(const char *oldref, const char *newref, @@ -357,8 +357,9 @@ int replace_each_worktree_head_symref(const char *oldref, const char *newref,

if (worktrees[i]->is_detached)
continue;
if (worktrees[i]->head_ref &&
strcmp(oldref, worktrees[i]->head_ref))
if (!worktrees[i]->head_ref)
continue;
if (strcmp(oldref, worktrees[i]->head_ref))
continue;

refs = get_worktree_ref_store(worktrees[i]);

13
t/t3200-branch.sh

@ -162,6 +162,19 @@ test_expect_success 'git branch -M baz bam should add entries to .git/logs/HEAD' @@ -162,6 +162,19 @@ test_expect_success 'git branch -M baz bam should add entries to .git/logs/HEAD'
grep "^0\{40\}.*$msg$" .git/logs/HEAD
'

test_expect_success 'git branch -M should leave orphaned HEAD alone' '
git init orphan &&
(
cd orphan &&
test_commit initial &&
git checkout --orphan lonely &&
grep lonely .git/HEAD &&
test_path_is_missing .git/refs/head/lonely &&
git branch -M master mistress &&
grep lonely .git/HEAD
)
'

test_expect_success 'resulting reflog can be shown by log -g' '
oid=$(git rev-parse HEAD) &&
cat >expect <<-EOF &&

2
worktree.c

@ -30,7 +30,7 @@ static void add_head_info(struct worktree *wt) @@ -30,7 +30,7 @@ static void add_head_info(struct worktree *wt)

target = refs_resolve_ref_unsafe(get_worktree_ref_store(wt),
"HEAD",
RESOLVE_REF_READING,
0,
wt->head_sha1, &flags);
if (!target)
return;

Loading…
Cancel
Save