提交 cf2251b6 编写于 作者: J Junio C Hamano

format-patch --signoff

This resurrects --signoff option to format-patch.
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 1361fa3e
......@@ -150,6 +150,7 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
int numbered = 0;
int start_number = -1;
int keep_subject = 0;
char *add_signoff = NULL;
init_revisions(&rev);
rev.commit_format = CMIT_FMT_EMAIL;
......@@ -179,11 +180,13 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
if (i == argc)
die("Need a number for --start-number");
start_number = strtol(argv[i], NULL, 10);
} else if (!strcmp(argv[i], "-k") ||
}
else if (!strcmp(argv[i], "-k") ||
!strcmp(argv[i], "--keep-subject")) {
keep_subject = 1;
rev.total = -1;
} else if (!strcmp(argv[i], "-o")) {
}
else if (!strcmp(argv[i], "-o")) {
if (argc < 3)
die ("Which directory?");
if (mkdir(argv[i + 1], 0777) < 0 && errno != EEXIST)
......@@ -192,6 +195,16 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
output_directory = strdup(argv[i + 1]);
i++;
}
else if (!strcmp(argv[i], "--signoff") ||
!strcmp(argv[i], "-s")) {
const char *committer = git_committer_info(1);
const char *endpos = strchr(committer, '>');
if (!endpos)
die("bogos committer info %s\n", committer);
add_signoff = xmalloc(endpos - committer + 2);
memcpy(add_signoff, committer, endpos - committer + 1);
add_signoff[endpos - committer + 1] = 0;
}
else if (!strcmp(argv[i], "--attach"))
rev.mime_boundary = git_version_string;
else if (!strncmp(argv[i], "--attach=", 9))
......@@ -230,6 +243,7 @@ int cmd_format_patch(int argc, const char **argv, char **envp)
total = nr;
if (numbered)
rev.total = total + start_number - 1;
rev.add_signoff = add_signoff;
while (0 <= --nr) {
int shown;
commit = list[nr];
......
......@@ -12,6 +12,37 @@ static void show_parents(struct commit *commit, int abbrev)
}
}
static int append_signoff(char *buf, int buf_sz, int at, const char *signoff)
{
int signoff_len = strlen(signoff);
static const char signed_off_by[] = "Signed-off-by: ";
char *cp = buf;
/* Do we have enough space to add it? */
if (buf_sz - at <= strlen(signed_off_by) + signoff_len + 2)
return at;
/* First see if we already have the sign-off by the signer */
while (1) {
cp = strstr(cp, signed_off_by);
if (!cp)
break;
cp += strlen(signed_off_by);
if ((cp + signoff_len < buf + at) &&
!strncmp(cp, signoff, signoff_len) &&
isspace(cp[signoff_len]))
return at; /* we already have him */
}
strcpy(buf + at, signed_off_by);
at += strlen(signed_off_by);
strcpy(buf + at, signoff);
at += signoff_len;
buf[at++] = '\n';
buf[at] = 0;
return at;
}
void show_log(struct rev_info *opt, struct log_info *log, const char *sep)
{
static char this_header[16384];
......@@ -111,6 +142,10 @@ void show_log(struct rev_info *opt, struct log_info *log, const char *sep)
* And then the pretty-printed message itself
*/
len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header, sizeof(this_header), abbrev, subject, after_subject);
if (opt->add_signoff)
len = append_signoff(this_header, sizeof(this_header), len,
opt->add_signoff);
printf("%s%s%s", this_header, extra, sep);
}
......
......@@ -60,6 +60,7 @@ struct rev_info {
struct log_info *loginfo;
int nr, total;
const char *mime_boundary;
const char *add_signoff;
/* special limits */
int max_count;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册