replace: remove signature when using --graft
It could be misleading to keep a signature in a replacement commit, so let's remove it. Note that there should probably be a way to sign the replacement commit created when using --graft, but this can be dealt with in another commit or patch series. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b0ab2b71d0
commit
0b05ab6f1b
@ -344,6 +344,11 @@ static int create_graft(int argc, const char **argv, int force)
|
|||||||
|
|
||||||
replace_parents(&buf, argc - 1, &argv[1]);
|
replace_parents(&buf, argc - 1, &argv[1]);
|
||||||
|
|
||||||
|
if (remove_signature(&buf)) {
|
||||||
|
warning(_("the original commit '%s' has a gpg signature."), old_ref);
|
||||||
|
warning(_("the signature will be removed in the replacement commit!"));
|
||||||
|
}
|
||||||
|
|
||||||
if (write_sha1_file(buf.buf, buf.len, commit_type, new))
|
if (write_sha1_file(buf.buf, buf.len, commit_type, new))
|
||||||
die(_("could not write replacement commit for: '%s'"), old_ref);
|
die(_("could not write replacement commit for: '%s'"), old_ref);
|
||||||
|
|
||||||
|
34
commit.c
34
commit.c
@ -1178,6 +1178,40 @@ int parse_signed_commit(const struct commit *commit,
|
|||||||
return saw_signature;
|
return saw_signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int remove_signature(struct strbuf *buf)
|
||||||
|
{
|
||||||
|
const char *line = buf->buf;
|
||||||
|
const char *tail = buf->buf + buf->len;
|
||||||
|
int in_signature = 0;
|
||||||
|
const char *sig_start = NULL;
|
||||||
|
const char *sig_end = NULL;
|
||||||
|
|
||||||
|
while (line < tail) {
|
||||||
|
const char *next = memchr(line, '\n', tail - line);
|
||||||
|
next = next ? next + 1 : tail;
|
||||||
|
|
||||||
|
if (in_signature && line[0] == ' ')
|
||||||
|
sig_end = next;
|
||||||
|
else if (starts_with(line, gpg_sig_header) &&
|
||||||
|
line[gpg_sig_header_len] == ' ') {
|
||||||
|
sig_start = line;
|
||||||
|
sig_end = next;
|
||||||
|
in_signature = 1;
|
||||||
|
} else {
|
||||||
|
if (*line == '\n')
|
||||||
|
/* dump the whole remainder of the buffer */
|
||||||
|
next = tail;
|
||||||
|
in_signature = 0;
|
||||||
|
}
|
||||||
|
line = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sig_start)
|
||||||
|
strbuf_remove(buf, sig_start - buf->buf, sig_end - sig_start);
|
||||||
|
|
||||||
|
return sig_start != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void handle_signed_tag(struct commit *parent, struct commit_extra_header ***tail)
|
static void handle_signed_tag(struct commit *parent, struct commit_extra_header ***tail)
|
||||||
{
|
{
|
||||||
struct merge_remote_desc *desc;
|
struct merge_remote_desc *desc;
|
||||||
|
2
commit.h
2
commit.h
@ -332,6 +332,8 @@ struct commit *get_merge_parent(const char *name);
|
|||||||
|
|
||||||
extern int parse_signed_commit(const struct commit *commit,
|
extern int parse_signed_commit(const struct commit *commit,
|
||||||
struct strbuf *message, struct strbuf *signature);
|
struct strbuf *message, struct strbuf *signature);
|
||||||
|
extern int remove_signature(struct strbuf *buf);
|
||||||
|
|
||||||
extern void print_commit_list(struct commit_list *list,
|
extern void print_commit_list(struct commit_list *list,
|
||||||
const char *format_cur,
|
const char *format_cur,
|
||||||
const char *format_last);
|
const char *format_last);
|
||||||
|
Loading…
Reference in New Issue
Block a user