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>
This commit is contained in:
Shawn O. Pearce 2007-10-16 00:25:34 -04:00
Родитель 2e13e5d892
Коммит 18184f79db
1 изменённых файлов: 5 добавлений и 3 удалений

Просмотреть файл

@ -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 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 *receivepack;
static const char **refspec; static const char **refspec;
@ -52,7 +52,9 @@ static int do_push(const char *repo, int flags)
if (!remote) if (!remote)
die("bad repository '%s'", repo); 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 = remote->push_refspec;
refspec_nr = remote->push_refspec_nr; refspec_nr = remote->push_refspec_nr;
} }
@ -138,7 +140,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
usage(push_usage); usage(push_usage);
} }
set_refspecs(argv + i, argc - i); set_refspecs(argv + i, argc - i);
if (all && refspec) if ((flags & TRANSPORT_PUSH_ALL) && refspec)
usage(push_usage); usage(push_usage);
return do_push(repo, flags); return do_push(repo, flags);