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 <krzesi...@endocode.com>
Reviewed-by: Junio C Hamano <gits...@pobox.com>
Reviewed-by: Jakub Narębski <jna...@gmail.com>
Reviewed-by: Eric Sunshine <sunsh...@sunshineco.com>
---
 gitweb/gitweb.perl | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 6326075..eb8d962 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -3723,8 +3723,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
+               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;
@@ -7241,7 +7247,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;
+                       }
+
+                       # 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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to