Now you can conveniently add lines with format-patch, adding missing
Reviewed-by: lines (if it is already present at the end of the commit
message, it will not be repeated).
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
And this is the actual patch...
It is just a patch for format-patch... the patch for git-am should
be trivial.
Documentation/git-format-patch.txt | 5 ++++
builtin-log.c | 9 +++++++
log-tree.c | 44 +++++++++++++++++++++++++++++++++++-
revision.h | 1 +
t/t4014-format-patch.sh | 26 +++++++++++++++++++++
5 files changed, 84 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index b5207b7..da52720 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -11,6 +11,7 @@ SYNOPSIS
[verse]
'git-format-patch' [-k] [-o <dir> | --stdout] [--thread]
[--attach[=<boundary>] | --inline[=<boundary>]]
+ [--reviewed-by=<ident>]
[-s | --signoff] [<common diff options>]
[-n | --numbered | -N | --no-numbered]
[--start-number <n>] [--numbered-files]
@@ -96,6 +97,10 @@ include::diff-options.txt[]
Do not strip/add '[PATCH]' from the first line of the
commit log message.
+--reviewed-by=<ident>::
+ Add `Reviewed-by:` line to the commit message, using
+ the given identity.
+
-s|--signoff::
Add `Signed-off-by:` line to the commit message, using
the committer identity of yourself.
diff --git a/builtin-log.c b/builtin-log.c
index fe8fc6f..90573b3 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -753,6 +753,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
const char *in_reply_to = NULL;
struct patch_ids ids;
char *add_signoff = NULL;
+ struct path_list add_reviewed_by = { NULL, 0, 0, 0 };
struct strbuf buf;
git_config(git_format_config);
@@ -821,6 +822,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
die("bogos committer info %s\n", committer);
add_signoff = xmemdupz(committer, endpos - committer + 1);
}
+ else if (!prefixcmp(argv[i], "--reviewed-by=")) {
+ struct strbuf buf;
+
+ strbuf_initf(&buf, "Reviewed-by: %s", argv[i] + 14);
+ path_list_append(strbuf_detach(&buf, NULL),
+ &add_reviewed_by);
+ }
else if (!strcmp(argv[i], "--attach")) {
rev.mime_boundary = git_version_string;
rev.no_inline = 1;
@@ -994,6 +1002,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
start_number--;
}
rev.add_signoff = add_signoff;
+ rev.add_reviewed_by = &add_reviewed_by;
while (0 <= --nr) {
int shown;
commit = list[nr];
diff --git a/log-tree.c b/log-tree.c
index 608f697..36621ab 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -3,6 +3,7 @@
#include "commit.h"
#include "log-tree.h"
#include "reflog-walk.h"
+#include "path-list.h"
struct decoration name_decoration = { "object names" };
@@ -79,6 +80,34 @@ static int detect_any_signoff(char *letter, int size)
return seen_head && seen_name;
}
+static void append_reviewed_by(struct strbuf *sb, struct path_list *reviewed)
+{
+ struct path_list already_reviewed = { NULL, 0, 0, 0 };
+ int i, eol = sb->len + 1;
+
+ /* find the last Reviewed-by: lines */
+ for (i = eol - 2; i > 0; i--)
+ if (i == 0 || sb->buf[i - 1] == '\n') {
+ if (!prefixcmp(sb->buf + i, "Reviewed-by:"))
+ path_list_insert(xstrndup(sb->buf + i,
+ eol - i - 1),
+ &already_reviewed);
+ else if (eol - i > 1)
+ break;
+ eol = i;
+ }
+
+ for (i = 0; i < reviewed->nr; i++) {
+ const char *line = reviewed->items[i].path;
+ if (!path_list_has_path(&already_reviewed, line))
+ strbuf_addf(sb, "%s\n", line);
+ }
+
+ /* all strings were xstrndup()ed, clean them up */
+ already_reviewed.strdup_paths = 1;
+ path_list_clear(&already_reviewed, 0);
+}
+
static void append_signoff(struct strbuf *sb, const char *signoff)
{
static const char signed_off_by[] = "Signed-off-by: ";
@@ -137,6 +166,16 @@ static int has_non_ascii(const char *s)
return 0;
}
+static int path_list_has_non_ascii(struct path_list *list)
+{
+ int i;
+
+ for (i = 0; list && i < list->nr; i++)
+ if (has_non_ascii(list->items[i].path))
+ return 1;
+ return 0;
+}
+
void log_write_email_headers(struct rev_info *opt, const char *name,
const char **subject_p, const char **extra_headers_p)
{
@@ -301,8 +340,11 @@ void show_log(struct rev_info *opt, const char *sep)
strbuf_init(&msgbuf, 0);
pretty_print_commit(opt->commit_format, commit, &msgbuf,
abbrev, subject, extra_headers, opt->date_mode,
- has_non_ascii(opt->add_signoff));
+ has_non_ascii(opt->add_signoff) ||
+ path_list_has_non_ascii(opt->add_reviewed_by));
+ if (opt->add_reviewed_by && opt->add_reviewed_by->nr)
+ append_reviewed_by(&msgbuf, opt->add_reviewed_by);
if (opt->add_signoff)
append_signoff(&msgbuf, opt->add_signoff);
if (opt->show_log_size)
diff --git a/revision.h b/revision.h
index c8b3b94..eb4cc3b 100644
--- a/revision.h
+++ b/revision.h
@@ -78,6 +78,7 @@ struct rev_info {
char *message_id;
const char *ref_message_id;
const char *add_signoff;
+ struct path_list *add_reviewed_by;
const char *extra_headers;
const char *log_reencode;
const char *subject_prefix;
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index b2b7a8d..e2ff94f 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -230,4 +230,30 @@ test_expect_success 'shortlog of cover-letter wraps overly-long onelines' '
'
+cat > expect << EOF
+
+Reviewed-by: Ken Robinson
+
+Reviewed-by: Sergey Rachmaninov
+
+Reviewed-by: Ronny O Sullivan
+Reviewed-by: Mickey Mouse
+Reviewed-by: Mahatma Gandhi
+EOF
+
+test_expect_success '--reviewed-by' '
+
+ echo reviewed > foo &&
+ test_tick &&
+ git commit -m "Reviewed" -m "Reviewed-by: Ken Robinson" \
+ -m "Reviewed-by: Sergey Rachmaninov" \
+ -m "Reviewed-by: Ronny O Sullivan" foo &&
+ git format-patch --reviewed-by="Mickey Mouse" \
+ --reviewed-by="Sergey Rachmaninov" \
+ --reviewed-by="Mahatma Gandhi" -1 HEAD &&
+ sed -e "1,/^Cc: /d" -e "/^---/,\$d" < 0001-Reviewed.patch > output &&
+ git diff expect output
+
+'
+
test_done
--
1.5.4.3.571.g9aec3
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html| David Miller | Re: Slow DOWN, please!!! |
| debian developer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Roland Dreier | Re: Integration of SCST in the mainstream Linux kernel |
| Ingo Molnar | Re: containers (was Re: -mm merge plans for 2.6.23) |
git: | |
| Jarek Poplawski | [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Josip Rodin | bnx2_poll panicking kernel |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 13/37] dccp: Deprecate Ack Ratio sysctl |
