commit: copy merged signed tags to headers of merge commit
Now MERGE_HEAD records the tag objects without peeling, we could record the result of manual conflict resolution via "git commit" without losing the tag information. Introduce a new "mergetag" multi-line header field to the commit object, and use it to store the entire contents of each signed tag merged. A commit header that has a multi-line payload begins with the header tag (e.g. "mergetag" in this case), SP, the first line of payload, LF, and all the remaining lines have a SP inserted at the beginning. In hindsight, it would have been better to make "merge --continue" as the way to continue from such an interrupted merge, not "commit", but this is a backward compatibility baggage we would need to carry around for now. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -1425,7 +1425,6 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
pptr = &commit_list_insert(c->item, pptr)->next;
|
||||
} else if (whence == FROM_MERGE) {
|
||||
struct strbuf m = STRBUF_INIT;
|
||||
struct commit *commit;
|
||||
FILE *fp;
|
||||
|
||||
if (!reflog_msg)
|
||||
@ -1436,11 +1435,12 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
|
||||
die_errno(_("could not open '%s' for reading"),
|
||||
git_path("MERGE_HEAD"));
|
||||
while (strbuf_getline(&m, fp, '\n') != EOF) {
|
||||
unsigned char sha1[20];
|
||||
if (get_sha1_hex(m.buf, sha1) < 0)
|
||||
struct commit *parent;
|
||||
|
||||
parent = get_merge_parent(m.buf);
|
||||
if (!parent)
|
||||
die(_("Corrupt MERGE_HEAD file (%s)"), m.buf);
|
||||
commit = lookup_commit_or_die(sha1, "MERGE_HEAD");
|
||||
pptr = &commit_list_insert(commit, pptr)->next;
|
||||
pptr = &commit_list_insert(parent, pptr)->next;
|
||||
}
|
||||
fclose(fp);
|
||||
strbuf_release(&m);
|
||||
|
||||
Reference in New Issue
Block a user