threads / patch / 18522

patch, 5 partsAdd option for using a foreign VCS

Subject: [PATCH 3/5] Add option for using a foreign VCS

## tl;dr

6 messages between Mar 25, 2009 and Mar 25, 2009. Diffs are folded; open one to read it.

replies: 5people: 2as markdown or json

Daniel Barkalow· Mar 25, 2009, 03:04 UTC · lore

This simply configures the remote to use a transport that doesn't have any methods at all and is therefore unable to do anything yet.

Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
---
 Documentation/config.txt |    4 ++++
 remote.c                 |    2 ++
 remote.h                 |    2 ++
 transport.c              |    3 ++-
 4 files changed, 10 insertions(+), 1 deletions(-)
Show changes to 4 files +10 −1

Documentation/config.txt, remote.c, remote.h, transport.c

diff --git a/Documentation/config.txt b/Documentation/config.txt
index 089569a..14b0e07 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1305,6 +1305,10 @@ remote.<name>.tagopt::
 	Setting this value to \--no-tags disables automatic tag following when
 	fetching from remote <name>
 
+remote.<name>.vcs::
+	Setting this to a value <vcs> will cause git to interact with
+	the remote with the git-vcs-<vcs> helper.
+
 remotes.<group>::
 	The list of remotes which are fetched by "git remote update
 	<group>".  See linkgit:git-remote[1].
diff --git a/remote.c b/remote.c
index 2b037f1..be04658 100644
--- a/remote.c
+++ b/remote.c
@@ -411,6 +411,8 @@ static int handle_config(const char *key, const char *value, void *cb)
 	} else if (!strcmp(subkey, ".proxy")) {
 		return git_config_string((const char **)&remote->http_proxy,
 					 key, value);
+	} else if (!strcmp(subkey, ".vcs")) {
+		return git_config_string(&remote->foreign_vcs, key, value);
 	}
 	return 0;
 }
diff --git a/remote.h b/remote.h
index de3d21b..e77dc1b 100644
--- a/remote.h
+++ b/remote.h
@@ -11,6 +11,8 @@ struct remote {
 	const char *name;
 	int origin;
 
+	const char *foreign_vcs;
+
 	const char **url;
 	int url_nr;
 	int url_alloc;
diff --git a/transport.c b/transport.c
index 26c578e..8a37db5 100644
--- a/transport.c
+++ b/transport.c
@@ -939,7 +939,8 @@ struct transport *transport_get(struct remote *remote, const char *url)
 	ret->remote = remote;
 	ret->url = url;
 
-	if (!prefixcmp(url, "rsync:")) {
+	if (remote && remote->foreign_vcs) {
+	} else if (!prefixcmp(url, "rsync:")) {
 		ret->get_refs_list = get_refs_via_rsync;
 		ret->fetch = fetch_objs_via_rsync;
 		ret->push = rsync_transport_push;
-- 
1.6.2.1.476.g9bf04b
Junio C Hamano· Mar 25, 2009, 06:49 UTC · re: Daniel Barkalow · lore

Re: [PATCH 3/5] Add option for using a foreign VCS

Daniel Barkalow <barkalow@iabervon.org> writes:
Show 23 quoted lines
> This simply configures the remote to use a transport that doesn't have
> any methods at all and is therefore unable to do anything yet.
>
> Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
> ---
>  Documentation/config.txt |    4 ++++
>  remote.c                 |    2 ++
>  remote.h                 |    2 ++
>  transport.c              |    3 ++-
>  4 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/Documentation/config.txt b/Documentation/config.txt
> index 089569a..14b0e07 100644
> --- a/Documentation/config.txt
> +++ b/Documentation/config.txt
> @@ -1305,6 +1305,10 @@ remote.<name>.tagopt::
>  	Setting this value to \--no-tags disables automatic tag following when
>  	fetching from remote <name>
>  
> +remote.<name>.vcs::
> +	Setting this to a value <vcs> will cause git to interact with
> +	the remote with the git-vcs-<vcs> helper.
> +
Nice.
Show 13 quoted lines
> diff --git a/remote.h b/remote.h
> index de3d21b..e77dc1b 100644
> --- a/remote.h
> +++ b/remote.h
> @@ -11,6 +11,8 @@ struct remote {
>  	const char *name;
>  	int origin;
>  
> +	const char *foreign_vcs;
> +
>  	const char **url;
>  	int url_nr;
>  	int url_alloc;

What are these extra blank lines for? Isn't it pretty much part of the URL group that immediately follows it?

Show 11 quoted lines
> diff --git a/transport.c b/transport.c
> index 26c578e..8a37db5 100644
> --- a/transport.c
> +++ b/transport.c
> @@ -939,7 +939,8 @@ struct transport *transport_get(struct remote *remote, const char *url)
>  	ret->remote = remote;
>  	ret->url = url;
>  
> -	if (!prefixcmp(url, "rsync:")) {
> +	if (remote && remote->foreign_vcs) {
> +	} else if (!prefixcmp(url, "rsync:")) {
	if (...) {
        	; /* empty */
	} else ...
Show 5 quoted lines
>  		ret->get_refs_list = get_refs_via_rsync;
>  		ret->fetch = fetch_objs_via_rsync;
>  		ret->push = rsync_transport_push;
> -- 
> 1.6.2.1.476.g9bf04b
Daniel Barkalow· Mar 25, 2009, 16:20 UTC · re: Junio C Hamano · lore

Re: [PATCH 3/5] Add option for using a foreign VCS

On Tue, 24 Mar 2009, Junio C Hamano wrote:
Show 29 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > This simply configures the remote to use a transport that doesn't have
> > any methods at all and is therefore unable to do anything yet.
> >
> > Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
> > ---
> >  Documentation/config.txt |    4 ++++
> >  remote.c                 |    2 ++
> >  remote.h                 |    2 ++
> >  transport.c              |    3 ++-
> >  4 files changed, 10 insertions(+), 1 deletions(-)
> >
> > diff --git a/remote.h b/remote.h
> > index de3d21b..e77dc1b 100644
> > --- a/remote.h
> > +++ b/remote.h
> > @@ -11,6 +11,8 @@ struct remote {
> >  	const char *name;
> >  	int origin;
> >  
> > +	const char *foreign_vcs;
> > +
> >  	const char **url;
> >  	int url_nr;
> >  	int url_alloc;
> 
> What are these extra blank lines for?  Isn't it pretty much part of the
> URL group that immediately follows it?

I'd been thinking of it as being a higher-level switch than the URLs, but it could go together.

Show 15 quoted lines
> > diff --git a/transport.c b/transport.c
> > index 26c578e..8a37db5 100644
> > --- a/transport.c
> > +++ b/transport.c
> > @@ -939,7 +939,8 @@ struct transport *transport_get(struct remote *remote, const char *url)
> >  	ret->remote = remote;
> >  	ret->url = url;
> >  
> > -	if (!prefixcmp(url, "rsync:")) {
> > +	if (remote && remote->foreign_vcs) {
> > +	} else if (!prefixcmp(url, "rsync:")) {
> 
> 	if (...) {
>         	; /* empty */
> 	} else ...

I don't think I've ever tried writing an empty block for git before. It's braces containing a semicolon and comment? (Of course, the reason I wrote this one this way is so that the next patch could put two "+" lines in there and have no "-" lines)

	-Daniel
*This .sig left intentionally blank*
Junio C Hamano· Mar 25, 2009, 18:03 UTC · re: Daniel Barkalow · lore

Re: [PATCH 3/5] Add option for using a foreign VCS

Daniel Barkalow <barkalow@iabervon.org> writes:
Show 12 quoted lines
>> > -	if (!prefixcmp(url, "rsync:")) {
>> > +	if (remote && remote->foreign_vcs) {
>> > +	} else if (!prefixcmp(url, "rsync:")) {
>> 
>> 	if (...) {
>>         	; /* empty */
>> 	} else ...
>
> I don't think I've ever tried writing an empty block for git before. It's 
> braces containing a semicolon and comment? (Of course, the reason I wrote 
> this one this way is so that the next patch could put two "+" lines in 
> there and have no "-" lines)

Wasn't a serious "this has to be the final style" suggestion, but more about "what do you mean by this? are you going to add more code here in the later round?" question.

Daniel Barkalow· Mar 25, 2009, 18:46 UTC · re: Junio C Hamano · lore

Re: [PATCH 3/5] Add option for using a foreign VCS

On Wed, 25 Mar 2009, Junio C Hamano wrote:
Show 18 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> >> > -	if (!prefixcmp(url, "rsync:")) {
> >> > +	if (remote && remote->foreign_vcs) {
> >> > +	} else if (!prefixcmp(url, "rsync:")) {
> >> 
> >> 	if (...) {
> >>         	; /* empty */
> >> 	} else ...
> >
> > I don't think I've ever tried writing an empty block for git before. It's 
> > braces containing a semicolon and comment? (Of course, the reason I wrote 
> > this one this way is so that the next patch could put two "+" lines in 
> > there and have no "-" lines)
> 
> Wasn't a serious "this has to be the final style" suggestion, but more
> about "what do you mean by this?  are you going to add more code here in
> the later round?" question.

Ah, yes, I do intend to add code there subsequently, and this is just a placeholder so that it returns a correctly-constructed struct which doesn't support any operations until those operations are added.

	-Daniel
*This .sig left intentionally blank*
Junio C Hamano· Mar 25, 2009, 18:58 UTC · re: Daniel Barkalow · lore

Re: [PATCH 3/5] Add option for using a foreign VCS

Daniel Barkalow <barkalow@iabervon.org> writes:
Show 24 quoted lines
> On Wed, 25 Mar 2009, Junio C Hamano wrote:
>
>> Daniel Barkalow <barkalow@iabervon.org> writes:
>> 
>> >> > -	if (!prefixcmp(url, "rsync:")) {
>> >> > +	if (remote && remote->foreign_vcs) {
>> >> > +	} else if (!prefixcmp(url, "rsync:")) {
>> >> 
>> >> 	if (...) {
>> >>         	; /* empty */
>> >> 	} else ...
>> >
>> > I don't think I've ever tried writing an empty block for git before. It's 
>> > braces containing a semicolon and comment? (Of course, the reason I wrote 
>> > this one this way is so that the next patch could put two "+" lines in 
>> > there and have no "-" lines)
>> 
>> Wasn't a serious "this has to be the final style" suggestion, but more
>> about "what do you mean by this?  are you going to add more code here in
>> the later round?" question.
>
> Ah, yes, I do intend to add code there subsequently, and this is just a 
> placeholder so that it returns a correctly-constructed struct which 
> doesn't support any operations until those operations are added.
Ah, OK, thanks.
In that case, I would say:
	if (...) {
        	; /* empty for now */
	} else ... {
or even more explicit:
	if (...) {
		/*
                 * NEEDSWORK: later when we activate nitfol,
                 * add code to let gostak distim the doshes here.
                 */
        	;
	} else ... {
to allow people to grep for NEEDSWORK would be more appropriate.

← back to recent threads