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 dirPerhaps 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