From: Sverre Rabbelier <srabbelier@gmail.com>
To: Git List <git@vger.kernel.org>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Daniel Barkalow <barkalow@iabervon.org>,
Johan Herland <johan@herland.net>
Cc: Daniel Barkalow <barkalow@iabervon.org>,
Sverre Rabbelier <srabbelier@gmail.com>
Subject: [PATCH v2 02/13] Allow programs to not depend on remotes having urls
Date: Wed, 4 Nov 2009 20:48:07 +0100 [thread overview]
Message-ID: <1257364098-1685-3-git-send-email-srabbelier@gmail.com> (raw)
In-Reply-To: <1257364098-1685-1-git-send-email-srabbelier@gmail.com>
From: Daniel Barkalow <barkalow@iabervon.org>
For fetch and ls-remote, which use the first url of a remote, have
transport_get() determine this by passing a remote and passing NULL
for the url. For push, which uses every url of a remote, use each url
in turn if there are any, and use NULL if there are none.
This will allow the transport code to do something different if the
location is not specified with a url.
Also, have the message for a fetch say "foreign" if there is no url.
Signed-off-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
---
Unchanged.
builtin-fetch.c | 7 +++-
builtin-ls-remote.c | 4 +-
builtin-push.c | 68 +++++++++++++++++++++++++++++++-------------------
transport.c | 3 ++
4 files changed, 52 insertions(+), 30 deletions(-)
diff --git a/builtin-fetch.c b/builtin-fetch.c
index a35a6f8..013a6ba 100644
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
@@ -309,7 +309,10 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
if (!fp)
return error("cannot open %s: %s\n", filename, strerror(errno));
- url = transport_anonymize_url(raw_url);
+ if (raw_url)
+ url = transport_anonymize_url(raw_url);
+ else
+ url = xstrdup("foreign");
for (rm = ref_map; rm; rm = rm->next) {
struct ref *ref = NULL;
@@ -704,7 +707,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
if (!remote)
die("Where do you want to fetch from today?");
- transport = transport_get(remote, remote->url[0]);
+ transport = transport_get(remote, NULL);
if (verbosity >= 2)
transport->verbose = 1;
if (verbosity < 0)
diff --git a/builtin-ls-remote.c b/builtin-ls-remote.c
index 78a88f7..4c6fc58 100644
--- a/builtin-ls-remote.c
+++ b/builtin-ls-remote.c
@@ -87,9 +87,9 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
}
}
remote = nongit ? NULL : remote_get(dest);
- if (remote && !remote->url_nr)
+ if (!nongit && !remote)
die("remote %s has no configured URL", dest);
- transport = transport_get(remote, remote ? remote->url[0] : dest);
+ transport = transport_get(remote, remote ? NULL : dest);
if (uploadpack != NULL)
transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);
diff --git a/builtin-push.c b/builtin-push.c
index 8631c06..88dd9f5 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -88,6 +88,36 @@ static void setup_default_push_refspecs(void)
}
}
+static int push_with_options(struct transport *transport, int flags)
+{
+ int err;
+ int nonfastforward;
+ if (receivepack)
+ transport_set_option(transport,
+ TRANS_OPT_RECEIVEPACK, receivepack);
+ if (thin)
+ transport_set_option(transport, TRANS_OPT_THIN, "yes");
+
+ if (flags & TRANSPORT_PUSH_VERBOSE)
+ fprintf(stderr, "Pushing to %s\n", transport->url);
+ err = transport_push(transport, refspec_nr, refspec, flags,
+ &nonfastforward);
+ err |= transport_disconnect(transport);
+
+ if (!err)
+ return 0;
+
+ error("failed to push some refs to '%s'", transport->url);
+
+ if (nonfastforward && advice_push_nonfastforward) {
+ printf("To prevent you from losing history, non-fast-forward updates were rejected\n"
+ "Merge the remote changes before pushing again. See the 'non-fast forward'\n"
+ "section of 'git push --help' for details.\n");
+ }
+
+ return 1;
+}
+
static int do_push(const char *repo, int flags)
{
int i, errs;
@@ -136,33 +166,19 @@ static int do_push(const char *repo, int flags)
url = remote->url;
url_nr = remote->url_nr;
}
- for (i = 0; i < url_nr; i++) {
- struct transport *transport =
- transport_get(remote, url[i]);
- int err;
- int nonfastforward;
- if (receivepack)
- transport_set_option(transport,
- TRANS_OPT_RECEIVEPACK, receivepack);
- if (thin)
- transport_set_option(transport, TRANS_OPT_THIN, "yes");
-
- if (flags & TRANSPORT_PUSH_VERBOSE)
- fprintf(stderr, "Pushing to %s\n", url[i]);
- err = transport_push(transport, refspec_nr, refspec, flags,
- &nonfastforward);
- err |= transport_disconnect(transport);
-
- if (!err)
- continue;
-
- error("failed to push some refs to '%s'", url[i]);
- if (nonfastforward && advice_push_nonfastforward) {
- printf("To prevent you from losing history, non-fast-forward updates were rejected\n"
- "Merge the remote changes before pushing again. See the 'non-fast forward'\n"
- "section of 'git push --help' for details.\n");
+ if (url_nr) {
+ for (i = 0; i < url_nr; i++) {
+ struct transport *transport =
+ transport_get(remote, url[i]);
+ if (push_with_options(transport, flags))
+ errs++;
}
- errs++;
+ } else {
+ struct transport *transport =
+ transport_get(remote, NULL);
+
+ if (push_with_options(transport, flags))
+ errs++;
}
return !!errs;
}
diff --git a/transport.c b/transport.c
index 644a30a..9daa686 100644
--- a/transport.c
+++ b/transport.c
@@ -813,6 +813,9 @@ struct transport *transport_get(struct remote *remote, const char *url)
struct transport *ret = xcalloc(1, sizeof(*ret));
ret->remote = remote;
+
+ if (!url && remote && remote->url)
+ url = remote->url[0];
ret->url = url;
if (!prefixcmp(url, "rsync:")) {
--
1.6.5.2.295.g0d105
next prev parent reply other threads:[~2009-11-04 19:50 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-04 19:48 [PATCH v2 00/13] Reroll of the remote-vcs-helper series Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 01/13] Fix memory leak in helper method for disconnect Sverre Rabbelier
2009-11-04 19:48 ` Sverre Rabbelier [this message]
2009-11-04 19:48 ` [PATCH v2 03/13] Use a function to determine whether a remote is valid Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 04/13] Allow fetch to modify refs Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 05/13] Add a config option for remotes to specify a foreign vcs Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 06/13] Allow specifying the remote helper in the url Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 07/13] Add support for "import" helper command Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 08/13] Write local refs written by the "import" helper command only once Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 09/13] Honour the refspec when updating refs after import Sverre Rabbelier
2009-11-04 21:20 ` Daniel Barkalow
2009-11-04 21:21 ` Sverre Rabbelier
2009-11-04 21:30 ` Daniel Barkalow
2009-11-05 1:45 ` Sverre Rabbelier
2009-11-05 5:34 ` Daniel Barkalow
2009-11-05 6:53 ` Daniel Barkalow
2009-11-05 23:51 ` Sverre Rabbelier
2009-11-06 0:19 ` Daniel Barkalow
2009-11-06 0:28 ` Sverre Rabbelier
2009-11-06 0:37 ` Daniel Barkalow
2009-11-06 6:05 ` Junio C Hamano
2009-11-04 19:48 ` [PATCH v2 10/13] Allow helpers to report in "list" command that the ref is unchanged Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 11/13] Allow helpers to request the path to the .git directory Sverre Rabbelier
2009-11-04 21:35 ` Daniel Barkalow
2009-11-04 22:06 ` Sverre Rabbelier
2009-11-04 22:27 ` Daniel Barkalow
2009-11-04 22:42 ` Sverre Rabbelier
2009-11-04 23:17 ` Daniel Barkalow
2009-11-04 23:18 ` Sverre Rabbelier
2009-11-04 23:25 ` Daniel Barkalow
2009-11-05 0:04 ` Junio C Hamano
2009-11-05 0:15 ` Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 12/13] Basic build infrastructure for Python scripts Sverre Rabbelier
2009-11-04 19:48 ` [PATCH v2 13/13] Add Python support library for remote helpers Sverre Rabbelier
2009-11-05 7:55 ` Johan Herland
2009-11-06 0:14 ` Sverre Rabbelier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1257364098-1685-3-git-send-email-srabbelier@gmail.com \
--to=srabbelier@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=barkalow@iabervon.org \
--cc=git@vger.kernel.org \
--cc=johan@herland.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).