sequencer: make refs generated by the `label` command worktree-local
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 23 Feb 2018 12:38:44 +0000 (13:38 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 23 Feb 2018 19:30:51 +0000 (11:30 -0800)
This allows for rebases to be run in parallel in separate worktrees
(think: interrupted in the middle of one rebase, being asked to perform
a different rebase, adding a separate worktree just for that job).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
t/t3430-rebase-recreate-merges.sh
diff --git a/refs.c b/refs.c
index 20ba82b4343ff2ef72cea32deec8a8d7fbd6def7..e8b84c189ff636e06970bbef13eaa92bb872bc94 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -600,7 +600,8 @@ int dwim_log(const char *str, int len, struct object_id *oid, char **log)
 static int is_per_worktree_ref(const char *refname)
 {
        return !strcmp(refname, "HEAD") ||
-               starts_with(refname, "refs/bisect/");
+               starts_with(refname, "refs/bisect/") ||
+               starts_with(refname, "refs/rewritten/");
 }
 
 static int is_pseudoref_syntax(const char *refname)
index 87894fd5979eb719c2edf3f9b423334d9c4a597a..e10c7970e885b58d14cddaa482f86e9fa4482b0f 100755 (executable)
@@ -143,4 +143,18 @@ test_expect_success 'with a branch tip that was cherry-picked already' '
        EOF
 '
 
+test_expect_success 'refs/rewritten/* is worktree-local' '
+       git worktree add wt &&
+       cat >wt/script-from-scratch <<-\EOF &&
+       label xyz
+       exec GIT_DIR=../.git git rev-parse --verify refs/rewritten/xyz >a || :
+       exec git rev-parse --verify refs/rewritten/xyz >b
+       EOF
+
+       test_config -C wt sequence.editor \""$PWD"/replace-editor.sh\" &&
+       git -C wt rebase -i HEAD &&
+       test_must_be_empty wt/a &&
+       test_cmp_rev HEAD "$(cat wt/b)"
+'
+
 test_done