File tree Expand file tree Collapse file tree 2 files changed +34
-4
lines changed Expand file tree Collapse file tree 2 files changed +34
-4
lines changed Original file line number Diff line number Diff line change @@ -264,6 +264,30 @@ test_expect_success 'git branch --list -d t should fail' '
264
264
test_must_fail git rev-parse refs/heads/t
265
265
'
266
266
267
+ test_expect_success ' deleting checked-out branch from repo that is a submodule' '
268
+ test_when_finished "rm -rf repo1 repo2" &&
269
+
270
+ git init repo1 &&
271
+ git init repo1/sub &&
272
+ test_commit -C repo1/sub x &&
273
+ git -C repo1 submodule add ./sub &&
274
+ git -C repo1 commit -m "adding sub" &&
275
+
276
+ git clone --recurse-submodules repo1 repo2 &&
277
+ git -C repo2/sub checkout -b work &&
278
+ test_must_fail git -C repo2/sub branch -D work
279
+ '
280
+
281
+ test_expect_success ' bare main worktree has HEAD at branch deleted by secondary worktree' '
282
+ test_when_finished "rm -rf nonbare base secondary" &&
283
+
284
+ git init nonbare &&
285
+ test_commit -C nonbare x &&
286
+ git clone --bare nonbare bare &&
287
+ git -C bare worktree add --detach ../secondary master &&
288
+ git -C secondary branch -D master
289
+ '
290
+
267
291
test_expect_success ' git branch --list -v with --abbrev' '
268
292
test_when_finished "git branch -D t" &&
269
293
git branch t &&
Original file line number Diff line number Diff line change @@ -49,18 +49,24 @@ static struct worktree *get_main_worktree(void)
49
49
struct worktree * worktree = NULL ;
50
50
struct strbuf path = STRBUF_INIT ;
51
51
struct strbuf worktree_path = STRBUF_INIT ;
52
- int is_bare = 0 ;
53
52
54
53
strbuf_add_absolute_path (& worktree_path , get_git_common_dir ());
55
- is_bare = !strbuf_strip_suffix (& worktree_path , "/.git" );
56
- if (is_bare )
54
+ if (!strbuf_strip_suffix (& worktree_path , "/.git" ))
57
55
strbuf_strip_suffix (& worktree_path , "/." );
58
56
59
57
strbuf_addf (& path , "%s/HEAD" , get_git_common_dir ());
60
58
61
59
worktree = xcalloc (1 , sizeof (* worktree ));
62
60
worktree -> path = strbuf_detach (& worktree_path , NULL );
63
- worktree -> is_bare = is_bare ;
61
+ /*
62
+ * NEEDSWORK: If this function is called from a secondary worktree and
63
+ * config.worktree is present, is_bare_repository_cfg will reflect the
64
+ * contents of config.worktree, not the contents of the main worktree.
65
+ * This means that worktree->is_bare may be set to 0 even if the main
66
+ * worktree is configured to be bare.
67
+ */
68
+ worktree -> is_bare = (is_bare_repository_cfg == 1 ) ||
69
+ is_bare_repository ();
64
70
add_head_info (worktree );
65
71
66
72
strbuf_release (& path );
You can’t perform that action at this time.
0 commit comments