зеркало из https://github.com/microsoft/git.git
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:
Родитель
e4d2d55ae4
Коммит
3c87aa946a
|
@ -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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче