Merge branch 'js/imap-send-curl-compilation-fix' into maint
[gitweb.git] / builtin / notes.c
index 9026d567cd15cd54df2ceb1f0a8ec8719e104f68..bb23d5501c9a00818b880217d748c5fd1bcfe5cc 100644 (file)
@@ -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>]]"),
@@ -191,7 +192,7 @@ static void prepare_note_data(const unsigned char *object, struct note_data *d,
                if (launch_editor(d->edit_path, &d->buf, NULL)) {
                        die(_("Please supply the note contents using either -m or -F option"));
                }
-               stripspace(&d->buf, 1);
+               strbuf_stripspace(&d->buf, 1);
        }
 }
 
@@ -214,7 +215,7 @@ static int parse_msg_arg(const struct option *opt, const char *arg, int unset)
        if (d->buf.len)
                strbuf_addch(&d->buf, '\n');
        strbuf_addstr(&d->buf, arg);
-       stripspace(&d->buf, 0);
+       strbuf_stripspace(&d->buf, 0);
 
        d->given = 1;
        return 0;
@@ -231,7 +232,7 @@ static int parse_file_arg(const struct option *opt, const char *arg, int unset)
                        die_errno(_("cannot read '%s'"), arg);
        } else if (strbuf_read_file(&d->buf, arg, 1024) < 0)
                die_errno(_("could not open or read '%s'"), arg);
-       stripspace(&d->buf, 0);
+       strbuf_stripspace(&d->buf, 0);
 
        d->given = 1;
        return 0;
@@ -816,7 +817,19 @@ static int merge(int argc, const char **argv, const char *prefix)
                        usage_with_options(git_notes_merge_usage, options);
                }
        } else {
-               git_config_get_notes_strategy("notes.mergeStrategy", &o.strategy);
+               struct strbuf merge_key = STRBUF_INIT;
+               const char *short_ref = NULL;
+
+               if (!skip_prefix(o.local_ref, "refs/notes/", &short_ref))
+                       die("BUG: local ref %s is outside of refs/notes/",
+                           o.local_ref);
+
+               strbuf_addf(&merge_key, "notes.%s.mergeStrategy", short_ref);
+
+               if (git_config_get_notes_strategy(merge_key.buf, &o.strategy))
+                       git_config_get_notes_strategy("notes.mergeStrategy", &o.strategy);
+
+               strbuf_release(&merge_key);
        }
 
        strbuf_addf(&msg, "notes: Merged notes from %s into %s",
@@ -830,10 +843,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());