aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2012-05-03 15:35:19 -0700
committerJunio C Hamano <gitster@pobox.com>2012-05-03 15:35:19 -0700
commitc4da6c0b76691c63e3f4aea3f1079b37ac0e6d98 (patch)
tree7b7173e18d6823c743fd58df05144387261347b2
parentc968338042b1f38508ed5b863c3ef1f67a06f737 (diff)
parent6d5b93f29f5362b9b84954d87684705227984f9e (diff)
downloadgit-c4da6c0b76691c63e3f4aea3f1079b37ac0e6d98.tar.gz
git-c4da6c0b76691c63e3f4aea3f1079b37ac0e6d98.tar.xz
Merge branch 'cb/cherry-pick-rev-path-confusion' into maint
The command line parser choked "git cherry-pick $name" when $name can be both revision name and a pathname, even though $name can never be a path in the context of the command. By Clemens Buchacher * cb/cherry-pick-rev-path-confusion: cherry-pick: do not expect file arguments
-rw-r--r--builtin/revert.c5
-rw-r--r--revision.c24
-rw-r--r--revision.h1
3 files changed, 19 insertions, 11 deletions
diff --git a/builtin/revert.c b/builtin/revert.c
index e6840f23d..92f3fa5f5 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -181,12 +181,15 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
if (opts->subcommand != REPLAY_NONE) {
opts->revs = NULL;
} else {
+ struct setup_revision_opt s_r_opt;
opts->revs = xmalloc(sizeof(*opts->revs));
init_revisions(opts->revs, NULL);
opts->revs->no_walk = 1;
if (argc < 2)
usage_with_options(usage_str, options);
- argc = setup_revisions(argc, argv, opts->revs, NULL);
+ memset(&s_r_opt, 0, sizeof(s_r_opt));
+ s_r_opt.assume_dashdash = 1;
+ argc = setup_revisions(argc, argv, opts->revs, &s_r_opt);
}
if (argc > 1)
diff --git a/revision.c b/revision.c
index b3554ed11..9a0d9c7de 100644
--- a/revision.c
+++ b/revision.c
@@ -1715,17 +1715,21 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
submodule = opt->submodule;
/* First, search for "--" */
- seen_dashdash = 0;
- for (i = 1; i < argc; i++) {
- const char *arg = argv[i];
- if (strcmp(arg, "--"))
- continue;
- argv[i] = NULL;
- argc = i;
- if (argv[i + 1])
- append_prune_data(&prune_data, argv + i + 1);
+ if (opt && opt->assume_dashdash) {
seen_dashdash = 1;
- break;
+ } else {
+ seen_dashdash = 0;
+ for (i = 1; i < argc; i++) {
+ const char *arg = argv[i];
+ if (strcmp(arg, "--"))
+ continue;
+ argv[i] = NULL;
+ argc = i;
+ if (argv[i + 1])
+ append_prune_data(&prune_data, argv + i + 1);
+ seen_dashdash = 1;
+ break;
+ }
}
/* Second, deal with arguments and options */
diff --git a/revision.h b/revision.h
index b8e922395..1a0838473 100644
--- a/revision.h
+++ b/revision.h
@@ -183,6 +183,7 @@ struct setup_revision_opt {
const char *def;
void (*tweak)(struct rev_info *, struct setup_revision_opt *);
const char *submodule;
+ int assume_dashdash;
};
extern void init_revisions(struct rev_info *revs, const char *prefix);