summaryrefslogtreecommitdiff
path: root/builtin
diff options
context:
space:
mode:
authorLibravatar David Turner <dturner@twopensource.com>2015-08-10 13:52:45 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2015-08-11 13:52:27 -0700
commitb02e8595e263e284e45a6262b92ef158b6966478 (patch)
tree30d98251f8d600a3ba97031a9a3c5fe699010bd6 /builtin
parentworktrees: add find_shared_symref (diff)
downloadtgif-b02e8595e263e284e45a6262b92ef158b6966478.tar.xz
notes: handle multiple worktrees
Before creating NOTES_MERGE_REF, check NOTES_MERGE_REF using find_shared_symref and die if we find one. This prevents simultaneous merges to the same notes branch from different worktrees. Signed-off-by: David Turner <dturner@twopensource.com> Reviewed-by: Johan Herland <johan@herland.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r--builtin/notes.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/builtin/notes.c b/builtin/notes.c
index 68b6cd8cc1..b97bcb07ef 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -19,6 +19,7 @@
#include "string-list.h"
#include "notes-merge.h"
#include "notes-utils.h"
+#include "branch.h"
static const char * const git_notes_usage[] = {
N_("git notes [--ref <notes_ref>] [list [<object>]]"),
@@ -813,10 +814,15 @@ static int merge(int argc, const char **argv, const char *prefix)
update_ref(msg.buf, default_notes_ref(), result_sha1, NULL,
0, UPDATE_REFS_DIE_ON_ERR);
else { /* Merge has unresolved conflicts */
+ char *existing;
/* Update .git/NOTES_MERGE_PARTIAL with partial merge result */
update_ref(msg.buf, "NOTES_MERGE_PARTIAL", result_sha1, NULL,
0, UPDATE_REFS_DIE_ON_ERR);
/* Store ref-to-be-updated into .git/NOTES_MERGE_REF */
+ existing = find_shared_symref("NOTES_MERGE_REF", default_notes_ref());
+ if (existing)
+ die(_("A notes merge into %s is already in-progress at %s"),
+ default_notes_ref(), existing);
if (create_symref("NOTES_MERGE_REF", default_notes_ref(), NULL))
die("Failed to store link to current notes ref (%s)",
default_notes_ref());