From: John Keeping <john@keeping.me.uk>
To: Michal Novotny <minovotn@redhat.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2] git-tag: Allow --points-at syntax to create a tag pointing to specified commit
Date: Thu, 14 Mar 2013 13:36:29 +0000 [thread overview]
Message-ID: <20130314133629.GA4256@serenity.lan> (raw)
In-Reply-To: <4150f65f3e425d6120ed80c6bec36c1fe209a876.1363264398.git.minovotn@redhat.com>
On Thu, Mar 14, 2013 at 01:34:54PM +0100, Michal Novotny wrote:
> This patch adds the option to specify SHA-1 commit hash using --points-at
> option of git tag to create a tag pointing to a historical commit.
What does this do that "git tag <name> <commit>" doesn't?
> This was pretty easy in the past for the lightweight tags that are just simple
> pointers (by creating .git/refs/tags/$tagname with SHA-1 hash) but it was not
> possible for signed and annotated commits.
>
> It's been tested for all of the tag types mentioned - lightweight tags, signed
> tags and also annotated tags and everything is working fine in all scenarios
> mentioned above.
>
> Differences between v1 and v2 (this one):
> - The bogus sha1-lookup.h hunk has been removed as it's not required and
> I accidentally forgot to remove it before posting v1
>
> Michal
>
> Signed-off-by: Michal Novotny <minovotn@redhat.com>
> ---
> builtin/tag.c | 32 ++++++++++++++++++++++++++------
> 1 file changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/builtin/tag.c b/builtin/tag.c
> index f826688..f642acd 100644
> --- a/builtin/tag.c
> +++ b/builtin/tag.c
> @@ -437,7 +437,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
> struct create_tag_options opt;
> char *cleanup_arg = NULL;
> int annotate = 0, force = 0, lines = -1, list = 0,
> - delete = 0, verify = 0;
> + delete = 0, verify = 0, points_at_commit = 0;
> const char *msgfile = NULL, *keyid = NULL;
> struct msg_arg msg = { 0, STRBUF_INIT };
> struct commit_list *with_commit = NULL;
> @@ -521,8 +521,24 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
> die(_("-n option is only allowed with -l."));
> if (with_commit)
> die(_("--contains option is only allowed with -l."));
> - if (points_at.nr)
> - die(_("--points-at option is only allowed with -l."));
> + if (points_at.nr) {
> + if (points_at.nr > 1)
> + die(_("--points-at option is only allowed with -l or a single "
> + "SHA-1 hash is allowed to create a tag to commit."));
> + else {
> + unsigned char *ref = points_at.sha1[0];
> +
> + struct object *obj = parse_object(ref);
> + if ((obj != NULL) && (obj->type == OBJ_COMMIT)) {
> + memcpy(object, ref, 20);
> + points_at_commit = 1;
> + }
> + else
> + die(_("--points-at option points to an invalid commit"));
> +
> + free(ref);
> + }
> + }
> if (delete)
> return for_each_tag_name(argv, delete_tag);
> if (verify)
> @@ -548,12 +564,16 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
>
> tag = argv[0];
>
> - object_ref = argc == 2 ? argv[1] : "HEAD";
> if (argc > 2)
> die(_("too many params"));
>
> - if (get_sha1(object_ref, object))
> - die(_("Failed to resolve '%s' as a valid ref."), object_ref);
> + /* Option --points-at option is setting this already */
> + if (!points_at_commit) {
> + object_ref = argc == 2 ? argv[1] : "HEAD";
> +
> + if (get_sha1(object_ref, object))
> + die(_("Failed to resolve '%s' as a valid ref."), object_ref);
> + }
>
> if (strbuf_check_tag_ref(&ref, tag))
> die(_("'%s' is not a valid tag name."), tag);
> --
> 1.7.11.7
next prev parent reply other threads:[~2013-03-14 13:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-14 12:34 [PATCH v2] git-tag: Allow --points-at syntax to create a tag pointing to specified commit Michal Novotny
2013-03-14 13:36 ` John Keeping [this message]
2013-03-14 14:36 ` Michal Novotny
2013-03-14 15:48 ` 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=20130314133629.GA4256@serenity.lan \
--to=john@keeping.me.uk \
--cc=git@vger.kernel.org \
--cc=minovotn@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.