зеркало из https://github.com/microsoft/git.git
ref-filter: add `sanitize` option for 'subject' atom
Currently, subject does not take any arguments. This commit introduce `sanitize` formatting option to 'subject' atom. `subject:sanitize` - print sanitized subject line, suitable for a filename. e.g. %(subject): "the subject line" %(subject:sanitize): "the-subject-line" Mentored-by: Christian Couder <chriscool@tuxfamily.org> Mentored-by: Heba Waly <heba.waly@gmail.com> Signed-off-by: Hariom Verma <hariom18599@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
47d4676ac8
Коммит
905f0a4e64
|
@ -247,6 +247,9 @@ contents:subject::
|
||||||
The first paragraph of the message, which typically is a
|
The first paragraph of the message, which typically is a
|
||||||
single line, is taken as the "subject" of the commit or the
|
single line, is taken as the "subject" of the commit or the
|
||||||
tag message.
|
tag message.
|
||||||
|
Instead of `contents:subject`, field `subject` can also be used to
|
||||||
|
obtain same results. `:sanitize` can be appended to `subject` for
|
||||||
|
subject line suitable for filename.
|
||||||
|
|
||||||
contents:body::
|
contents:body::
|
||||||
The remainder of the commit or the tag message that follows
|
The remainder of the commit or the tag message that follows
|
||||||
|
|
23
ref-filter.c
23
ref-filter.c
|
@ -127,8 +127,8 @@ static struct used_atom {
|
||||||
unsigned int nobracket : 1, push : 1, push_remote : 1;
|
unsigned int nobracket : 1, push : 1, push_remote : 1;
|
||||||
} remote_ref;
|
} remote_ref;
|
||||||
struct {
|
struct {
|
||||||
enum { C_BARE, C_BODY, C_BODY_DEP, C_LENGTH,
|
enum { C_BARE, C_BODY, C_BODY_DEP, C_LENGTH, C_LINES,
|
||||||
C_LINES, C_SIG, C_SUB, C_TRAILERS } option;
|
C_SIG, C_SUB, C_SUB_SANITIZE, C_TRAILERS } option;
|
||||||
struct process_trailer_options trailer_opts;
|
struct process_trailer_options trailer_opts;
|
||||||
unsigned int nlines;
|
unsigned int nlines;
|
||||||
} contents;
|
} contents;
|
||||||
|
@ -301,9 +301,12 @@ static int body_atom_parser(const struct ref_format *format, struct used_atom *a
|
||||||
static int subject_atom_parser(const struct ref_format *format, struct used_atom *atom,
|
static int subject_atom_parser(const struct ref_format *format, struct used_atom *atom,
|
||||||
const char *arg, struct strbuf *err)
|
const char *arg, struct strbuf *err)
|
||||||
{
|
{
|
||||||
if (arg)
|
if (!arg)
|
||||||
return strbuf_addf_ret(err, -1, _("%%(subject) does not take arguments"));
|
atom->u.contents.option = C_SUB;
|
||||||
atom->u.contents.option = C_SUB;
|
else if (!strcmp(arg, "sanitize"))
|
||||||
|
atom->u.contents.option = C_SUB_SANITIZE;
|
||||||
|
else
|
||||||
|
return strbuf_addf_ret(err, -1, _("unrecognized %%(subject) argument: %s"), arg);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1282,8 +1285,8 @@ static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf)
|
||||||
continue;
|
continue;
|
||||||
if (deref)
|
if (deref)
|
||||||
name++;
|
name++;
|
||||||
if (strcmp(name, "subject") &&
|
if (strcmp(name, "body") &&
|
||||||
strcmp(name, "body") &&
|
!starts_with(name, "subject") &&
|
||||||
!starts_with(name, "trailers") &&
|
!starts_with(name, "trailers") &&
|
||||||
!starts_with(name, "contents"))
|
!starts_with(name, "contents"))
|
||||||
continue;
|
continue;
|
||||||
|
@ -1295,7 +1298,11 @@ static void grab_sub_body_contents(struct atom_value *val, int deref, void *buf)
|
||||||
|
|
||||||
if (atom->u.contents.option == C_SUB)
|
if (atom->u.contents.option == C_SUB)
|
||||||
v->s = copy_subject(subpos, sublen);
|
v->s = copy_subject(subpos, sublen);
|
||||||
else if (atom->u.contents.option == C_BODY_DEP)
|
else if (atom->u.contents.option == C_SUB_SANITIZE) {
|
||||||
|
struct strbuf sb = STRBUF_INIT;
|
||||||
|
format_sanitized_subject(&sb, subpos, sublen);
|
||||||
|
v->s = strbuf_detach(&sb, NULL);
|
||||||
|
} else if (atom->u.contents.option == C_BODY_DEP)
|
||||||
v->s = xmemdupz(bodypos, bodylen);
|
v->s = xmemdupz(bodypos, bodylen);
|
||||||
else if (atom->u.contents.option == C_LENGTH)
|
else if (atom->u.contents.option == C_LENGTH)
|
||||||
v->s = xstrfmt("%"PRIuMAX, (uintmax_t)strlen(subpos));
|
v->s = xstrfmt("%"PRIuMAX, (uintmax_t)strlen(subpos));
|
||||||
|
|
|
@ -150,6 +150,7 @@ test_atom head taggerdate ''
|
||||||
test_atom head creator 'C O Mitter <committer@example.com> 1151968723 +0200'
|
test_atom head creator 'C O Mitter <committer@example.com> 1151968723 +0200'
|
||||||
test_atom head creatordate 'Tue Jul 4 01:18:43 2006 +0200'
|
test_atom head creatordate 'Tue Jul 4 01:18:43 2006 +0200'
|
||||||
test_atom head subject 'Initial'
|
test_atom head subject 'Initial'
|
||||||
|
test_atom head subject:sanitize 'Initial'
|
||||||
test_atom head contents:subject 'Initial'
|
test_atom head contents:subject 'Initial'
|
||||||
test_atom head body ''
|
test_atom head body ''
|
||||||
test_atom head contents:body ''
|
test_atom head contents:body ''
|
||||||
|
@ -207,6 +208,7 @@ test_atom tag taggerdate 'Tue Jul 4 01:18:45 2006 +0200'
|
||||||
test_atom tag creator 'C O Mitter <committer@example.com> 1151968725 +0200'
|
test_atom tag creator 'C O Mitter <committer@example.com> 1151968725 +0200'
|
||||||
test_atom tag creatordate 'Tue Jul 4 01:18:45 2006 +0200'
|
test_atom tag creatordate 'Tue Jul 4 01:18:45 2006 +0200'
|
||||||
test_atom tag subject 'Tagging at 1151968727'
|
test_atom tag subject 'Tagging at 1151968727'
|
||||||
|
test_atom tag subject:sanitize 'Tagging-at-1151968727'
|
||||||
test_atom tag contents:subject 'Tagging at 1151968727'
|
test_atom tag contents:subject 'Tagging at 1151968727'
|
||||||
test_atom tag body ''
|
test_atom tag body ''
|
||||||
test_atom tag contents:body ''
|
test_atom tag contents:body ''
|
||||||
|
@ -619,6 +621,7 @@ test_expect_success 'create tag with subject and body content' '
|
||||||
git tag -F msg subject-body
|
git tag -F msg subject-body
|
||||||
'
|
'
|
||||||
test_atom refs/tags/subject-body subject 'the subject line'
|
test_atom refs/tags/subject-body subject 'the subject line'
|
||||||
|
test_atom refs/tags/subject-body subject:sanitize 'the-subject-line'
|
||||||
test_atom refs/tags/subject-body body 'first body line
|
test_atom refs/tags/subject-body body 'first body line
|
||||||
second body line
|
second body line
|
||||||
'
|
'
|
||||||
|
@ -639,6 +642,7 @@ test_expect_success 'create tag with multiline subject' '
|
||||||
git tag -F msg multiline
|
git tag -F msg multiline
|
||||||
'
|
'
|
||||||
test_atom refs/tags/multiline subject 'first subject line second subject line'
|
test_atom refs/tags/multiline subject 'first subject line second subject line'
|
||||||
|
test_atom refs/tags/multiline subject:sanitize 'first-subject-line-second-subject-line'
|
||||||
test_atom refs/tags/multiline contents:subject 'first subject line second subject line'
|
test_atom refs/tags/multiline contents:subject 'first subject line second subject line'
|
||||||
test_atom refs/tags/multiline body 'first body line
|
test_atom refs/tags/multiline body 'first body line
|
||||||
second body line
|
second body line
|
||||||
|
@ -671,6 +675,7 @@ sig='-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
PREREQ=GPG
|
PREREQ=GPG
|
||||||
test_atom refs/tags/signed-empty subject ''
|
test_atom refs/tags/signed-empty subject ''
|
||||||
|
test_atom refs/tags/signed-empty subject:sanitize ''
|
||||||
test_atom refs/tags/signed-empty contents:subject ''
|
test_atom refs/tags/signed-empty contents:subject ''
|
||||||
test_atom refs/tags/signed-empty body "$sig"
|
test_atom refs/tags/signed-empty body "$sig"
|
||||||
test_atom refs/tags/signed-empty contents:body ''
|
test_atom refs/tags/signed-empty contents:body ''
|
||||||
|
@ -678,6 +683,7 @@ test_atom refs/tags/signed-empty contents:signature "$sig"
|
||||||
test_atom refs/tags/signed-empty contents "$sig"
|
test_atom refs/tags/signed-empty contents "$sig"
|
||||||
|
|
||||||
test_atom refs/tags/signed-short subject 'subject line'
|
test_atom refs/tags/signed-short subject 'subject line'
|
||||||
|
test_atom refs/tags/signed-short subject:sanitize 'subject-line'
|
||||||
test_atom refs/tags/signed-short contents:subject 'subject line'
|
test_atom refs/tags/signed-short contents:subject 'subject line'
|
||||||
test_atom refs/tags/signed-short body "$sig"
|
test_atom refs/tags/signed-short body "$sig"
|
||||||
test_atom refs/tags/signed-short contents:body ''
|
test_atom refs/tags/signed-short contents:body ''
|
||||||
|
@ -686,6 +692,7 @@ test_atom refs/tags/signed-short contents "subject line
|
||||||
$sig"
|
$sig"
|
||||||
|
|
||||||
test_atom refs/tags/signed-long subject 'subject line'
|
test_atom refs/tags/signed-long subject 'subject line'
|
||||||
|
test_atom refs/tags/signed-long subject:sanitize 'subject-line'
|
||||||
test_atom refs/tags/signed-long contents:subject 'subject line'
|
test_atom refs/tags/signed-long contents:subject 'subject line'
|
||||||
test_atom refs/tags/signed-long body "body contents
|
test_atom refs/tags/signed-long body "body contents
|
||||||
$sig"
|
$sig"
|
||||||
|
|
Загрузка…
Ссылка в новой задаче