diff options
author | David Turner <dturner@twopensource.com> | 2015-08-10 13:52:45 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-08-11 13:52:27 -0700 |
commit | b02e8595e263e284e45a6262b92ef158b6966478 (patch) | |
tree | 30d98251f8d600a3ba97031a9a3c5fe699010bd6 /builtin | |
parent | worktrees: add find_shared_symref (diff) | |
download | tgif-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.c | 6 |
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()); |