git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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)

  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).