aboutsummaryrefslogtreecommitdiff
path: root/builtin-push.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-05-05 19:15:39 -0700
committerJunio C Hamano <gitster@pobox.com>2008-05-05 19:15:39 -0700
commitdc484f2213a34ced5abe5eb968650035204b6035 (patch)
tree1e1d0d7563cc91bd52ffcb895b9f21a0ed2607c8 /builtin-push.c
parent2b3e60c245684fd68bab36c07fee9888ff24f4b4 (diff)
parent84bb2dfd9f4873c9ca19537efe62219b09ec03bf (diff)
downloadgit-dc484f2213a34ced5abe5eb968650035204b6035.tar.gz
git-dc484f2213a34ced5abe5eb968650035204b6035.tar.xz
Merge branch 'pb/remote-mirror-config'
* pb/remote-mirror-config: Add a remote.*.mirror configuration option
Diffstat (limited to 'builtin-push.c')
-rw-r--r--builtin-push.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/builtin-push.c b/builtin-push.c
index b68c6813b..b35aad68e 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -56,6 +56,17 @@ static int do_push(const char *repo, int flags)
if (!remote)
die("bad repository '%s'", repo);
+ if (remote->mirror)
+ flags |= (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE);
+
+ if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) && refspec)
+ return -1;
+
+ if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) ==
+ (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) {
+ return error("--all and --mirror are incompatible");
+ }
+
if (!refspec
&& !(flags & TRANSPORT_PUSH_ALL)
&& remote->push_refspec_nr) {
@@ -95,6 +106,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
int dry_run = 0;
int force = 0;
int tags = 0;
+ int rc;
const char *repo = NULL; /* default repository */
struct option options[] = {
@@ -130,14 +142,10 @@ int cmd_push(int argc, const char **argv, const char *prefix)
repo = argv[0];
set_refspecs(argv + 1, argc - 1);
}
- if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) && refspec)
- usage_with_options(push_usage, options);
- if ((flags & (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) ==
- (TRANSPORT_PUSH_ALL|TRANSPORT_PUSH_MIRROR)) {
- error("--all and --mirror are incompatible");
+ rc = do_push(repo, flags);
+ if (rc == -1)
usage_with_options(push_usage, options);
- }
-
- return do_push(repo, flags);
+ else
+ return rc;
}