From: "Øystein Walle" <oystwa@gmail.com>
To: git@vger.kernel.org
Cc: "Øystein Walle" <oystwa@gmail.com>
Subject: [PATCH v2] fetch: add configuration for making --all default
Date: Fri, 17 Jul 2015 18:14:52 +0200 [thread overview]
Message-ID: <1437149692-10154-1-git-send-email-oystwa@gmail.com> (raw)
In-Reply-To: <1674906250.515624.1437145366822.JavaMail.zimbra@ensimag.grenoble-inp.fr>
Fetching from all remotes by default is useful if you're working on a
repo with few and/or fast remotes. It also lets you fetch from origin
even if the current branch's upstream is elsewhere without specifying it
explicitly.
Signed-off-by: Øystein Walle <oystwa@gmail.com>
---
Thanks for the quick feedback, Remi. There's a fixed version.
Documentation/config.txt | 5 +++++
Documentation/fetch-options.txt | 4 +++-
Documentation/git-fetch.txt | 3 ++-
builtin/fetch.c | 21 ++++++++++++++++-----
t/t5514-fetch-multiple.sh | 23 +++++++++++++++++++++++
5 files changed, 49 insertions(+), 7 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 3e37b93..997a8d9 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1170,6 +1170,11 @@ fetch.prune::
If true, fetch will automatically behave as if the `--prune`
option was given on the command line. See also `remote.<name>.prune`.
+fetch.all::
+ If true, fetch will automatically behave as if the `--all`
+ option was given on the command line unless a remote was given. The
+ default is false.
+
format.attach::
Enable multipart/mixed attachments as the default for
'format-patch'. The value can also be a double quoted string
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 45583d8..aa95a30 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -1,5 +1,7 @@
--all::
- Fetch all remotes.
+ Fetch all remotes. This can be configured to be the default behaviour
+ when no remotes are given explicitly. See the `fetch.all` configuration
+ variable in linkgit:git-config[1].
-a::
--append::
diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt
index e62d9a0..584f3fb 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.txt
@@ -36,7 +36,8 @@ there is a remotes.<group> entry in the configuration file.
(See linkgit:git-config[1]).
When no remote is specified, by default the `origin` remote will be used,
-unless there's an upstream branch configured for the current branch.
+unless there's an upstream branch configured for the current branch, or the
+`fetch.all` configuration variable is set to true.
The names of refs that are fetched, together with the object names
they point at, are written to `.git/FETCH_HEAD`. This information
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 8d5b2db..715ea82 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -30,10 +30,12 @@ enum {
};
static int fetch_prune_config = -1; /* unspecified */
+static int fetch_all_config = -1; /* unspecified */
static int prune = -1; /* unspecified */
+static int all = -1; /* unspecified */
#define PRUNE_BY_DEFAULT 0 /* do we prune by default? */
-static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity;
+static int append, dry_run, force, keep, multiple, update_head_ok, verbosity;
static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
static int tags = TAGS_DEFAULT, unshallow, update_shallow;
static const char *depth;
@@ -67,6 +69,10 @@ static int git_fetch_config(const char *k, const char *v, void *cb)
fetch_prune_config = git_config_bool(k, v);
return 0;
}
+ if (!strcmp(k, "fetch.all")) {
+ fetch_all_config = git_config_bool(k, v);
+ return 0;
+ }
return git_default_config(k, v, cb);
}
@@ -1168,7 +1174,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
git_config(submodule_config, NULL);
}
- if (all) {
+ if (all == 1) {
if (argc == 1)
die(_("fetch --all does not take a repository argument"));
else if (argc > 1)
@@ -1176,9 +1182,14 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
(void) for_each_remote(get_one_remote_for_fetch, &list);
result = fetch_multiple(&list);
} else if (argc == 0) {
- /* No arguments -- use default remote */
- remote = remote_get(NULL);
- result = fetch_one(remote, argc, argv);
+ if (fetch_all_config && all != 0) {
+ (void) for_each_remote(get_one_remote_for_fetch, &list);
+ result = fetch_multiple(&list);
+ } else {
+ /* No arguments and no --all -- use default remote */
+ remote = remote_get(NULL);
+ result = fetch_one(remote, argc, argv);
+ }
} else if (multiple) {
/* All arguments are assumed to be remotes or groups */
for (i = 0; i < argc; i++)
diff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh
index 4b4b667..e0fb744 100755
--- a/t/t5514-fetch-multiple.sh
+++ b/t/t5514-fetch-multiple.sh
@@ -55,6 +55,18 @@ test_expect_success 'git fetch --all' '
test_cmp expect output)
'
+test_expect_success 'git fetch (fetch.all = true)' '
+ (git clone one test9 &&
+ cd test9 &&
+ git config fetch.all true &&
+ git remote add one ../one &&
+ git remote add two ../two &&
+ git remote add three ../three &&
+ git fetch &&
+ git branch -r >output &&
+ test_cmp ../test/expect output)
+'
+
test_expect_success 'git fetch --all should continue if a remote has errors' '
(git clone one test2 &&
cd test2 &&
@@ -91,6 +103,17 @@ test_expect_success 'git fetch --multiple (but only one remote)' '
test_cmp ../expect output)
'
+test_expect_success 'git fetch one (fetch.all = true)' '
+ (cd test3 &&
+ git config fetch.all true &&
+ git fetch three &&
+ git branch -r >output &&
+ test_cmp ../expect output &&
+ git fetch --no-all &&
+ git branch -r >output &&
+ test_cmp ../expect output)
+'
+
cat > expect << EOF
one/master
one/side
--
2.2.0
next prev parent reply other threads:[~2015-07-17 16:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-17 13:31 [PATCH] fetch: add configuration for making --all default Øystein Walle
2015-07-17 15:02 ` Remi Galan Alfonso
2015-07-17 16:14 ` Øystein Walle [this message]
2015-07-17 16:08 ` Junio C Hamano
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=1437149692-10154-1-git-send-email-oystwa@gmail.com \
--to=oystwa@gmail.com \
--cc=git@vger.kernel.org \
/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).