Subject: Re: RFD: git-bzr: anyone interested?

From: Ilari Liusvaara <[email-masked]>
Date: Fri, 19 Feb 2010 15:55:49 +0200

On Fri, Feb 19, 2010 at 02:05:58AM -0500, Gabriel Filion wrote:
> 
> The Documentation/git-remote-helpers.txt file wasn't really of much help
> .. It really only barely scratches the subject, but it does not mention
> how remote-helpers really work internally (e.g. how do they get called:
> based on protocol used in URLs?)
> 
> I'm still trying to dig up information about how to actually build, test
> and use a remote helper. I'll probably be reading code for examples.

The remote helper is invoked with one or two parameters. 

There are five cases to consider (as rule, first argument is name of
remote [pseudo-remote in case URL was used] and the second argument is
URL to use, if any):

1) Remote <remote> without URL line but with VCS line value <helper> was used.

The called program: git-remote-<helper>  [search $PATH for it].
Number of arguements: 1
1st argument: <remote>

2) Remote <remote> with URL using <helper>::<string> syntax was used.

The called program: git-remote-<helper>  [search $PATH for it].
Number of arguments: 2
1st argument: <remote>
2st argument: <string>

3) Remote <remote> with URL using <helper>://<rest-of-URL> syntax was used.

The called program: git-remote-<helper>  [serch $PATH for it].
Number of arguments: 2
1st argument: <remote>
2st argument: <helper>://<rest-of-URL>

4) URL using <helper>::<string> syntax was used directly on command line.

The called program: git-remote-<helper>  [serch $PATH for it].
Number of arguments: 2
1st argument: <helper>::<string>
2st argument: <string>

5) URL using <helper>://<rest-of-URL> syntax was used directly on command
line.

The called program: git-remote-<helper>  [serch $PATH for it].
Number of arguments: 2
1st argument: <helper>://<rest-of-URL>
2st argument: <helper>://<rest-of-URL>

Notes:

- For 2) and 4), the helper name can only contain alphanumeric characters
  0-9, A-Z and a-z.
- For 3) and 5), the helper name can't be any of builtin protocols:
  'rsync', 'file', 'git', 'ssh', 'git+ssh' nor 'ssh+git'.
- <helper>::<string> is the strongest, followed by VCS line,
  <helper>:://<rest-of-URL> is weakest.

-Ilari