[PATCH] tag: reference with "h" instead of "id"

Ferry Huberts mailings at hupie.com
Thu Jan 15 23:23:12 CET 2015


Thanks for picking this up so fast John.
The solution is also what I preferred :-)

(didn't review the patch, been out of cgit dev for too long)

On 15/01/15 23:18, John Keeping wrote:
> When clicking on "log" from a tag we end up showing the log of whatever
> branch we used to reach the tag.  If the tag doesn't point onto a branch
> then the tagged commit won't appear in this output.
>
> By linking to tags with the head parameter instead of the "id" parameter
> the log link will show the log of the tag.  This is clearly desirable
> when the tag has been reached from the refs UI and changing the
> behaviour for tag decorations makes them match branch decorations where
> log -> decoration -> log shows the log of the decoration.
>
> Reported-by: Ferry Huberts <mailings at hupie.com>
> Signed-off-by: John Keeping <john at keeping.me.uk>
> ---
>> I think we actually want something like this:
>>
>> -- >8 --
>> diff --git a/ui-refs.c b/ui-refs.c
>> index bdd3b2c..d3017ec 100644
>> --- a/ui-refs.c
>> +++ b/ui-refs.c
>> @@ -140,7 +140,7 @@ static int print_tag(struct refinfo *ref)
>>   	}
>>
>>   	html("<tr><td>");
>> -	cgit_tag_link(name, NULL, NULL, ctx.qry.head, name);
>> +	cgit_tag_link(name, NULL, NULL, name, NULL);
>>   	html("</td><td>");
>>   	if (ctx.repo->snapshots && (obj->type == OBJ_COMMIT))
>>   		print_tag_downloads(ctx.repo, name);
>> -- 8< --
>>
>> The tag UI already does the right thing if we use "h" instead of "id".
>>
>> The only thing I'm not sure about is whether we should change all tag
>> links to behave like this.  That would make tag decorations consistent
>> with branch decorations which already change the head, so I think that
>> is the way to go.
>
> This is what that looks like.
>
>   ui-log.c    | 4 ++--
>   ui-refs.c   | 2 +-
>   ui-shared.c | 8 ++++----
>   ui-shared.h | 3 +--
>   4 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/ui-log.c b/ui-log.c
> index 657ff3c..1b60591 100644
> --- a/ui-log.c
> +++ b/ui-log.c
> @@ -71,11 +71,11 @@ void show_commit_decorations(struct commit *commit)
>   		}
>   		else if (starts_with(deco->name, "tag: refs/tags/")) {
>   			strncpy(buf, deco->name + 15, sizeof(buf) - 1);
> -			cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
> +			cgit_tag_link(buf, NULL, "tag-deco", buf);
>   		}
>   		else if (starts_with(deco->name, "refs/tags/")) {
>   			strncpy(buf, deco->name + 10, sizeof(buf) - 1);
> -			cgit_tag_link(buf, NULL, "tag-deco", ctx.qry.head, buf);
> +			cgit_tag_link(buf, NULL, "tag-deco", buf);
>   		}
>   		else if (starts_with(deco->name, "refs/remotes/")) {
>   			if (!ctx.repo->enable_remote_branches)
> diff --git a/ui-refs.c b/ui-refs.c
> index d2ba48d..ac8a6d4 100644
> --- a/ui-refs.c
> +++ b/ui-refs.c
> @@ -140,7 +140,7 @@ static int print_tag(struct refinfo *ref)
>   	}
>
>   	html("<tr><td>");
> -	cgit_tag_link(name, NULL, NULL, ctx.qry.head, name);
> +	cgit_tag_link(name, NULL, NULL, name);
>   	html("</td><td>");
>   	if (ctx.repo->snapshots && (obj->type == OBJ_COMMIT))
>   		print_tag_downloads(ctx.repo, name);
> diff --git a/ui-shared.c b/ui-shared.c
> index 32f23f9..d8cc4d7 100644
> --- a/ui-shared.c
> +++ b/ui-shared.c
> @@ -273,9 +273,9 @@ void cgit_summary_link(const char *name, const char *title, const char *class,
>   }
>
>   void cgit_tag_link(const char *name, const char *title, const char *class,
> -		   const char *head, const char *rev)
> +		   const char *tag)
>   {
> -	reporevlink("tag", name, title, class, head, rev, NULL);
> +	reporevlink("tag", name, title, class, tag, NULL, NULL);
>   }
>
>   void cgit_tree_link(const char *name, const char *title, const char *class,
> @@ -443,8 +443,8 @@ static void cgit_self_link(char *name, const char *title, const char *class)
>   	else if (!strcmp(ctx.qry.page, "summary"))
>   		cgit_summary_link(name, title, class, ctx.qry.head);
>   	else if (!strcmp(ctx.qry.page, "tag"))
> -		cgit_tag_link(name, title, class, ctx.qry.head,
> -			      ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL);
> +		cgit_tag_link(name, title, class, ctx.qry.has_sha1 ?
> +			       ctx.qry.sha1 : ctx.qry.head);
>   	else if (!strcmp(ctx.qry.page, "tree"))
>   		cgit_tree_link(name, title, class, ctx.qry.head,
>   			       ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,
> diff --git a/ui-shared.h b/ui-shared.h
> index f8cf220..021fe4e 100644
> --- a/ui-shared.h
> +++ b/ui-shared.h
> @@ -18,8 +18,7 @@ extern void cgit_index_link(const char *name, const char *title,
>   extern void cgit_summary_link(const char *name, const char *title,
>   			      const char *class, const char *head);
>   extern void cgit_tag_link(const char *name, const char *title,
> -			  const char *class, const char *head,
> -			  const char *rev);
> +			  const char *class, const char *tag);
>   extern void cgit_tree_link(const char *name, const char *title,
>   			   const char *class, const char *head,
>   			   const char *rev, const char *path);
>

-- 
Ferry Huberts


More information about the CGit mailing list