branch: convert delete_branches() to a flags argument
delete_branches() takes separate force and quiet parameters, while check_branch_commit() takes force. The next commits would grow this collection further. Replace them with a single unsigned flags argument and an enum. Test the FORCE and QUIET bits directly from flags at each use site so that mutating or forwarding flags cannot leave cached values stale. No change in behavior. Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>jch
parent
f52d570592
commit
3eec1e41cb
|
|
@ -189,16 +189,22 @@ static int branch_merged(int kind, const char *name,
|
|||
return merged;
|
||||
}
|
||||
|
||||
enum delete_branch_flags {
|
||||
DELETE_BRANCH_FORCE = (1 << 0),
|
||||
DELETE_BRANCH_QUIET = (1 << 1),
|
||||
};
|
||||
|
||||
static int check_branch_commit(const char *branchname, const char *refname,
|
||||
const struct object_id *oid, struct commit *head_rev,
|
||||
int kinds, int force)
|
||||
int kinds, unsigned int flags)
|
||||
{
|
||||
struct commit *rev = lookup_commit_reference(the_repository, oid);
|
||||
if (!force && !rev) {
|
||||
if (!(flags & DELETE_BRANCH_FORCE) && !rev) {
|
||||
error(_("couldn't look up commit object for '%s'"), refname);
|
||||
return -1;
|
||||
}
|
||||
if (!force && !branch_merged(kinds, branchname, rev, head_rev)) {
|
||||
if (!(flags & DELETE_BRANCH_FORCE) &&
|
||||
!branch_merged(kinds, branchname, rev, head_rev)) {
|
||||
error(_("the branch '%s' is not fully merged"), branchname);
|
||||
advise_if_enabled(ADVICE_FORCE_DELETE_BRANCH,
|
||||
_("If you are sure you want to delete it, "
|
||||
|
|
@ -217,8 +223,8 @@ static void delete_branch_config(const char *branchname)
|
|||
strbuf_release(&buf);
|
||||
}
|
||||
|
||||
static int delete_branches(int argc, const char **argv, int force, int kinds,
|
||||
int quiet)
|
||||
static int delete_branches(int argc, const char **argv, int kinds,
|
||||
unsigned int flags)
|
||||
{
|
||||
struct commit *head_rev = NULL;
|
||||
struct object_id oid;
|
||||
|
|
@ -241,7 +247,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
remote_branch = 1;
|
||||
allowed_interpret = INTERPRET_BRANCH_REMOTE;
|
||||
|
||||
force = 1;
|
||||
flags |= DELETE_BRANCH_FORCE;
|
||||
break;
|
||||
case FILTER_REFS_BRANCHES:
|
||||
fmt = "refs/heads/%s";
|
||||
|
|
@ -252,12 +258,12 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
}
|
||||
branch_name_pos = strcspn(fmt, "%");
|
||||
|
||||
if (!force)
|
||||
if (!(flags & DELETE_BRANCH_FORCE))
|
||||
head_rev = lookup_commit_reference(the_repository, &head_oid);
|
||||
|
||||
for (i = 0; i < argc; i++, strbuf_reset(&bname)) {
|
||||
char *target = NULL;
|
||||
int flags = 0;
|
||||
int ref_flags = 0;
|
||||
|
||||
copy_branchname(&bname, argv[i], allowed_interpret);
|
||||
free(name);
|
||||
|
|
@ -279,7 +285,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
RESOLVE_REF_READING
|
||||
| RESOLVE_REF_NO_RECURSE
|
||||
| RESOLVE_REF_ALLOW_BAD_NAME,
|
||||
&oid, &flags);
|
||||
&oid, &ref_flags);
|
||||
if (!target) {
|
||||
if (remote_branch) {
|
||||
error(_("remote-tracking branch '%s' not found"), bname.buf);
|
||||
|
|
@ -291,7 +297,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
| RESOLVE_REF_NO_RECURSE
|
||||
| RESOLVE_REF_ALLOW_BAD_NAME,
|
||||
&oid,
|
||||
&flags);
|
||||
&ref_flags);
|
||||
FREE_AND_NULL(virtual_name);
|
||||
|
||||
if (virtual_target)
|
||||
|
|
@ -306,16 +312,16 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!(flags & (REF_ISSYMREF|REF_ISBROKEN)) &&
|
||||
if (!(ref_flags & (REF_ISSYMREF|REF_ISBROKEN)) &&
|
||||
check_branch_commit(bname.buf, name, &oid, head_rev, kinds,
|
||||
force)) {
|
||||
flags)) {
|
||||
ret = 1;
|
||||
goto next;
|
||||
}
|
||||
|
||||
item = string_list_append(&refs_to_delete, name);
|
||||
item->util = xstrdup((flags & REF_ISBROKEN) ? "broken"
|
||||
: (flags & REF_ISSYMREF) ? target
|
||||
item->util = xstrdup((ref_flags & REF_ISBROKEN) ? "broken"
|
||||
: (ref_flags & REF_ISSYMREF) ? target
|
||||
: repo_find_unique_abbrev(the_repository, &oid, DEFAULT_ABBREV));
|
||||
|
||||
next:
|
||||
|
|
@ -330,7 +336,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
char *name = item->string;
|
||||
if (!refs_ref_exists(get_main_ref_store(the_repository), name)) {
|
||||
char *refname = name + branch_name_pos;
|
||||
if (!quiet)
|
||||
if (!(flags & DELETE_BRANCH_QUIET))
|
||||
printf(remote_branch
|
||||
? _("Deleted remote-tracking branch %s (was %s).\n")
|
||||
: _("Deleted branch %s (was %s).\n"),
|
||||
|
|
@ -872,7 +878,9 @@ int cmd_branch(int argc,
|
|||
if (delete) {
|
||||
if (!argc)
|
||||
die(_("branch name required"));
|
||||
ret = delete_branches(argc, argv, delete > 1, filter.kind, quiet);
|
||||
ret = delete_branches(argc, argv, filter.kind,
|
||||
(delete > 1 ? DELETE_BRANCH_FORCE : 0) |
|
||||
(quiet ? DELETE_BRANCH_QUIET : 0));
|
||||
goto out;
|
||||
} else if (show_current) {
|
||||
print_current_branch_name();
|
||||
|
|
|
|||
Loading…
Reference in New Issue