branch: add a dry_run parameter to create_branch()
Add a dry_run parameter to create_branch() such that dry_run = 1 will validate a new branch without trying to create it. This will be used in `git branch --recurse-submodules` to ensure that the new branch can be created in all submodules. Signed-off-by: Glen Choo <chooglen@google.com> Reviewed-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
bc0893cf3b
commit
3f3e76082b
5
branch.c
5
branch.c
@ -423,7 +423,7 @@ static void dwim_branch_start(struct repository *r, const char *start_name,
|
|||||||
void create_branch(struct repository *r,
|
void create_branch(struct repository *r,
|
||||||
const char *name, const char *start_name,
|
const char *name, const char *start_name,
|
||||||
int force, int clobber_head_ok, int reflog,
|
int force, int clobber_head_ok, int reflog,
|
||||||
int quiet, enum branch_track track)
|
int quiet, enum branch_track track, int dry_run)
|
||||||
{
|
{
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
char *real_ref;
|
char *real_ref;
|
||||||
@ -445,6 +445,8 @@ void create_branch(struct repository *r,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dwim_branch_start(r, start_name, track, &real_ref, &oid);
|
dwim_branch_start(r, start_name, track, &real_ref, &oid);
|
||||||
|
if (dry_run)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
if (reflog)
|
if (reflog)
|
||||||
log_all_ref_updates = LOG_REFS_NORMAL;
|
log_all_ref_updates = LOG_REFS_NORMAL;
|
||||||
@ -467,6 +469,7 @@ void create_branch(struct repository *r,
|
|||||||
if (real_ref && track)
|
if (real_ref && track)
|
||||||
setup_tracking(ref.buf + 11, real_ref, track, quiet);
|
setup_tracking(ref.buf + 11, real_ref, track, quiet);
|
||||||
|
|
||||||
|
cleanup:
|
||||||
strbuf_release(&ref);
|
strbuf_release(&ref);
|
||||||
free(real_ref);
|
free(real_ref);
|
||||||
}
|
}
|
||||||
|
5
branch.h
5
branch.h
@ -62,11 +62,14 @@ void dwim_and_setup_tracking(struct repository *r, const char *new_ref,
|
|||||||
* - track causes the new branch to be configured to merge the remote branch
|
* - track causes the new branch to be configured to merge the remote branch
|
||||||
* that start_name is a tracking branch for (if any).
|
* that start_name is a tracking branch for (if any).
|
||||||
*
|
*
|
||||||
|
* - dry_run causes the branch to be validated but not created.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
void create_branch(struct repository *r,
|
void create_branch(struct repository *r,
|
||||||
const char *name, const char *start_name,
|
const char *name, const char *start_name,
|
||||||
int force, int clobber_head_ok,
|
int force, int clobber_head_ok,
|
||||||
int reflog, int quiet, enum branch_track track);
|
int reflog, int quiet, enum branch_track track,
|
||||||
|
int dry_run);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if 'name' can be a valid name for a branch; die otherwise.
|
* Check if 'name' can be a valid name for a branch; die otherwise.
|
||||||
|
@ -859,7 +859,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
create_branch(the_repository,
|
create_branch(the_repository,
|
||||||
argv[0], (argc == 2) ? argv[1] : head,
|
argv[0], (argc == 2) ? argv[1] : head,
|
||||||
force, 0, reflog, quiet, track);
|
force, 0, reflog, quiet, track, 0);
|
||||||
|
|
||||||
} else
|
} else
|
||||||
usage_with_options(builtin_branch_usage, options);
|
usage_with_options(builtin_branch_usage, options);
|
||||||
|
@ -893,7 +893,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
|
|||||||
opts->new_branch_force ? 1 : 0,
|
opts->new_branch_force ? 1 : 0,
|
||||||
opts->new_branch_log,
|
opts->new_branch_log,
|
||||||
opts->quiet,
|
opts->quiet,
|
||||||
opts->track);
|
opts->track,
|
||||||
|
0);
|
||||||
new_branch_info->name = opts->new_branch;
|
new_branch_info->name = opts->new_branch;
|
||||||
setup_branch_path(new_branch_info);
|
setup_branch_path(new_branch_info);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user