checkout: pass the "num_matches" up to callers

Pass the previously added "num_matches" struct value up to the callers
of unique_tracking_name(). This will allow callers to optionally print
better error messages in a later change.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2018-06-05 14:40:46 +00:00 коммит произвёл Junio C Hamano
Родитель e4d2d55ae4
Коммит 3c87aa946a
4 изменённых файлов: 15 добавлений и 7 удалений

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

@ -878,7 +878,8 @@ static int parse_branchname_arg(int argc, const char **argv,
int dwim_new_local_branch_ok, int dwim_new_local_branch_ok,
struct branch_info *new_branch_info, struct branch_info *new_branch_info,
struct checkout_opts *opts, struct checkout_opts *opts,
struct object_id *rev) struct object_id *rev,
int *dwim_remotes_matched)
{ {
struct tree **source_tree = &opts->source_tree; struct tree **source_tree = &opts->source_tree;
const char **new_branch = &opts->new_branch; const char **new_branch = &opts->new_branch;
@ -972,7 +973,8 @@ static int parse_branchname_arg(int argc, const char **argv,
recover_with_dwim = 0; recover_with_dwim = 0;
if (recover_with_dwim) { if (recover_with_dwim) {
const char *remote = unique_tracking_name(arg, rev); const char *remote = unique_tracking_name(arg, rev,
dwim_remotes_matched);
if (remote) { if (remote) {
*new_branch = arg; *new_branch = arg;
arg = remote; arg = remote;
@ -1109,6 +1111,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
struct branch_info new_branch_info; struct branch_info new_branch_info;
char *conflict_style = NULL; char *conflict_style = NULL;
int dwim_new_local_branch = 1; int dwim_new_local_branch = 1;
int dwim_remotes_matched = 0;
struct option options[] = { struct option options[] = {
OPT__QUIET(&opts.quiet, N_("suppress progress reporting")), OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
OPT_STRING('b', NULL, &opts.new_branch, N_("branch"), OPT_STRING('b', NULL, &opts.new_branch, N_("branch"),
@ -1219,7 +1222,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
opts.track == BRANCH_TRACK_UNSPECIFIED && opts.track == BRANCH_TRACK_UNSPECIFIED &&
!opts.new_branch; !opts.new_branch;
int n = parse_branchname_arg(argc, argv, dwim_ok, int n = parse_branchname_arg(argc, argv, dwim_ok,
&new_branch_info, &opts, &rev); &new_branch_info, &opts, &rev,
&dwim_remotes_matched);
argv += n; argv += n;
argc -= n; argc -= n;
} }

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

@ -412,7 +412,7 @@ static const char *dwim_branch(const char *path, const char **new_branch)
if (guess_remote) { if (guess_remote) {
struct object_id oid; struct object_id oid;
const char *remote = const char *remote =
unique_tracking_name(*new_branch, &oid); unique_tracking_name(*new_branch, &oid, NULL);
return remote; return remote;
} }
return NULL; return NULL;
@ -484,7 +484,7 @@ static int add(int ac, const char **av, const char *prefix)
commit = lookup_commit_reference_by_name(branch); commit = lookup_commit_reference_by_name(branch);
if (!commit) { if (!commit) {
remote = unique_tracking_name(branch, &oid); remote = unique_tracking_name(branch, &oid, NULL);
if (remote) { if (remote) {
new_branch = branch; new_branch = branch;
branch = remote; branch = remote;

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

@ -32,12 +32,15 @@ static int check_tracking_name(struct remote *remote, void *cb_data)
return 0; return 0;
} }
const char *unique_tracking_name(const char *name, struct object_id *oid) const char *unique_tracking_name(const char *name, struct object_id *oid,
int *dwim_remotes_matched)
{ {
struct tracking_name_data cb_data = TRACKING_NAME_DATA_INIT; struct tracking_name_data cb_data = TRACKING_NAME_DATA_INIT;
cb_data.src_ref = xstrfmt("refs/heads/%s", name); cb_data.src_ref = xstrfmt("refs/heads/%s", name);
cb_data.dst_oid = oid; cb_data.dst_oid = oid;
for_each_remote(check_tracking_name, &cb_data); for_each_remote(check_tracking_name, &cb_data);
if (dwim_remotes_matched)
*dwim_remotes_matched = cb_data.num_matches;
free(cb_data.src_ref); free(cb_data.src_ref);
if (cb_data.num_matches == 1) if (cb_data.num_matches == 1)
return cb_data.dst_ref; return cb_data.dst_ref;

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

@ -9,6 +9,7 @@
* exists, NULL otherwise. * exists, NULL otherwise.
*/ */
extern const char *unique_tracking_name(const char *name, extern const char *unique_tracking_name(const char *name,
struct object_id *oid); struct object_id *oid,
int *dwim_remotes_matched);
#endif /* CHECKOUT_H */ #endif /* CHECKOUT_H */