On Feb 8, 2014, at 10:19 PM, Dongsheng Song wrote:
> On Sun, Feb 9, 2014 at 12:29 AM, Andrew Keller <and...@kellerfarm.com> wrote:
>> On Feb 8, 2014, at 8:37 AM, Dongsheng Song wrote:
>> 
>>> I have an git repo PROJECT.git, the full path is /srv/repo/git/PROJECT.git,
>>> when I set git_base_url_list in gitweb.conf:
>>> 
>>> @git_base_url_list = qw(https://192.168.30.239/repo/git
>>>                           git@192.168.30.239:repo/git);
>>> 
>>> I got the result:
>>> 
>>> https://192.168.30.239/repo/git/PROJECT.git
>>> git@192.168.30.239:/PROJECT.git
>>> 
>>> This is wrong, it should be (without the leading '/')
>>> git@192.168.30.239:PROJECT.git
>> 
>> There is no way to generate a fetch url of 'git@192.168.30.239:PROJECT.git' 
>> in gitweb.
>> 
>> If one of the base urls was 'git@192.168.30.239:.', then you could get a 
>> fetch URL of 'git@192.168.30.239:./PROJECT.git'
>> 
>> In general, though, I like to stay away from relative paths.  Weird things 
>> can happen, like HTTP works but SSH doesn't, because the home directory for 
>> SSH changed because you used a different user.
> 
> What's about the following translate rules ?
> 
> git@192.168.30.239:  -> git@192.168.30.239:PROJECT.git
> git@192.168.30.239:/ -> git@192.168.30.239:/PROJECT.git
> git@192.168.30.239:/repo  -> git@192.168.30.239:/repo/PROJECT.git
> git@192.168.30.239:/repo/ -> git@192.168.30.239:/repo/PROJECT.git

I think that those translation rules are completely reasonable.

However, that's not what gitweb was originally designed to do.  What you're 
describing is a desire for a new feature, not the existence of a bug.  
Basically, gitweb does not support relative paths when the base url does not 
contain part of the path already.

> I don't know Perl, but I think change the following translate code is
> not a hard work:
> 
>        # use per project git URL list in $projectroot/$project/cloneurl
>        # or make project git URL from git base URL and project name
>        my $url_tag = "URL";
>        my @url_list = git_get_project_url_list($project);
>        @url_list = map { "$_/$project" } @git_base_url_list unless @url_list;
>        foreach my $git_url (@url_list) {
>                next unless $git_url;
>                print format_repo_url($url_tag, $git_url);
>                $url_tag = "";
>        }

You're right - that is where the change should be applied, and the change you 
suggest is pretty simple.

However, I'm not confident that the syntax for a relative path is the same for 
all schemes.  (Others on the list, feel free to object.)  Since gitweb blindly 
concatenates the base URL and the relative project path, I'm worried that 
adding the proper functionality for one scheme will yield incorrect behavior 
for another scheme.

Can you move your repository to a subfolder?  Can use use absolute paths 
instead of relative paths?  Either of those approaches work around this issue.  
I don't mean to coldly tell you that the solution is "don't do that", but on 
the surface, this seems like a nasty problem.

 - Andrew

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