git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Using different protocols for "pull" and "push".
@ 2009-06-04 23:16 Nikos Chantziaras
  2009-06-05  0:52 ` Junio C Hamano
  2009-06-05 15:03 ` Using different protocols for "pull" and "push" Mike Gaffney
  0 siblings, 2 replies; 8+ messages in thread
From: Nikos Chantziaras @ 2009-06-04 23:16 UTC (permalink / raw)
  To: git

Hi.

I wonder if it's possible to setup Git (probably in .git/config) to use 
SSH only for "git push" and use the git protocol for "git pull".  My 
current configuration is:

[remote "origin"]
         url = ssh://user@project.someserver.net/gitroot/project
         fetch = +refs/heads/*:refs/remotes/origin/*

Issuing a "git pull" command results in pulling using SSH (along with 
asking for a password).  Is there a way to alter the configuration so 
that a "pull" will use git:// instead of ssh:// ?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Using different protocols for "pull" and "push".
  2009-06-04 23:16 Using different protocols for "pull" and "push" Nikos Chantziaras
@ 2009-06-05  0:52 ` Junio C Hamano
  2009-06-06 14:43   ` [WIP/RFC] Allow push and fetch urls to be different Michael J Gruber
  2009-06-05 15:03 ` Using different protocols for "pull" and "push" Mike Gaffney
  1 sibling, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2009-06-05  0:52 UTC (permalink / raw)
  To: Nikos Chantziaras; +Cc: git

Nikos Chantziaras <realnc@arcor.de> writes:

> I wonder if it's possible to setup Git (probably in .git/config) to
> use SSH only for "git push" and use the git protocol for "git pull".

The configuration format does not allow it, unfortunately.  We should be
able to introduce remote.$name.pushurl that is used only for push if
present (and fall back to remote.$name.url if there isn't) reasonably
easily, though.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: Using different protocols for "pull" and "push".
  2009-06-04 23:16 Using different protocols for "pull" and "push" Nikos Chantziaras
  2009-06-05  0:52 ` Junio C Hamano
@ 2009-06-05 15:03 ` Mike Gaffney
  1 sibling, 0 replies; 8+ messages in thread
From: Mike Gaffney @ 2009-06-05 15:03 UTC (permalink / raw)
  Cc: git

I typically set up a "push" remote when I need to do things like this. 
I've got a few projects where I get confused of which one is origin so I 
protect myself from pushing accidentally (I have to think for a second 
when pushing).

-Mike

Nikos Chantziaras wrote:
> Hi.
>
> I wonder if it's possible to setup Git (probably in .git/config) to 
> use SSH only for "git push" and use the git protocol for "git pull".  
> My current configuration is:
>
> [remote "origin"]
>         url = ssh://user@project.someserver.net/gitroot/project
>         fetch = +refs/heads/*:refs/remotes/origin/*
>
> Issuing a "git pull" command results in pulling using SSH (along with 
> asking for a password).  Is there a way to alter the configuration so 
> that a "pull" will use git:// instead of ssh:// ?
>
> -- 
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [WIP/RFC] Allow push and fetch urls to be different
  2009-06-05  0:52 ` Junio C Hamano
@ 2009-06-06 14:43   ` Michael J Gruber
  2009-06-06 14:50     ` Tay Ray Chuan
                       ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Michael J Gruber @ 2009-06-06 14:43 UTC (permalink / raw)
  To: git; +Cc: Nikos Chantziaras, Junio C Hamano

This introduces a config setting remote.$remotename.pushurl which is
used for pushes only. If absent remote.$remotename.url is used for
pushes and fetches as before.
This is useful, for example, in order to to do passwordless fetches
(remote update) over git: but pushes over ssh.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
This is a working prototype, but I'd like to rfc about the approach before
coding further. Do I need to do anything in http-push.c? I don't think so.

Things that would go in a full series:
* documentation (man pages, maybe manual)
* tests
* teach builtin-remote about pushurl

 builtin-push.c |   17 +++++++++++++----
 remote.c       |   14 ++++++++++++++
 remote.h       |    4 ++++
 3 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/builtin-push.c b/builtin-push.c
index c869974..7be1239 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -117,6 +117,8 @@ static int do_push(const char *repo, int flags)
 {
 	int i, errs;
 	struct remote *remote = remote_get(repo);
+	const char **url;
+	int url_nr;
 
 	if (!remote) {
 		if (repo)
@@ -152,9 +154,16 @@ static int do_push(const char *repo, int flags)
 			setup_default_push_refspecs();
 	}
 	errs = 0;
-	for (i = 0; i < remote->url_nr; i++) {
+	if (remote->pushurl_nr) {
+		url = remote->pushurl;
+		url_nr = remote->pushurl_nr;
+	} else {
+		url = remote->url;
+		url_nr = remote->url_nr;
+	}
+	for (i = 0; i < url_nr; i++) {
 		struct transport *transport =
-			transport_get(remote, remote->url[i]);
+			transport_get(remote, url[i]);
 		int err;
 		if (receivepack)
 			transport_set_option(transport,
@@ -163,14 +172,14 @@ static int do_push(const char *repo, int flags)
 			transport_set_option(transport, TRANS_OPT_THIN, "yes");
 
 		if (flags & TRANSPORT_PUSH_VERBOSE)
-			fprintf(stderr, "Pushing to %s\n", remote->url[i]);
+			fprintf(stderr, "Pushing to %s\n", url[i]);
 		err = transport_push(transport, refspec_nr, refspec, flags);
 		err |= transport_disconnect(transport);
 
 		if (!err)
 			continue;
 
-		error("failed to push some refs to '%s'", remote->url[i]);
+		error("failed to push some refs to '%s'", url[i]);
 		errs++;
 	}
 	return !!errs;
diff --git a/remote.c b/remote.c
index 08a5964..9a0397e 100644
--- a/remote.c
+++ b/remote.c
@@ -106,6 +106,12 @@ static void add_url_alias(struct remote *remote, const char *url)
 	add_url(remote, alias_url(url));
 }
 
+static void add_pushurl(struct remote *remote, const char *pushurl)
+{
+	ALLOC_GROW(remote->pushurl, remote->pushurl_nr + 1, remote->pushurl_alloc);
+	remote->pushurl[remote->pushurl_nr++] = pushurl;
+}
+
 static struct remote *make_remote(const char *name, int len)
 {
 	struct remote *ret;
@@ -379,6 +385,11 @@ static int handle_config(const char *key, const char *value, void *cb)
 		if (git_config_string(&v, key, value))
 			return -1;
 		add_url(remote, v);
+	} else if (!strcmp(subkey, ".pushurl")) {
+		const char *v;
+		if (git_config_string(&v, key, value))
+			return -1;
+		add_pushurl(remote, v);
 	} else if (!strcmp(subkey, ".push")) {
 		const char *v;
 		if (git_config_string(&v, key, value))
@@ -424,6 +435,9 @@ static void alias_all_urls(void)
 		for (j = 0; j < remotes[i]->url_nr; j++) {
 			remotes[i]->url[j] = alias_url(remotes[i]->url[j]);
 		}
+		for (j = 0; j < remotes[i]->pushurl_nr; j++) {
+			remotes[i]->pushurl[j] = alias_url(remotes[i]->pushurl[j]);
+		}
 	}
 }
 
diff --git a/remote.h b/remote.h
index 257a555..5db8420 100644
--- a/remote.h
+++ b/remote.h
@@ -15,6 +15,10 @@ struct remote {
 	int url_nr;
 	int url_alloc;
 
+	const char **pushurl;
+	int pushurl_nr;
+	int pushurl_alloc;
+
 	const char **push_refspec;
 	struct refspec *push;
 	int push_refspec_nr;
-- 
1.6.3.2.277.gd10543

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [WIP/RFC] Allow push and fetch urls to be different
  2009-06-06 14:43   ` [WIP/RFC] Allow push and fetch urls to be different Michael J Gruber
@ 2009-06-06 14:50     ` Tay Ray Chuan
  2009-06-06 17:57     ` Linus Torvalds
  2009-06-07  4:19     ` Junio C Hamano
  2 siblings, 0 replies; 8+ messages in thread
From: Tay Ray Chuan @ 2009-06-06 14:50 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git, Nikos Chantziaras, Junio C Hamano

Hi,

On Sat, Jun 6, 2009 at 10:43 PM, Michael J
Gruber<git@drmicha.warpmail.net> wrote:
> This is a working prototype, but I'd like to rfc about the approach before
> coding further. Do I need to do anything in http-push.c? I don't think so.

As long as you're "controlling" the url before it gets used (like
you're doing now in builtin-push.c), you don't have to bother about
http-push.c.

-- 
Cheers,
Ray Chuan

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [WIP/RFC] Allow push and fetch urls to be different
  2009-06-06 14:43   ` [WIP/RFC] Allow push and fetch urls to be different Michael J Gruber
  2009-06-06 14:50     ` Tay Ray Chuan
@ 2009-06-06 17:57     ` Linus Torvalds
  2009-06-07  4:19     ` Junio C Hamano
  2 siblings, 0 replies; 8+ messages in thread
From: Linus Torvalds @ 2009-06-06 17:57 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git, Nikos Chantziaras, Junio C Hamano



On Sat, 6 Jun 2009, Michael J Gruber wrote:
>
> This introduces a config setting remote.$remotename.pushurl which is
> used for pushes only. If absent remote.$remotename.url is used for
> pushes and fetches as before.

Ack, looks sane to me. 

			Linus

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [WIP/RFC] Allow push and fetch urls to be different
  2009-06-06 14:43   ` [WIP/RFC] Allow push and fetch urls to be different Michael J Gruber
  2009-06-06 14:50     ` Tay Ray Chuan
  2009-06-06 17:57     ` Linus Torvalds
@ 2009-06-07  4:19     ` Junio C Hamano
  2009-06-07  9:00       ` Michael J Gruber
  2 siblings, 1 reply; 8+ messages in thread
From: Junio C Hamano @ 2009-06-07  4:19 UTC (permalink / raw)
  To: Michael J Gruber; +Cc: git, Nikos Chantziaras, Junio C Hamano

Michael J Gruber <git@drmicha.warpmail.net> writes:

> This introduces a config setting remote.$remotename.pushurl which is
> used for pushes only. If absent remote.$remotename.url is used for
> pushes and fetches as before.
> This is useful, for example, in order to to do passwordless fetches
> (remote update) over git: but pushes over ssh.
>
> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> ---
> This is a working prototype, but I'd like to rfc about the approach before
> coding further.

As I am guilty for suggesting this, obviously I do not have a problem with
what the patch wants to achieve.

And the change looks simple, straightforward and correct.

> Things that would go in a full series:
> * documentation (man pages, maybe manual)
> * tests

Surely.

> * teach builtin-remote about pushurl

Hmm,...  my impression was that "git remote" does not have much support
for the push side.  What kind of things are you going to teach?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [WIP/RFC] Allow push and fetch urls to be different
  2009-06-07  4:19     ` Junio C Hamano
@ 2009-06-07  9:00       ` Michael J Gruber
  0 siblings, 0 replies; 8+ messages in thread
From: Michael J Gruber @ 2009-06-07  9:00 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Nikos Chantziaras

Junio C Hamano venit, vidit, dixit 07.06.2009 06:19:
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> This introduces a config setting remote.$remotename.pushurl which is
>> used for pushes only. If absent remote.$remotename.url is used for
>> pushes and fetches as before.
>> This is useful, for example, in order to to do passwordless fetches
>> (remote update) over git: but pushes over ssh.
>>
>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
>> ---
>> This is a working prototype, but I'd like to rfc about the approach before
>> coding further.
> 
> As I am guilty for suggesting this, obviously I do not have a problem with
> what the patch wants to achieve.
> 
> And the change looks simple, straightforward and correct.
> 
>> Things that would go in a full series:
>> * documentation (man pages, maybe manual)
>> * tests
> 
> Surely.
> 
>> * teach builtin-remote about pushurl
> 
> Hmm,...  my impression was that "git remote" does not have much support
> for the push side.  What kind of things are you going to teach?

First I was thinking about rm and mv, but that's being taken care of
automatically by removing/renaming a config section. This leaves "remote
show $remote" which should list the pushurls along with the urls.
"remote -v" should probably list urls but not pushurls. I don't plan on
adding pushurl support to "remote add", I think using git config is OK
for this setting.

Michael

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-06-07  9:00 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-04 23:16 Using different protocols for "pull" and "push" Nikos Chantziaras
2009-06-05  0:52 ` Junio C Hamano
2009-06-06 14:43   ` [WIP/RFC] Allow push and fetch urls to be different Michael J Gruber
2009-06-06 14:50     ` Tay Ray Chuan
2009-06-06 17:57     ` Linus Torvalds
2009-06-07  4:19     ` Junio C Hamano
2009-06-07  9:00       ` Michael J Gruber
2009-06-05 15:03 ` Using different protocols for "pull" and "push" Mike Gaffney

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).