From: "Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>
To: Mathias Weber <mweb@gmx.ch>
Cc: git@vger.kernel.org, peff@peff.net
Subject: Re: [PATCH] tag: add --author option
Date: Tue, 27 Mar 2012 19:29:38 +0200 [thread overview]
Message-ID: <4F71F902.8090200@in.waw.pl> (raw)
In-Reply-To: <4F71E415.9030800@gmx.ch>
On 03/27/2012 06:00 PM, Mathias Weber wrote:
>
> The tag command does not support the --author option as the
> commit command. This adds the --author option to create
> annotated tags with a different author.
Consistency is good.
> Signed-off-by: Mathias Weber<mathew.weber@gmail.com>
> ---
> builtin/tag.c | 26 +++++++++++++++++++++++---
> 1 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/builtin/tag.c b/builtin/tag.c
> index fe7e5e5..416fa88 100644
> --- a/builtin/tag.c
> +++ b/builtin/tag.c
> @@ -309,17 +309,34 @@ struct create_tag_options {
>
> static void create_tag(const unsigned char *object, const char *tag,
> struct strbuf *buf, struct create_tag_options *opt,
> - unsigned char *prev, unsigned char *result)
> + unsigned char *prev, unsigned char *result,
> + const char *force_author)
> {
> enum object_type type;
> char header_buf[1024];
> int header_len;
> char *path = NULL;
> + char *name, *email;
> + const char *author_ident;
>
> type = sha1_object_info(object, NULL);
> if (type<= OBJ_NONE)
> die(_("bad object type."));
>
> + if (force_author) {
> + const char *lb = strstr(force_author, "<");
> + const char *rb = strchr(force_author, '>');
> +
> + if (!lb || !rb)
> + die(_("malformed --author parameter"));
> + name = xstrndup(force_author, lb - force_author);
> + email = xstrndup(lb + 2, rb - (lb + 2));
This part is identical to builtin/commit.c, it would be nice to refactor
it into a function.
Zbyszek
> +
> + author_ident = fmt_ident(name, email, getenv("GIT_AUTHOR_DATE"),
> + IDENT_ERROR_ON_NO_NAME);
> + } else
> + author_ident = git_committer_info(IDENT_ERROR_ON_NO_NAME);
> +
> header_len = snprintf(header_buf, sizeof(header_buf),
> "object %s\n"
> "type %s\n"
> @@ -328,7 +345,7 @@ static void create_tag(const unsigned char *object, const char *tag,
> sha1_to_hex(object),
> typename(type),
> tag,
> - git_committer_info(IDENT_ERROR_ON_NO_NAME));
> + author_ident);
>
> if (header_len> sizeof(header_buf) - 1)
> die(_("tag header too big."));
> @@ -438,6 +455,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
> delete = 0, verify = 0;
> const char *msgfile = NULL, *keyid = NULL;
> struct msg_arg msg = { 0, STRBUF_INIT };
> + const char *force_author = NULL;
> struct commit_list *with_commit = NULL;
> struct option options[] = {
> OPT_BOOLEAN('l', "list",&list, "list tag names"),
> @@ -452,6 +470,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
> "annotated tag, needs a message"),
> OPT_CALLBACK('m', "message",&msg, "message",
> "tag message", parse_msg_arg),
> + OPT_STRING(0, "author",&force_author, "author",
> + "override author for annotated tag"),
> OPT_FILENAME('F', "file",&msgfile, "read message from file"),
> OPT_BOOLEAN('s', "sign",&opt.sign, "annotated and GPG-signed tag"),
> OPT_STRING(0, "cleanup",&cleanup_arg, "mode",
> @@ -556,7 +576,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
> die(_("Invalid cleanup mode %s"), cleanup_arg);
>
> if (annotate)
> - create_tag(object, tag,&buf,&opt, prev, object);
> + create_tag(object, tag,&buf,&opt, prev, object, force_author);
>
> lock = lock_any_ref_for_update(ref.buf, prev, 0);
> if (!lock)
next prev parent reply other threads:[~2012-03-27 17:30 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-27 16:00 [PATCH] tag: add --author option Mathias Weber
2012-03-27 17:29 ` Zbigniew Jędrzejewski-Szmek [this message]
2012-03-27 20:32 ` Mathias Weber
2012-03-27 20:52 ` Junio C Hamano
2012-03-27 21:11 ` Mathias Weber
2012-03-27 23:05 ` Junio C Hamano
2012-03-27 20:42 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4F71F902.8090200@in.waw.pl \
--to=zbyszek@in.waw.pl \
--cc=git@vger.kernel.org \
--cc=mweb@gmx.ch \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).