All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paul Tan <pyokagan@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Schindelin <johannes.schindelin@gmx.de>,
	Stefan Beller <sbeller@google.com>, Paul Tan <pyokagan@gmail.com>
Subject: [PATCH v4 33/44] builtin-am: support automatic notes copying
Date: Sun, 28 Jun 2015 22:05:55 +0800	[thread overview]
Message-ID: <1435500366-31700-34-git-send-email-pyokagan@gmail.com> (raw)
In-Reply-To: <1435500366-31700-1-git-send-email-pyokagan@gmail.com>

Since eb2151b (rebase: support automatic notes copying, 2010-03-12),
git-am.sh supported automatic notes copying in --rebasing mode by
invoking "git notes copy" once it has finished applying all the patches.

Re-implement this feature in builtin/am.c.

Signed-off-by: Paul Tan <pyokagan@gmail.com>
---
 builtin/am.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/builtin/am.c b/builtin/am.c
index 27b79f7..f618ff1 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -23,6 +23,7 @@
 #include "merge-recursive.h"
 #include "revision.h"
 #include "log-tree.h"
+#include "notes-utils.h"
 
 /**
  * Returns 1 if the file is empty or does not exist, 0 otherwise.
@@ -519,6 +520,64 @@ static int run_post_rewrite_hook(const struct am_state *state)
 }
 
 /**
+ * Reads the state directory's "rewritten" file, and copies notes from the old
+ * commits listed in the file to their rewritten commits.
+ *
+ * Returns 0 on success, -1 on failure.
+ */
+static int copy_notes_for_rebase(const struct am_state *state)
+{
+	struct notes_rewrite_cfg *c;
+	struct strbuf sb = STRBUF_INIT;
+	const char *invalid_line = _("Malformed input line: '%s'.");
+	const char *msg = "Notes added by 'git rebase'";
+	FILE *fp;
+	int ret = 0;
+
+	assert(state->rebasing);
+
+	c = init_copy_notes_for_rewrite("rebase");
+	if (!c)
+		return 0;
+
+	fp = xfopen(am_path(state, "rewritten"), "r");
+
+	while (!strbuf_getline(&sb, fp, '\n')) {
+		unsigned char from_obj[GIT_SHA1_RAWSZ], to_obj[GIT_SHA1_RAWSZ];
+
+		if (sb.len != GIT_SHA1_HEXSZ * 2 + 1) {
+			ret = error(invalid_line, sb.buf);
+			goto finish;
+		}
+
+		if (get_sha1_hex(sb.buf, from_obj)) {
+			ret = error(invalid_line, sb.buf);
+			goto finish;
+		}
+
+		if (sb.buf[GIT_SHA1_HEXSZ] != ' ') {
+			ret = error(invalid_line, sb.buf);
+			goto finish;
+		}
+
+		if (get_sha1_hex(sb.buf + GIT_SHA1_HEXSZ + 1, to_obj)) {
+			ret = error(invalid_line, sb.buf);
+			goto finish;
+		}
+
+		if (copy_note_for_rewrite(c, from_obj, to_obj))
+			ret = error(_("Failed to copy notes from '%s' to '%s'"),
+					sha1_to_hex(from_obj), sha1_to_hex(to_obj));
+	}
+
+finish:
+	finish_copy_notes_for_rewrite(c, msg);
+	fclose(fp);
+	strbuf_release(&sb);
+	return ret;
+}
+
+/**
  * Determines if the file looks like a piece of RFC2822 mail by grabbing all
  * non-indented lines and checking if they look like they begin with valid
  * header field names.
@@ -1424,6 +1483,7 @@ next:
 
 	if (!is_empty_file(am_path(state, "rewritten"))) {
 		assert(state->rebasing);
+		copy_notes_for_rebase(state);
 		run_post_rewrite_hook(state);
 	}
 
-- 
2.5.0.rc0.76.gb2c6e93

  parent reply	other threads:[~2015-06-28 14:09 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-28 14:05 [PATCH v4 00/44] Make git-am a builtin Paul Tan
2015-06-28 14:05 ` [PATCH v4 01/44] wrapper: implement xopen() Paul Tan
2015-06-29  4:48   ` Torsten Bögershausen
2015-06-29  5:04     ` Stefan Beller
2015-06-29 17:18     ` Junio C Hamano
2015-07-01  6:05       ` Paul Tan
2015-07-01  6:04     ` Paul Tan
2015-06-28 14:05 ` [PATCH v4 02/44] wrapper: implement xfopen() Paul Tan
2015-06-28 14:05 ` [PATCH v4 03/44] builtin-am: implement skeletal builtin am Paul Tan
2015-06-28 14:05 ` [PATCH v4 04/44] builtin-am: implement patch queue mechanism Paul Tan
2015-06-29  5:08   ` Stefan Beller
2015-07-07 12:50     ` Paul Tan
2015-06-28 14:05 ` [PATCH v4 05/44] builtin-am: split out mbox/maildir patches with git-mailsplit Paul Tan
2015-06-28 14:05 ` [PATCH v4 06/44] builtin-am: auto-detect mbox patches Paul Tan
2015-06-28 14:05 ` [PATCH v4 07/44] builtin-am: extract patch and commit info with git-mailinfo Paul Tan
2015-06-28 14:05 ` [PATCH v4 08/44] builtin-am: apply patch with git-apply Paul Tan
2015-06-28 14:05 ` [PATCH v4 09/44] builtin-am: implement committing applied patch Paul Tan
2015-06-28 14:05 ` [PATCH v4 10/44] builtin-am: refuse to apply patches if index is dirty Paul Tan
2015-06-28 14:05 ` [PATCH v4 11/44] builtin-am: implement --resolved/--continue Paul Tan
2015-06-28 14:05 ` [PATCH v4 12/44] builtin-am: implement --skip Paul Tan
2015-06-28 14:05 ` [PATCH v4 13/44] builtin-am: implement --abort Paul Tan
2015-06-28 14:05 ` [PATCH v4 14/44] builtin-am: reject patches when there's a session in progress Paul Tan
2015-06-28 14:05 ` [PATCH v4 15/44] builtin-am: implement -q/--quiet, GIT_QUIET Paul Tan
2015-06-28 14:05 ` [PATCH v4 16/44] builtin-am: exit with user friendly message on failure Paul Tan
2015-06-28 14:05 ` [PATCH v4 17/44] builtin-am: implement -s/--signoff Paul Tan
2015-06-28 14:05 ` [PATCH v4 18/44] cache-tree: introduce write_index_as_tree() Paul Tan
2015-06-28 14:05 ` [PATCH v4 19/44] builtin-am: implement --3way, am.threeway Paul Tan
2015-06-30  0:18   ` Stefan Beller
2015-06-28 14:05 ` [PATCH v4 20/44] builtin-am: implement --rebasing mode Paul Tan
2015-06-28 14:05 ` [PATCH v4 21/44] builtin-am: bypass git-mailinfo when --rebasing Paul Tan
2015-06-28 14:05 ` [PATCH v4 22/44] builtin-am: handle stray state directory Paul Tan
2015-06-28 14:05 ` [PATCH v4 23/44] builtin-am: implement -u/--utf8 Paul Tan
2015-06-28 14:05 ` [PATCH v4 24/44] builtin-am: implement -k/--keep, --keep-non-patch Paul Tan
2015-06-28 14:05 ` [PATCH v4 25/44] builtin-am: implement --[no-]message-id, am.messageid Paul Tan
2015-06-28 14:05 ` [PATCH v4 26/44] builtin-am: support --keep-cr, am.keepcr Paul Tan
2015-06-28 14:05 ` [PATCH v4 27/44] builtin-am: implement --[no-]scissors Paul Tan
2015-07-07  8:23   ` Paul Tan
2015-06-28 14:05 ` [PATCH v4 28/44] builtin-am: pass git-apply's options to git-apply Paul Tan
2015-06-29 23:56   ` Stefan Beller
2015-07-01 10:22     ` Paul Tan
2015-07-01 17:01       ` Stefan Beller
2015-06-28 14:05 ` [PATCH v4 29/44] builtin-am: implement --ignore-date Paul Tan
2015-06-28 14:05 ` [PATCH v4 30/44] builtin-am: implement --committer-date-is-author-date Paul Tan
2015-06-28 14:05 ` [PATCH v4 31/44] builtin-am: implement -S/--gpg-sign, commit.gpgsign Paul Tan
2015-06-29 23:51   ` Stefan Beller
2015-07-01  8:01     ` Paul Tan
2015-07-01 16:43       ` Stefan Beller
2015-06-28 14:05 ` [PATCH v4 32/44] builtin-am: invoke post-rewrite hook Paul Tan
2015-06-28 14:05 ` Paul Tan [this message]
2015-06-28 14:05 ` [PATCH v4 34/44] builtin-am: invoke applypatch-msg hook Paul Tan
2015-06-28 14:05 ` [PATCH v4 35/44] builtin-am: invoke pre-applypatch hook Paul Tan
2015-06-28 14:05 ` [PATCH v4 36/44] builtin-am: invoke post-applypatch hook Paul Tan
2015-06-28 14:05 ` [PATCH v4 37/44] builtin-am: rerere support Paul Tan
2015-06-28 14:06 ` [PATCH v4 38/44] builtin-am: support and auto-detect StGit patches Paul Tan
2015-06-29 20:42   ` Stefan Beller
2015-06-29 20:51     ` Eric Sunshine
2015-06-29 21:39       ` Junio C Hamano
2015-07-01  7:25         ` Paul Tan
2015-06-28 14:06 ` [PATCH v4 39/44] builtin-am: support and auto-detect StGit series files Paul Tan
2015-06-28 14:06 ` [PATCH v4 40/44] builtin-am: support and auto-detect mercurial patches Paul Tan
2015-06-29 20:32   ` Stefan Beller
2015-06-29 20:32     ` Stefan Beller
2015-07-01  9:07       ` Paul Tan
2015-07-01  8:48     ` Paul Tan
2015-06-28 14:06 ` [PATCH v4 41/44] builtin-am: implement -i/--interactive Paul Tan
2015-06-28 14:06 ` [PATCH v4 42/44] builtin-am: implement legacy -b/--binary option Paul Tan
2015-06-29 20:05   ` Stefan Beller
     [not found]     ` <CABPQNSakaoyNRuNz=bcDYWdy4e2O3M4UuYoOT5JAV1mt-BiAOw@mail.gmail.com>
2015-07-14 10:09       ` Paul Tan
2015-06-28 14:06 ` [PATCH v4 43/44] builtin-am: check for valid committer ident Paul Tan
2015-06-29 20:02   ` Stefan Beller
2015-07-01  6:43     ` Paul Tan
2015-06-28 14:06 ` [PATCH v4 44/44] builtin-am: remove redirection to git-am.sh Paul Tan
2015-06-29  5:01 ` [PATCH v4 00/44] Make git-am a builtin Stefan Beller
2015-06-30  0:19   ` Stefan Beller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1435500366-31700-34-git-send-email-pyokagan@gmail.com \
    --to=pyokagan@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=sbeller@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.