On Wed, Dec 4, 2013 at 2:43 PM, Krzesimir Nowak <krzesimir@xxxxxxxxxxxx> wrote: > 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@xxxxxxxxxxxx> Very nice feature, which allows to distinguish between refs/heads/feature and refs/wip/feature. > --- > 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 > + 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? > + > + # 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html