зеркало из https://github.com/microsoft/git.git
Merge branch 'jk/format-patch-from'
"format-patch --from=<whom>" forgot to omit unnecessary in-body from line, i.e. when <whom> is the same as the real author. * jk/format-patch-from: format-patch: print in-body "From" only when needed
This commit is contained in:
Коммит
046180ad9d
9
cache.h
9
cache.h
|
@ -957,6 +957,15 @@ struct ident_split {
|
||||||
*/
|
*/
|
||||||
extern int split_ident_line(struct ident_split *, const char *, int);
|
extern int split_ident_line(struct ident_split *, const char *, int);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compare split idents for equality or strict ordering. Note that we
|
||||||
|
* compare only the ident part of the line, ignoring any timestamp.
|
||||||
|
*
|
||||||
|
* Because there are two fields, we must choose one as the primary key; we
|
||||||
|
* currently arbitrarily pick the email.
|
||||||
|
*/
|
||||||
|
extern int ident_cmp(const struct ident_split *, const struct ident_split *);
|
||||||
|
|
||||||
struct checkout {
|
struct checkout {
|
||||||
const char *base_dir;
|
const char *base_dir;
|
||||||
int base_dir_len;
|
int base_dir_len;
|
||||||
|
|
29
ident.c
29
ident.c
|
@ -402,3 +402,32 @@ int git_ident_config(const char *var, const char *value, void *data)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int buf_cmp(const char *a_begin, const char *a_end,
|
||||||
|
const char *b_begin, const char *b_end)
|
||||||
|
{
|
||||||
|
int a_len = a_end - a_begin;
|
||||||
|
int b_len = b_end - b_begin;
|
||||||
|
int min = a_len < b_len ? a_len : b_len;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
|
cmp = memcmp(a_begin, b_begin, min);
|
||||||
|
if (cmp)
|
||||||
|
return cmp;
|
||||||
|
|
||||||
|
return a_len - b_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ident_cmp(const struct ident_split *a,
|
||||||
|
const struct ident_split *b)
|
||||||
|
{
|
||||||
|
int cmp;
|
||||||
|
|
||||||
|
cmp = buf_cmp(a->mail_begin, a->mail_end,
|
||||||
|
b->mail_begin, b->mail_end);
|
||||||
|
if (cmp)
|
||||||
|
return cmp;
|
||||||
|
|
||||||
|
return buf_cmp(a->name_begin, a->name_end,
|
||||||
|
b->name_begin, b->name_end);
|
||||||
|
}
|
||||||
|
|
2
pretty.c
2
pretty.c
|
@ -432,7 +432,7 @@ void pp_user_info(struct pretty_print_context *pp,
|
||||||
map_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen);
|
map_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen);
|
||||||
|
|
||||||
if (pp->fmt == CMIT_FMT_EMAIL) {
|
if (pp->fmt == CMIT_FMT_EMAIL) {
|
||||||
if (pp->from_ident) {
|
if (pp->from_ident && ident_cmp(pp->from_ident, &ident)) {
|
||||||
struct strbuf buf = STRBUF_INIT;
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
|
||||||
strbuf_addstr(&buf, "From: ");
|
strbuf_addstr(&buf, "From: ");
|
||||||
|
|
|
@ -1000,6 +1000,16 @@ test_expect_success '--from uses committer ident' '
|
||||||
test_cmp expect patch.head
|
test_cmp expect patch.head
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--from omits redundant in-body header' '
|
||||||
|
git format-patch -1 --stdout --from="A U Thor <author@example.com>" >patch &&
|
||||||
|
cat >expect <<-\EOF &&
|
||||||
|
From: A U Thor <author@example.com>
|
||||||
|
|
||||||
|
EOF
|
||||||
|
sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head &&
|
||||||
|
test_cmp expect patch.head
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'in-body headers trigger content encoding' '
|
test_expect_success 'in-body headers trigger content encoding' '
|
||||||
GIT_AUTHOR_NAME="éxötìc" test_commit exotic &&
|
GIT_AUTHOR_NAME="éxötìc" test_commit exotic &&
|
||||||
test_when_finished "git reset --hard HEAD^" &&
|
test_when_finished "git reset --hard HEAD^" &&
|
||||||
|
|
Загрузка…
Ссылка в новой задаче