From 18184f79dbf70e157399ba2288f7045582fd61c6 Mon Sep 17 00:00:00 2001
From: "Shawn O. Pearce" <spearce@spearce.org>
Date: Tue, 16 Oct 2007 00:25:34 -0400
Subject: [PATCH] Fix 'push --all branch...' error handling

The builtin-fetch topic changed push's handling of --all to setting
the new TRANSPORT_PUSH_ALL flag before starting the push subroutine
for the given transport.  Unfortunately not all references within
builtin-push were changed to test this flag therefore allowing push
to incorrectly accept refspecs and --all.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 builtin-push.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/builtin-push.c b/builtin-push.c
index a552f0dac65..4b39ef3852a 100644
--- a/builtin-push.c
+++ b/builtin-push.c
@@ -10,7 +10,7 @@
 
 static const char push_usage[] = "git-push [--all] [--dry-run] [--tags] [--receive-pack=<git-receive-pack>] [--repo=all] [-f | --force] [-v] [<repository> <refspec>...]";
 
-static int all, thin, verbose;
+static int thin, verbose;
 static const char *receivepack;
 
 static const char **refspec;
@@ -52,7 +52,9 @@ static int do_push(const char *repo, int flags)
 	if (!remote)
 		die("bad repository '%s'", repo);
 
-	if (!refspec && !all && remote->push_refspec_nr) {
+	if (!refspec
+		&& !(flags & TRANSPORT_PUSH_ALL)
+		&& remote->push_refspec_nr) {
 		refspec = remote->push_refspec;
 		refspec_nr = remote->push_refspec_nr;
 	}
@@ -138,7 +140,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
 		usage(push_usage);
 	}
 	set_refspecs(argv + i, argc - i);
-	if (all && refspec)
+	if ((flags & TRANSPORT_PUSH_ALL) && refspec)
 		usage(push_usage);
 
 	return do_push(repo, flags);