git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 5/5] gitweb: Denote non-heads, non-remotes branches

From
Jakub Narębski <jnareb@gmail.com>
Date
Dec 4, 2013, 18:54 UTC
Message-ID
<CANQwDwfBWbgUfi8w+p3K1OySiMhp_OaxL2TGRyX6Qaeape=DCA@mail.gmail.com>
In-Reply-To
<1386164583-14109-6-git-send-email-krzesimir@endocode.com>
On Wed, Dec 4, 2013 at 2:43 PM, Krzesimir Nowak <krzesimir@endocode.com> wrote:
Show 10 quoted lines
> Given two branches residing in refs/heads/master and refs/wip/feature
> the list-of-branches view will present them in following way:
>
> master
> feature (wip)
>
> When getting a snapshot of a 'feature' branch, the tarball is going to
> have name like 'project-wip-feature-<short hash>.tgz'.
>
> Signed-off-by: Krzesimir Nowak <krzesimir@endocode.com>

Very nice feature, which allows to distinguish between refs/heads/feature and refs/wip/feature.

Show 15 quoted lines
> ---
>  gitweb/gitweb.perl | 27 +++++++++++++++++++++++++--
>  1 file changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
> index 6d3d52d..9a63ea9 100755
> --- a/gitweb/gitweb.perl
> +++ b/gitweb/gitweb.perl
> @@ -3739,8 +3739,14 @@ sub git_get_heads_list {
>                 $ref_item{'fullname'}  = $name;
>                 my $strip_refs = join '|', map { quotemeta } get_branch_refs();
>                 $name =~ s!^refs/($strip_refs|remotes)/!!;
> +               $ref_item{'name'} = $name;
> +               # for refs neither in 'heads' nor 'remotes' we want to
> +               # show their different ref dir
Perhaps simply:
  +               # for refs neither in 'heads' nor 'remotes' we want
to show their ref dir
Show 26 quoted lines
> +               my $ref_dir = (defined $1) ? $1 : '';
> +               if ($ref_dir ne '' and $ref_dir ne 'heads' and $ref_dir ne 'remotes') {
> +                   $ref_item{'name'} .= ' (' . $ref_dir . ')';
> +               }
>
> -               $ref_item{'name'}  = $name;
>                 $ref_item{'id'}    = $hash;
>                 $ref_item{'title'} = $title || '(no commit message)';
>                 $ref_item{'epoch'} = $epoch;
> @@ -7257,7 +7263,24 @@ sub snapshot_name {
>                 # branches and other need shortened SHA-1 hash
>                 my $strip_refs = join '|', map { quotemeta } get_branch_refs();
>                 if ($hash =~ m!^refs/($strip_refs|remotes)/(.*)$!) {
> -                       $ver = $1;
> +                       my $ref_dir = $1;
> +                       $ver = $2;
> +
> +                       if (defined $ref_dir) {
> +                               # this is going to be a part of
> +                               # filename, so lets stick to
> +                               # alphanumerics, dashes and underlines
> +                               # only - some filesystems do not like
> +                               # some punctuation symbols for
> +                               # example.
> +                               $ref_dir =~ s/[^[:alnum:]_-]//g;
> +                       }

I think this safety replacement should apply also to other parts of filename, if it is to be used.

$ref_dir should be compatibile with path-part - in loose form it is stored on filesystem... though different filesystems might have different restrictions.

One thing we should worry about is '/' in hierarchical refdir names, e.g. 'wip/jk', which needs to be replaced / sanitized somehow, though probably as 'wip-jk' or 'wip_jk' rather than 'wipjk', isn't it?

Show 12 quoted lines
> +
> +                       # for refs not in heads nor remotes we want to
> +                       # add a ref dir to archive name
> +                       if ($ref_dir ne '' and $ref_dir ne 'heads' and $ref_dir ne 'remotes') {
> +                               $ver = $ref_dir . '-' . $ver;
> +                       }
>                 }
>                 $ver .= '-' . git_get_short_hash($project, $hash);
>         }
> --
> 1.8.3.1
>
-- 
Jakub Narebski
Previous: Krzesimir NowakNext: Junio C Hamano
Message 31 of 32 in “Show extra branch refs in gitweb v6”
  1. 0/5 Show extra branch refs in gitweb v6Krzesimir Nowak, Dec 4, 2013
  2. 1/5 gitweb: Add a comment explaining the meaning of $/Krzesimir Nowak, Dec 4, 2013
  3. Jakub NarębskiDec 4, 2013
  4. Krzesimir NowakDec 4, 2013
  5. Martin LanghoffDec 4, 2013
  6. Junio C HamanoDec 4, 2013
  7. Krzesimir NowakDec 5, 2013
  8. Jakub NarębskiDec 4, 2013
  9. Jakub NarębskiDec 4, 2013
  10. 2/5 gitweb: Move check-ref-format code into separate functionKrzesimir Nowak, Dec 4, 2013
  11. Jakub NarębskiDec 4, 2013
  12. Krzesimir NowakDec 5, 2013
  13. Junio C HamanoDec 4, 2013
  14. Krzesimir NowakDec 5, 2013
  15. 3/5 gitweb: Return plain booleans in validation methodsKrzesimir Nowak, Dec 4, 2013
  16. Jakub NarębskiDec 4, 2013
  17. Junio C HamanoDec 4, 2013
  18. Krzesimir NowakDec 5, 2013
  19. Junio C HamanoDec 5, 2013
  20. Jakub NarębskiDec 5, 2013
  21. Junio C HamanoDec 5, 2013
  22. 4/5 gitweb: Add a feature for adding more branch refsKrzesimir Nowak, Dec 4, 2013
  23. Jakub NarębskiDec 4, 2013
  24. Krzesimir NowakDec 5, 2013
  25. Jakub NarębskiDec 5, 2013
  26. Krzesimir NowakDec 10, 2013
  27. Junio C HamanoDec 10, 2013
  28. Jakub NarębskiDec 10, 2013
  29. Junio C HamanoDec 10, 2013
  30. 5/5 gitweb: Denote non-heads, non-remotes branchesKrzesimir Nowak, Dec 4, 2013
  31. Jakub NarębskiDec 4, 2013
  32. Junio C HamanoDec 4, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.