summaryrefslogtreecommitdiff
path: root/builtin-checkout.c
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2008-08-21 17:23:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2008-08-23 00:18:26 (GMT)
commit9188ed8962ed47c0f41c24eb1317aa07037da545 (patch)
treeab528a64f51ccc6ac1ca920a39b82725e6d7c317 /builtin-checkout.c
parenta19a424010970a076a51afb4b378c9edcd908ff9 (diff)
downloadgit-9188ed8962ed47c0f41c24eb1317aa07037da545.zip
git-9188ed8962ed47c0f41c24eb1317aa07037da545.tar.gz
git-9188ed8962ed47c0f41c24eb1317aa07037da545.tar.bz2
Extend "checkout --track" DWIM to support more cases
The code handles additionally "refs/remotes/<something>/name", "remotes/<something>/name", and "refs/<namespace>/name". Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-checkout.c')
-rw-r--r--builtin-checkout.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/builtin-checkout.c b/builtin-checkout.c
index e95eab9..b380ad6 100644
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
@@ -157,7 +157,7 @@ struct checkout_opts {
int force;
int writeout_error;
- char *new_branch;
+ const char *new_branch;
int new_branch_log;
enum branch_track track;
};
@@ -437,27 +437,27 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL);
- opts.track = -1;
+ opts.track = BRANCH_TRACK_UNSPECIFIED;
argc = parse_options(argc, argv, options, checkout_usage,
PARSE_OPT_KEEP_DASHDASH);
/* --track without -b should DWIM */
- if (opts.track && opts.track != -1 && !opts.new_branch) {
- char *slash;
- if (!argc || !strcmp(argv[0], "--"))
+ if (0 < opts.track && !opts.new_branch) {
+ const char *argv0 = argv[0];
+ if (!argc || !strcmp(argv0, "--"))
die ("--track needs a branch name");
- slash = strchr(argv[0], '/');
- if (slash && !prefixcmp(argv[0], "refs/"))
- slash = strchr(slash + 1, '/');
- if (slash && !prefixcmp(argv[0], "remotes/"))
- slash = strchr(slash + 1, '/');
- if (!slash || !slash[1])
+ if (!prefixcmp(argv0, "refs/"))
+ argv0 += 5;
+ if (!prefixcmp(argv0, "remotes/"))
+ argv0 += 8;
+ argv0 = strchr(argv0, '/');
+ if (!argv0 || !argv0[1])
die ("Missing branch name; try -b");
- opts.new_branch = slash + 1;
+ opts.new_branch = argv0 + 1;
}
- if (opts.track == -1)
+ if (opts.track == BRANCH_TRACK_UNSPECIFIED)
opts.track = git_branch_track;
if (opts.force && opts.merge)