Subject: [PATCH v2] refs.h: make all flags arguments unsigned

From: "Han-Wen Nienhuys via GitGitGadget" <[email-masked]>
Date: Tue, 01 Feb 2022 12:46:56 +0000

From: Han-Wen Nienhuys <[email-masked]>

As discussed in
https://lore.kernel.org/git/[email-masked]/ , we don't
want to treat the sign bit specially, so make all flags in refs.h
unsigned.

For uniformity, rename all variables to `flags` or `unused_flags`,
from `flag`. In a couple of shadowing cases, use `ref_flags` for
clarity.

Signed-off-by: Han-Wen Nienhuys <[email-masked]>
---
    refs.h: make all flags arguments unsigned
    
    v2:
    
     * vet call sites.
     * uniform naming.
     * make resolve_flags unsigned too
    
    Signed-off-by: Han-Wen Nienhuys [email-masked]

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1210%2Fhanwen%2Funsigned-flags-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1210/hanwen/unsigned-flags-v2
Pull-Request: https://github.com/git/git/pull/1210

Range-diff vs v1:

 1:  c1dc792bd0d ! 1:  216006057b7 refs.h: make all flags arguments unsigned
     @@ Commit message
          want to treat the sign bit specially, so make all flags in refs.h
          unsigned.
      
     +    For uniformity, rename all variables to `flags` or `unused_flags`,
     +    from `flag`. In a couple of shadowing cases, use `ref_flags` for
     +    clarity.
     +
          Signed-off-by: Han-Wen Nienhuys <[email-masked]>
      
       ## bisect.c ##
     @@ bisect.c: void find_bisection(struct commit_list **commit_list, int *reaches,
       
       static int register_ref(const char *refname, const struct object_id *oid,
      -			int flags, void *cb_data)
     -+			unsigned int flags, void *cb_data)
     ++			unsigned int unused_flags, void *cb_data)
       {
       	struct strbuf good_prefix = STRBUF_INIT;
       	strbuf_addstr(&good_prefix, term_good);
     @@ bisect.c: int estimate_bisect_steps(int all)
       
       static int mark_for_removal(const char *refname, const struct object_id *oid,
      -			    int flag, void *cb_data)
     -+			    unsigned int flag, void *cb_data)
     ++			    unsigned int unused_flags, void *cb_data)
       {
       	struct string_list *refs = cb_data;
       	char *ref = xstrfmt("refs/bisect%s", refname);
     @@ builtin/bisect--helper.c: static int check_and_set_terms(struct bisect_terms *te
       
       static int mark_good(const char *refname, const struct object_id *oid,
      -		     int flag, void *cb_data)
     -+		     unsigned int flag, void *cb_data)
     ++		     unsigned int unused_flags, void *cb_data)
       {
       	int *m_good = (int *)cb_data;
       	*m_good = 0;
     @@ builtin/bisect--helper.c: finish:
       
       static int add_bisect_ref(const char *refname, const struct object_id *oid,
      -			  int flags, void *cb)
     -+			  unsigned int flags, void *cb)
     ++			  unsigned int unused_flags, void *cb)
       {
       	struct add_bisect_ref_data *data = cb;
       
     @@ builtin/bisect--helper.c: static enum bisect_error bisect_start(struct bisect_te
       	int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
      -	int flags, pathspec_pos;
      +	int pathspec_pos;
     -+	unsigned int flags;
     ++	unsigned int unused_flags;
       	enum bisect_error res = BISECT_OK;
       	struct string_list revs = STRING_LIST_INIT_DUP;
       	struct string_list states = STRING_LIST_INIT_DUP;
     +@@ builtin/bisect--helper.c: static enum bisect_error bisect_start(struct bisect_terms *terms, const char **a
     + 	/*
     + 	 * Verify HEAD
     + 	 */
     +-	head = resolve_ref_unsafe("HEAD", 0, &head_oid, &flags);
     ++	head = resolve_ref_unsafe("HEAD", 0, &head_oid, &unused_flags);
     + 	if (!head)
     + 		if (get_oid("HEAD", &head_oid))
     + 			return error(_("bad HEAD - I need a HEAD"));
      
       ## builtin/branch.c ##
      @@ builtin/branch.c: static int delete_branches(int argc, const char **argv, int force, int kinds,
     @@ builtin/checkout.c: static void update_refs_for_switch(const struct checkout_opt
       static int add_pending_uninteresting_ref(const char *refname,
       					 const struct object_id *oid,
      -					 int flags, void *cb_data)
     -+					 unsigned int flags, void *cb_data)
     ++					 unsigned int unused_flags,
     ++					 void *cb_data)
       {
       	add_pending_oid(cb_data, refname, oid, UNINTERESTING);
       	return 0;
     @@ builtin/checkout.c: static int switch_branches(const struct checkout_opts *opts,
       	struct object_id rev;
      -	int flag, writeout_error = 0;
      +	int writeout_error = 0;
     -+	unsigned int flag;
     ++	unsigned int flags;
       	int do_merge = 1;
       
       	trace2_cmd_mode("branch");
     + 
     + 	memset(&old_branch_info, 0, sizeof(old_branch_info));
     +-	old_branch_info.path = resolve_refdup("HEAD", 0, &rev, &flag);
     ++	old_branch_info.path = resolve_refdup("HEAD", 0, &rev, &flags);
     + 	if (old_branch_info.path)
     + 		old_branch_info.commit = lookup_commit_reference_gently(the_repository, &rev, 1);
     +-	if (!(flag & REF_ISSYMREF))
     ++	if (!(flags & REF_ISSYMREF))
     + 		FREE_AND_NULL(old_branch_info.path);
     + 
     + 	if (old_branch_info.path) {
      @@ builtin/checkout.c: static int checkout_branch(struct checkout_opts *opts,
       
       	if (new_branch_info->path && !opts->force_detach && !opts->new_branch &&
       	    !opts->ignore_other_worktrees) {
      -		int flag;
     -+		unsigned int flag;
     - 		char *head_ref = resolve_refdup("HEAD", 0, NULL, &flag);
     - 		if (head_ref &&
     - 		    (!(flag & REF_ISSYMREF) || strcmp(head_ref, new_branch_info->path)))
     -@@ builtin/checkout.c: static int checkout_branch(struct checkout_opts *opts,
     +-		char *head_ref = resolve_refdup("HEAD", 0, NULL, &flag);
     +-		if (head_ref &&
     +-		    (!(flag & REF_ISSYMREF) || strcmp(head_ref, new_branch_info->path)))
     ++		unsigned int flags;
     ++		char *head_ref = resolve_refdup("HEAD", 0, NULL, &flags);
     ++		if (head_ref && (!(flags & REF_ISSYMREF) ||
     ++				 strcmp(head_ref, new_branch_info->path)))
     + 			die_if_checked_out(new_branch_info->path, 1);
     + 		free(head_ref);
     + 	}
       
       	if (!new_branch_info->commit && opts->new_branch) {
       		struct object_id rev;
      -		int flag;
     -+		unsigned int flag;
     ++		unsigned int flags;
       
     - 		if (!read_ref_full("HEAD", 0, &rev, &flag) &&
     - 		    (flag & REF_ISSYMREF) && is_null_oid(&rev))
     +-		if (!read_ref_full("HEAD", 0, &rev, &flag) &&
     +-		    (flag & REF_ISSYMREF) && is_null_oid(&rev))
     ++		if (!read_ref_full("HEAD", 0, &rev, &flags) &&
     ++		    (flags & REF_ISSYMREF) && is_null_oid(&rev))
     + 			return switch_unborn_to_new_branch(opts);
     + 	}
     + 	return switch_branches(opts, new_branch_info);
      
       ## builtin/describe.c ##
      @@ builtin/describe.c: static void add_to_known_names(const char *path,
     @@ builtin/describe.c: static void add_to_known_names(const char *path,
       
      -static int get_name(const char *path, const struct object_id *oid, int flag, void *cb_data)
      +static int get_name(const char *path, const struct object_id *oid,
     -+		    unsigned int flag, void *cb_data)
     ++		    unsigned int unused_flags, void *cb_data)
       {
       	int is_tag = 0;
       	struct object_id peeled;
     @@ builtin/fetch.c: static struct refname_hash_entry *refname_hash_add(struct hashm
      -			   const struct object_id *oid,
      -			   int flag, void *cbdata)
      +static int add_one_refname(const char *refname, const struct object_id *oid,
     -+			   unsigned int flag, void *cbdata)
     ++			   unsigned int unused_flags, void *cbdata)
       {
       	struct hashmap *refname_map = cbdata;
       
     @@ builtin/fetch.c: static void set_option(struct transport *transport, const char
      -static int add_oid(const char *refname, const struct object_id *oid, int flags,
      -		   void *cb_data)
      +static int add_oid(const char *refname, const struct object_id *oid,
     -+		   unsigned int flags, void *cb_data)
     ++		   unsigned int unused_flags, void *cb_data)
       {
       	struct oid_array *oids = cb_data;
       
     @@ builtin/fsck.c: static int fsck_handle_reflog_ent(struct object_id *ooid, struct
       
       static int fsck_handle_reflog(const char *logname, const struct object_id *oid,
      -			      int flag, void *cb_data)
     -+			      unsigned int flag, void *cb_data)
     ++			      unsigned int unused_flags, void *cb_data)
       {
       	struct strbuf refname = STRBUF_INIT;
       
     @@ builtin/fsck.c: static int fsck_handle_reflog(const char *logname, const struct
       
       static int fsck_handle_ref(const char *refname, const struct object_id *oid,
      -			   int flag, void *cb_data)
     -+			   unsigned int flag, void *cb_data)
     ++			   unsigned int unused_flags, void *cb_data)
       {
       	struct object *obj;
       
     @@ builtin/gc.c: struct cg_auto_data {
      -		      const struct object_id *oid, int flags,
      -		      void *cb_data)
      +static int dfs_on_ref(const char *refname, const struct object_id *oid,
     -+		      unsigned int flags, void *cb_data)
     ++		      unsigned int unused_flags, void *cb_data)
       {
       	struct cg_auto_data *data = (struct cg_auto_data *)cb_data;
       	int result = 0;
     @@ builtin/name-rev.c: static int cmp_by_tag_and_age(const void *a_, const void *b_
       
      -static int name_ref(const char *path, const struct object_id *oid, int flags, void *cb_data)
      +static int name_ref(const char *path, const struct object_id *oid,
     -+		    unsigned int flags, void *cb_data)
     ++		    unsigned int unused_flags, void *cb_data)
       {
       	struct object *o = parse_object(the_repository, oid);
       	struct name_ref_data *data = cb_data;
     @@ builtin/pack-objects.c: static enum write_one_status write_one(struct hashfile *
      -static int mark_tagged(const char *path, const struct object_id *oid, int flag,
      -		       void *cb_data)
      +static int mark_tagged(const char *path, const struct object_id *oid,
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int unused_flags, void *cb_data)
       {
       	struct object_id peeled;
       	struct object_entry *entry = packlist_find(&to_pack, oid);
     @@ builtin/pack-objects.c: static void add_tag_chain(const struct object_id *oid)
       
      -static int add_ref_tag(const char *tag, const struct object_id *oid, int flag, void *cb_data)
      +static int add_ref_tag(const char *tag, const struct object_id *oid,
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int unused_flags, void *cb_data)
       {
       	struct object_id peeled;
       
     @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix
       	const char *branch_name;
      -	int ret, flags, total_argc, in_progress = 0;
      +	int ret, total_argc, in_progress = 0;
     -+	unsigned int flags;
       	int keep_base = 0;
       	int ok_to_skip_pre_rebase = 0;
       	struct strbuf msg = STRBUF_INIT;
     +@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     + 		}
     + 	} else if (argc == 0) {
     + 		/* Do not need to switch branches, we are already on it. */
     ++		unsigned int flags;
     + 		options.head_name =
     + 			xstrdup_or_null(resolve_ref_unsafe("HEAD", 0, NULL,
     + 					 &flags));
      @@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
       	if (can_fast_forward(options.onto, options.upstream, options.restrict_revision,
       		    &options.orig_head, &merge_base) &&
       	    allow_preemptive_ff) {
      -		int flag;
     -+		unsigned int flag;
     ++		unsigned int unused_flags;
       
       		if (!(options.flags & REBASE_FORCE)) {
       			/* Lazily switch to the target branch if needed... */
     +@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     + 			if (!(options.flags & REBASE_NO_QUIET))
     + 				; /* be quiet */
     + 			else if (!strcmp(branch_name, "HEAD") &&
     +-				 resolve_ref_unsafe("HEAD", 0, NULL, &flag))
     ++				 resolve_ref_unsafe("HEAD", 0, NULL,
     ++						    &unused_flags))
     + 				puts(_("HEAD is up to date."));
     + 			else
     + 				printf(_("Current branch %s is up to date.\n"),
     +@@ builtin/rebase.c: int cmd_rebase(int argc, const char **argv, const char *prefix)
     + 		} else if (!(options.flags & REBASE_NO_QUIET))
     + 			; /* be quiet */
     + 		else if (!strcmp(branch_name, "HEAD") &&
     +-			 resolve_ref_unsafe("HEAD", 0, NULL, &flag))
     ++			 resolve_ref_unsafe("HEAD", 0, NULL, &unused_flags))
     + 			puts(_("HEAD is up to date, rebase forced."));
     + 		else
     + 			printf(_("Current branch %s is up to date, rebase "
      
       ## builtin/receive-pack.c ##
      @@ builtin/receive-pack.c: static void show_ref(const char *path, const struct object_id *oid)
     @@ builtin/receive-pack.c: static void show_ref(const char *path, const struct obje
       
       static int show_ref_cb(const char *path_full, const struct object_id *oid,
      -		       int flag, void *data)
     -+		       unsigned int flag, void *data)
     ++		       unsigned int unused_flags, void *data)
       {
       	struct oidset *seen = data;
       	const char *path = strip_namespace(path_full);
     +@@ builtin/receive-pack.c: static void run_update_post_hook(struct command *commands)
     + 
     + static void check_aliased_update_internal(struct command *cmd,
     + 					  struct string_list *list,
     +-					  const char *dst_name, int flag)
     ++					  const char *dst_name,
     ++					  unsigned int flags)
     + {
     + 	struct string_list_item *item;
     + 	struct command *dst_cmd;
     + 
     +-	if (!(flag & REF_ISSYMREF))
     ++	if (!(flags & REF_ISSYMREF))
     + 		return;
     + 
     + 	if (!dst_name) {
      @@ builtin/receive-pack.c: static void check_aliased_update(struct command *cmd, struct string_list *list)
       {
       	struct strbuf buf = STRBUF_INIT;
       	const char *dst_name;
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       
       	strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
     - 	dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
     +-	dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
     +-	check_aliased_update_internal(cmd, list, dst_name, flag);
     ++	dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flags);
     ++	check_aliased_update_internal(cmd, list, dst_name, flags);
     + 	strbuf_release(&buf);
     + }
     + 
      
       ## builtin/reflog.c ##
      @@ builtin/reflog.c: static int should_expire_reflog_ent_verbose(struct object_id *ooid,
     @@ builtin/reflog.c: static void reflog_expiry_cleanup(void *cb_data)
       
      -static int collect_reflog(const char *ref, const struct object_id *oid, int unused, void *cb_data)
      +static int collect_reflog(const char *ref, const struct object_id *oid,
     -+			  unsigned int unused, void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	struct worktree_reflogs *cb = cb_data;
       	struct worktree *worktree = cb->worktree;
     @@ builtin/remote.c: struct branches_for_remote {
       static int add_branch_for_removal(const char *refname,
      -	const struct object_id *oid, int flags, void *cb_data)
      +				  const struct object_id *oid,
     -+				  unsigned int flags, void *cb_data)
     ++				  unsigned int unused_flags, void *cb_data)
       {
       	struct branches_for_remote *branches = cb_data;
       	struct refspec_item refspec;
     @@ builtin/remote.c: struct rename_info {
       
       static int read_remote_branches(const char *refname,
      -	const struct object_id *oid, int flags, void *cb_data)
     -+				const struct object_id *oid, unsigned int flags,
     -+				void *cb_data)
     ++				const struct object_id *oid,
     ++				unsigned int unused_flags, void *cb_data)
       {
       	struct rename_info *rename = cb_data;
       	struct strbuf buf = STRBUF_INIT;
       	struct string_list_item *item;
      -	int flag;
     -+	unsigned int flag;
       	const char *symref;
       
       	strbuf_addf(&buf, "refs/remotes/%s/", rename->old_name);
     + 	if (starts_with(refname, buf.buf)) {
     ++		unsigned int flags;
     + 		item = string_list_append(rename->remote_branches, refname);
     +-		symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING,
     +-					    NULL, &flag);
     +-		if (symref && (flag & REF_ISSYMREF))
     ++		symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING, NULL,
     ++					    &flags);
     ++		if (symref && (flags & REF_ISSYMREF))
     + 			item->util = xstrdup(symref);
     + 		else
     + 			item->util = NULL;
      @@ builtin/remote.c: static int mv(int argc, const char **argv)
       	for_each_ref(read_remote_branches, &rename);
       	for (i = 0; i < remote_branches.nr; i++) {
       		struct string_list_item *item = remote_branches.items + i;
      -		int flag = 0;
     -+		unsigned int flag = 0;
     ++		unsigned int flags = 0;
       
     - 		read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag);
     - 		if (!(flag & REF_ISSYMREF))
     +-		read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag);
     +-		if (!(flag & REF_ISSYMREF))
     ++		read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flags);
     ++		if (!(flags & REF_ISSYMREF))
     + 			continue;
     + 		if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF))
     + 			die(_("deleting '%s' failed"), item->string);
      @@ builtin/remote.c: static void free_remote_ref_states(struct ref_states *states)
       }
       
     @@ builtin/remote.c: static void free_remote_ref_states(struct ref_states *states)
      
       ## builtin/repack.c ##
      @@ builtin/repack.c: struct midx_snapshot_ref_data {
     - };
       
       static int midx_snapshot_ref_one(const char *refname,
     --				 const struct object_id *oid,
     + 				 const struct object_id *oid,
      -				 int flag, void *_data)
     -+				 const struct object_id *oid, unsigned int flag,
     -+				 void *_data)
     ++				 unsigned int unused_flag, void *_data)
       {
       	struct midx_snapshot_ref_data *data = _data;
       	struct object_id peeled;
      
       ## builtin/replace.c ##
      @@ builtin/replace.c: struct show_data {
     - };
       
       static int show_reference(struct repository *r, const char *refname,
     --			  const struct object_id *oid,
     + 			  const struct object_id *oid,
      -			  int flag, void *cb_data)
     -+			  const struct object_id *oid, unsigned int flag,
     -+			  void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	struct show_data *data = cb_data;
       
     @@ builtin/rev-parse.c: static int show_default(void)
       
      -static int show_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)
      +static int show_reference(const char *refname, const struct object_id *oid,
     -+			  unsigned int flag, void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	if (ref_excluded(ref_excludes, refname))
       		return 0;
     @@ builtin/rev-parse.c: static int show_reference(const char *refname, const struct
       
      -static int anti_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)
      +static int anti_reference(const char *refname, const struct object_id *oid,
     -+			  unsigned int flag, void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	show_rev(REVERSED, oid, refname);
       	return 0;
     @@ builtin/show-branch.c: static int append_ref(const char *refname, const struct o
       
       static int append_head_ref(const char *refname, const struct object_id *oid,
      -			   int flag, void *cb_data)
     -+			   unsigned int flag, void *cb_data)
     ++			   unsigned int unused_flags, void *cb_data)
       {
       	struct object_id tmp;
       	int ofs = 11;
     @@ builtin/show-branch.c: static int append_head_ref(const char *refname, const str
       
       static int append_remote_ref(const char *refname, const struct object_id *oid,
      -			     int flag, void *cb_data)
     -+			     unsigned int flag, void *cb_data)
     ++			     unsigned int unused_flags, void *cb_data)
       {
       	struct object_id tmp;
       	int ofs = 13;
     +@@ builtin/show-branch.c: static int append_remote_ref(const char *refname, const struct object_id *oid,
     + }
     + 
     + static int append_tag_ref(const char *refname, const struct object_id *oid,
     +-			  int flag, void *cb_data)
     ++			  int unused_flags, void *cb_data)
     + {
     + 	if (!starts_with(refname, "refs/tags/"))
     + 		return 0;
      @@ builtin/show-branch.c: static const char *match_ref_pattern = NULL;
       static int match_ref_slash = 0;
       
       static int append_matching_ref(const char *refname, const struct object_id *oid,
      -			       int flag, void *cb_data)
     -+			       unsigned int flag, void *cb_data)
     ++			       unsigned int flags, void *cb_data)
       {
       	/* we want to allow pattern hold/<asterisk> to show all
       	 * branches under refs/heads/hold/, and v0.99.9? to show
     +@@ builtin/show-branch.c: static int append_matching_ref(const char *refname, const struct object_id *oid,
     + 	if (wildmatch(match_ref_pattern, tail, 0))
     + 		return 0;
     + 	if (starts_with(refname, "refs/heads/"))
     +-		return append_head_ref(refname, oid, flag, cb_data);
     ++		return append_head_ref(refname, oid, flags, cb_data);
     + 	if (starts_with(refname, "refs/tags/"))
     +-		return append_tag_ref(refname, oid, flag, cb_data);
     ++		return append_tag_ref(refname, oid, flags, cb_data);
     + 	return append_ref(refname, oid, 0);
     + }
     + 
      
       ## builtin/show-ref.c ##
      @@ builtin/show-ref.c: static void show_one(const char *refname, const struct object_id *oid)
     @@ builtin/show-ref.c: match:
       
       static int add_existing(const char *refname, const struct object_id *oid,
      -			int flag, void *cbdata)
     -+			unsigned int flag, void *cbdata)
     ++			unsigned int unused_flags, void *cbdata)
       {
       	struct string_list *list = (struct string_list *)cbdata;
       	string_list_insert(list, refname);
     @@ builtin/submodule--helper.c: static void print_status(unsigned int flags, char s
      -				     const struct object_id *oid, int flags,
      -				     void *cb_data)
      +				     const struct object_id *oid,
     -+				     unsigned int flags, void *cb_data)
     ++				     unsigned int unused_flags, void *cb_data)
       {
       	struct object_id *output = cb_data;
       	if (oid)
     @@ builtin/symbolic-ref.c: static const char * const git_symbolic_ref_usage[] = {
       static int check_symref(const char *HEAD, int quiet, int shorten, int print)
       {
      -	int flag;
     -+	unsigned int flag;
     - 	const char *refname = resolve_ref_unsafe(HEAD, 0, NULL, &flag);
     +-	const char *refname = resolve_ref_unsafe(HEAD, 0, NULL, &flag);
     ++	unsigned int flags;
     ++	const char *refname = resolve_ref_unsafe(HEAD, 0, NULL, &flags);
       
       	if (!refname)
     + 		die("No such ref: %s", HEAD);
     +-	else if (!(flag & REF_ISSYMREF)) {
     ++	else if (!(flags & REF_ISSYMREF)) {
     + 		if (!quiet)
     + 			die("ref %s is not a symbolic ref", HEAD);
     + 		else
      
       ## bundle.c ##
      @@ bundle.c: static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
     @@ bundle.c: static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
       		char *ref;
       		const char *display_ref;
      -		int flag;
     -+		unsigned int flag;
     ++		unsigned int flags;
       
       		if (e->item->flags & UNINTERESTING)
       			continue;
     + 		if (dwim_ref(e->name, strlen(e->name), &oid, &ref, 0) != 1)
     + 			goto skip_write_ref;
     +-		if (read_ref_full(e->name, RESOLVE_REF_READING, &oid, &flag))
     +-			flag = 0;
     +-		display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
     ++		if (read_ref_full(e->name, RESOLVE_REF_READING, &oid, &flags))
     ++			flags = 0;
     ++		display_ref = (flags & REF_ISSYMREF) ? e->name : ref;
     + 
     + 		if (e->item->type == OBJ_TAG &&
     + 				!is_tag_in_date_range(e->item, revs)) {
      
       ## commit-graph.c ##
      @@ commit-graph.c: struct refs_cb_data {
     @@ delta-islands.c: static void add_ref_to_island(const char *island_name, const st
       
       static int find_island_for_ref(const char *refname, const struct object_id *oid,
      -			       int flags, void *data)
     -+			       unsigned int flags, void *data)
     ++			       unsigned int unused_flags, void *data)
       {
       	/*
       	 * We should advertise 'ARRAY_SIZE(matches) - 2' as the max,
     @@ fetch-pack.c: static int rev_list_insert_ref(struct fetch_negotiator *negotiator
      -				   int flag, void *cb_data)
      +static int rev_list_insert_ref_oid(const char *refname,
      +				   const struct object_id *oid,
     -+				   unsigned int flag, void *cb_data)
     ++				   unsigned int unused_flags, void *cb_data)
       {
       	return rev_list_insert_ref(cb_data, oid);
       }
     @@ fetch-pack.c: static int mark_complete(const struct object_id *oid)
       
       static int mark_complete_oid(const char *refname, const struct object_id *oid,
      -			     int flag, void *cb_data)
     -+			     unsigned int flag, void *cb_data)
     ++			     unsigned int unused_flags, void *cb_data)
       {
       	return mark_complete(oid);
       }
     @@ http-backend.c: static void get_info_refs(struct strbuf *hdr, char *arg)
       
       static int show_head_ref(const char *refname, const struct object_id *oid,
      -			 int flag, void *cb_data)
     -+			 unsigned int flag, void *cb_data)
     ++			 unsigned int flags, void *cb_data)
       {
       	struct strbuf *buf = cb_data;
       
     +-	if (flag & REF_ISSYMREF) {
     ++	if (flags & REF_ISSYMREF) {
     + 		const char *target = resolve_ref_unsafe(refname,
     + 							RESOLVE_REF_READING,
     + 							NULL, NULL);
      
       ## log-tree.c ##
      @@ log-tree.c: static int ref_filter_match(const char *refname,
     @@ log-tree.c: static int ref_filter_match(const char *refname,
       
       static int add_ref_decoration(const char *refname, const struct object_id *oid,
      -			      int flags, void *cb_data)
     -+			      unsigned int flags, void *cb_data)
     ++			      unsigned int unused_flags, void *cb_data)
       {
       	struct object *obj;
       	enum object_type objtype;
     @@ ls-refs.c: struct ls_refs_data {
       
       static int send_ref(const char *refname, const struct object_id *oid,
      -		    int flag, void *cb_data)
     -+		    unsigned int flag, void *cb_data)
     ++		    unsigned int flags, void *cb_data)
       {
       	struct ls_refs_data *data = cb_data;
       	const char *refname_nons = strip_namespace(refname);
     +@@ ls-refs.c: static int send_ref(const char *refname, const struct object_id *oid,
     + 		strbuf_addf(&data->buf, "%s %s", oid_to_hex(oid), refname_nons);
     + 	else
     + 		strbuf_addf(&data->buf, "unborn %s", refname_nons);
     +-	if (data->symrefs && flag & REF_ISSYMREF) {
     ++	if (data->symrefs && flags & REF_ISSYMREF) {
     + 		struct object_id unused;
     +-		const char *symref_target = resolve_ref_unsafe(refname, 0,
     +-							       &unused,
     +-							       &flag);
     ++		const char *symref_target =
     ++			resolve_ref_unsafe(refname, 0, &unused, &flags);
     + 
     + 		if (!symref_target)
     + 			die("'%s' is a symref but it is not?", refname);
      @@ ls-refs.c: static void send_possibly_unborn_head(struct ls_refs_data *data)
       {
       	struct strbuf namespaced = STRBUF_INIT;
       	struct object_id oid;
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       	int oid_is_null;
       
       	strbuf_addf(&namespaced, "%sHEAD", get_git_namespace());
     +-	if (!resolve_ref_unsafe(namespaced.buf, 0, &oid, &flag))
     ++	if (!resolve_ref_unsafe(namespaced.buf, 0, &oid, &flags))
     + 		return; /* bad ref */
     + 	oid_is_null = is_null_oid(&oid);
     + 	if (!oid_is_null ||
     +-	    (data->unborn && data->symrefs && (flag & REF_ISSYMREF)))
     +-		send_ref(namespaced.buf, oid_is_null ? NULL : &oid, flag, data);
     ++	    (data->unborn && data->symrefs && (flags & REF_ISSYMREF)))
     ++		send_ref(namespaced.buf, oid_is_null ? NULL : &oid, flags,
     ++			 data);
     + 	strbuf_release(&namespaced);
     + }
     + 
      
       ## midx.c ##
      @@ midx.c: static void prepare_midx_packing_data(struct packing_data *pdata,
     @@ midx.c: static void prepare_midx_packing_data(struct packing_data *pdata,
      -			      const struct object_id *oid,
      -			      int flag, void *cb_data)
      +static int add_ref_to_pending(const char *refname, const struct object_id *oid,
     -+			      unsigned int flag, void *cb_data)
     ++			      unsigned int flags, void *cb_data)
       {
       	struct rev_info *revs = (struct rev_info*)cb_data;
       	struct object *object;
     + 
     +-	if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
     ++	if ((flags & REF_ISSYMREF) && (flags & REF_ISBROKEN)) {
     + 		warning("symbolic ref is dangling: %s", refname);
     + 		return 0;
     + 	}
      
       ## negotiator/default.c ##
      @@ negotiator/default.c: static void rev_list_push(struct negotiation_state *ns,
     @@ negotiator/default.c: static void rev_list_push(struct negotiation_state *ns,
       
       static int clear_marks(const char *refname, const struct object_id *oid,
      -		       int flag, void *cb_data)
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int unused_flags, void *cb_data)
       {
       	struct object *o = deref_tag(the_repository, parse_object(the_repository, oid), refname, 0);
       
     @@ negotiator/skipping.c: static struct entry *rev_list_push(struct data *data, str
       
       static int clear_marks(const char *refname, const struct object_id *oid,
      -		       int flag, void *cb_data)
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int unused_flags, void *cb_data)
       {
       	struct object *o = deref_tag(the_repository, parse_object(the_repository, oid), refname, 0);
       
     @@ notes.c: out:
      -				   int flag, void *cb)
      +static int string_list_add_one_ref(const char *refname,
      +				   const struct object_id *oid,
     -+				   unsigned int flag, void *cb)
     ++				   unsigned int unused_flags, void *cb)
       {
       	struct string_list *refs = cb;
       	if (!unsorted_string_list_has_string(refs, refname))
     @@ object-name.c: struct handle_one_ref_cb {
       
       static int handle_one_ref(const char *path, const struct object_id *oid,
      -			  int flag, void *cb_data)
     -+			  unsigned int flag, void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	struct handle_one_ref_cb *cb = cb_data;
       	struct commit_list **list = cb->list;
     @@ reachable.c: static void update_progress(struct connectivity_progress *cp)
       
       static int add_one_ref(const char *path, const struct object_id *oid,
      -		       int flag, void *cb_data)
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int flags, void *cb_data)
       {
       	struct rev_info *revs = (struct rev_info *)cb_data;
       	struct object *object;
     + 
     +-	if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
     ++	if ((flags & REF_ISSYMREF) && (flags & REF_ISBROKEN)) {
     + 		warning("symbolic ref is dangling: %s", path);
     + 		return 0;
     + 	}
      
       ## ref-filter.c ##
      @@ ref-filter.c: struct ref_filter_cbdata {
     @@ ref-filter.c: struct ref_filter_cbdata {
        */
      -static int ref_filter_handler(const char *refname, const struct object_id *oid, int flag, void *cb_data)
      +static int ref_filter_handler(const char *refname, const struct object_id *oid,
     -+			      unsigned int flag, void *cb_data)
     ++			      unsigned int flags, void *cb_data)
       {
       	struct ref_filter_cbdata *ref_cbdata = cb_data;
       	struct ref_filter *filter = ref_cbdata->filter;
     +@@ ref-filter.c: static int ref_filter_handler(const char *refname, const struct object_id *oid,
     + 	struct commit *commit = NULL;
     + 	unsigned int kind;
     + 
     +-	if (flag & REF_BAD_NAME) {
     ++	if (flags & REF_BAD_NAME) {
     + 		warning(_("ignoring ref with broken name %s"), refname);
     + 		return 0;
     + 	}
     + 
     +-	if (flag & REF_ISBROKEN) {
     ++	if (flags & REF_ISBROKEN) {
     + 		warning(_("ignoring broken ref %s"), refname);
     + 		return 0;
     + 	}
     +@@ ref-filter.c: static int ref_filter_handler(const char *refname, const struct object_id *oid,
     + 	 */
     + 	ref = ref_array_push(ref_cbdata->array, refname, oid);
     + 	ref->commit = commit;
     +-	ref->flag = flag;
     ++	ref->flag = flags;
     + 	ref->kind = kind;
     + 
     + 	return 0;
      
       ## refs.c ##
      @@ refs.c: static unsigned char refname_disposition[256] = {
     @@ refs.c: int ref_resolves_to_object(const char *refname,
      -			  const char *refname, int resolve_flags,
      -			  struct object_id *oid, int *flags)
      +char *refs_resolve_refdup(struct ref_store *refs, const char *refname,
     -+			  int resolve_flags, struct object_id *oid,
     ++			  unsigned int resolve_flags, struct object_id *oid,
      +			  unsigned int *flags)
       {
       	const char *result;
     @@ refs.c: int head_ref_namespaced(each_ref_fn fn, void *cb_data)
       	int ret = 0;
       	struct object_id oid;
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       
       	strbuf_addf(&buf, "%sHEAD", get_git_namespace());
     - 	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
     +-	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
     +-		ret = fn(buf.buf, &oid, flag, cb_data);
     ++	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flags))
     ++		ret = fn(buf.buf, &oid, flags, cb_data);
     + 	strbuf_release(&buf);
     + 
     + 	return ret;
      @@ refs.c: int expand_ref(struct repository *repo, const char *str, int len,
       	for (p = ref_rev_parse_rules; *p; p++) {
       		struct object_id oid_from_ref;
       		struct object_id *this_result;
      -		int flag;
     -+		unsigned int flag;
     ++		unsigned int flags;
       		struct ref_store *refs = get_main_ref_store(repo);
       		int ignore_errno;
       
     +@@ refs.c: int expand_ref(struct repository *repo, const char *str, int len,
     + 		strbuf_reset(&fullref);
     + 		strbuf_addf(&fullref, *p, len, str);
     + 		r = refs_resolve_ref_unsafe(refs, fullref.buf,
     +-					    RESOLVE_REF_READING,
     +-					    this_result, &flag,
     +-					    &ignore_errno);
     ++					    RESOLVE_REF_READING, this_result,
     ++					    &flags, &ignore_errno);
     + 		if (r) {
     + 			if (!refs_found++)
     + 				*ref = xstrdup(r);
     + 			if (!warn_ambiguous_refs)
     + 				break;
     +-		} else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
     ++		} else if ((flags & REF_ISSYMREF) &&
     ++			   strcmp(fullref.buf, "HEAD")) {
     + 			warning(_("ignoring dangling symref %s"), fullref.buf);
     +-		} else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
     ++		} else if ((flags & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
     + 			warning(_("ignoring broken ref %s"), fullref.buf);
     + 		}
     + 	}
      @@ refs.c: const char *find_descendant_ref(const char *dirname,
       int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
       {
       	struct object_id oid;
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       	int ignore_errno;
       
     - 	if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
     +-	if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
     +-				    &oid, &flag, &ignore_errno))
     +-		return fn("HEAD", &oid, flag, cb_data);
     ++	if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING, &oid,
     ++				    &flags, &ignore_errno))
     ++		return fn("HEAD", &oid, flags, cb_data);
     + 
     + 	return 0;
     + }
      @@ refs.c: struct do_for_each_ref_help {
       	void *cb_data;
       };
     @@ refs.c: int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
      -				    struct object_id *oid,
      -				    int *flags, int *failure_errno)
      +const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
     -+				    int resolve_flags, struct object_id *oid,
     -+				    unsigned int *flags, int *failure_errno)
     ++				    unsigned int resolve_flags,
     ++				    struct object_id *oid, unsigned int *flags,
     ++				    int *failure_errno)
       {
       	static struct strbuf sb_refname = STRBUF_INIT;
       	struct object_id unused_oid;
     @@ refs.c: int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
       
       	assert(failure_errno);
      @@ refs.c: int refs_init_db(struct strbuf *err)
     + 	return refs->be->init_db(refs, err);
       }
       
     - const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
     +-const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
      -			       struct object_id *oid, int *flags)
     ++const char *resolve_ref_unsafe(const char *refname, unsigned int resolve_flags,
      +			       struct object_id *oid, unsigned int *flags)
       {
       	int ignore_errno;
     @@ refs.c: int resolve_gitlink_ref(const char *submodule, const char *refname,
       {
       	struct ref_store *refs;
      -	int flags;
     -+	unsigned int flags;
     ++	unsigned int unused_flags;
       	int ignore_errno;
       
       	refs = get_submodule_ref_store(submodule);
     +@@ refs.c: int resolve_gitlink_ref(const char *submodule, const char *refname,
     + 	if (!refs)
     + 		return -1;
     + 
     +-	if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags,
     +-				     &ignore_errno) || is_null_oid(oid))
     ++	if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &unused_flags,
     ++				     &ignore_errno) ||
     ++	    is_null_oid(oid))
     + 		return -1;
     + 	return 0;
     + }
      
       ## refs.h ##
      @@ refs.h: struct worktree;
     @@ refs.h: struct worktree;
      -				    int resolve_flags,
      -				    struct object_id *oid,
      -				    int *flags, int *failure_errno);
     -+const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
     -+				    int resolve_flags, struct object_id *oid,
     -+				    unsigned int *flags, int *failure_errno);
     - 
     - const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
     +-
     +-const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
      -			       struct object_id *oid, int *flags);
     -+			       struct object_id *oid, unsigned int *flags);
     - 
     +-
      -char *refs_resolve_refdup(struct ref_store *refs,
      -			  const char *refname, int resolve_flags,
      -			  struct object_id *oid, int *flags);
      -char *resolve_refdup(const char *refname, int resolve_flags,
      -		     struct object_id *oid, int *flags);
     +-
     +-int read_ref_full(const char *refname, int resolve_flags,
     +-		  struct object_id *oid, int *flags);
     ++const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
     ++				    unsigned int resolve_flags,
     ++				    struct object_id *oid, unsigned int *flags,
     ++				    int *failure_errno);
     ++
     ++const char *resolve_ref_unsafe(const char *refname, unsigned int resolve_flags,
     ++			       struct object_id *oid, unsigned int *flags);
     ++
      +char *refs_resolve_refdup(struct ref_store *refs, const char *refname,
     -+			  int resolve_flags, struct object_id *oid,
     ++			  unsigned int resolve_flags, struct object_id *oid,
      +			  unsigned int *flags);
      +char *resolve_refdup(const char *refname, unsigned int resolve_flags,
      +		     struct object_id *oid, unsigned int *flags);
     - 
     --int read_ref_full(const char *refname, int resolve_flags,
     --		  struct object_id *oid, int *flags);
     ++
      +int read_ref_full(const char *refname, unsigned int resolve_flags,
      +		  struct object_id *oid, unsigned int *flags);
       int read_ref(const char *refname, struct object_id *oid);
     @@ refs/files-backend.c: static void loose_fill_ref_dir(struct ref_store *ref_store
       		struct object_id oid;
       		struct stat st;
      -		int flag;
     -+		unsigned int flag;
       
       		if (de->d_name[0] == '.')
       			continue;
     +@@ refs/files-backend.c: static void loose_fill_ref_dir(struct ref_store *ref_store,
     + 							  refname.len));
     + 		} else {
     + 			int ignore_errno;
     +-			if (!refs_resolve_ref_unsafe(&refs->base,
     +-						     refname.buf,
     +-						     RESOLVE_REF_READING,
     +-						     &oid, &flag, &ignore_errno)) {
     ++			unsigned int flags;
     ++			if (!refs_resolve_ref_unsafe(&refs->base, refname.buf,
     ++						     RESOLVE_REF_READING, &oid,
     ++						     &flags, &ignore_errno)) {
     + 				oidclr(&oid);
     +-				flag |= REF_ISBROKEN;
     ++				flags |= REF_ISBROKEN;
     + 			} else if (is_null_oid(&oid)) {
     + 				/*
     + 				 * It is so astronomically unlikely
     +@@ refs/files-backend.c: static void loose_fill_ref_dir(struct ref_store *ref_store,
     + 				 * file to be repo corruption
     + 				 * (probably due to a software bug).
     + 				 */
     +-				flag |= REF_ISBROKEN;
     ++				flags |= REF_ISBROKEN;
     + 			}
     + 
     + 			if (check_refname_format(refname.buf,
     +@@ refs/files-backend.c: static void loose_fill_ref_dir(struct ref_store *ref_store,
     + 				if (!refname_is_safe(refname.buf))
     + 					die("loose refname is dangerous: %s", refname.buf);
     + 				oidclr(&oid);
     +-				flag |= REF_BAD_NAME | REF_ISBROKEN;
     ++				flags |= REF_BAD_NAME | REF_ISBROKEN;
     + 			}
     +-			add_entry_to_dir(dir,
     +-					 create_ref_entry(refname.buf, &oid, flag));
     ++			add_entry_to_dir(dir, create_ref_entry(refname.buf,
     ++							       &oid, flags));
     + 		}
     + 		strbuf_setlen(&refname, dirnamelen);
     + 		strbuf_setlen(&path, path_baselen);
      @@ refs/files-backend.c: static int files_copy_or_rename_ref(struct ref_store *ref_store,
       	struct files_ref_store *refs =
       		files_downcast(ref_store, REF_STORE_WRITE, "rename_ref");
       	struct object_id orig_oid;
      -	int flag = 0, logmoved = 0;
      +	int logmoved = 0;
     -+	unsigned int flag = 0;
     ++	unsigned int flags = 0;
       	struct ref_lock *lock;
       	struct stat loginfo;
       	struct strbuf sb_oldref = STRBUF_INIT;
     +@@ refs/files-backend.c: static int files_copy_or_rename_ref(struct ref_store *ref_store,
     + 	}
     + 
     + 	if (!refs_resolve_ref_unsafe(&refs->base, oldrefname,
     +-				     RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
     +-				     &orig_oid, &flag, &ignore_errno)) {
     ++				     RESOLVE_REF_READING |
     ++					     RESOLVE_REF_NO_RECURSE,
     ++				     &orig_oid, &flags, &ignore_errno)) {
     + 		ret = error("refname %s not found", oldrefname);
     + 		goto out;
     + 	}
     + 
     +-	if (flag & REF_ISSYMREF) {
     ++	if (flags & REF_ISSYMREF) {
     + 		if (copy)
     + 			ret = error("refname %s is a symbolic ref, copying it is not supported",
     + 				    oldrefname);
     +@@ refs/files-backend.c: static int files_copy_or_rename_ref(struct ref_store *ref_store,
     + 		goto rollbacklog;
     + 	}
     + 
     +-	flag = log_all_ref_updates;
     ++	flags = log_all_ref_updates;
     + 	log_all_ref_updates = LOG_REFS_NONE;
     + 	if (write_ref_to_lockfile(lock, &orig_oid, 0, &err) ||
     + 	    commit_ref_update(refs, lock, &orig_oid, NULL, &err)) {
     + 		error("unable to write current sha1 into %s: %s", oldrefname, err.buf);
     + 		strbuf_release(&err);
     + 	}
     +-	log_all_ref_updates = flag;
     ++	log_all_ref_updates = flags;
     + 
     +  rollbacklog:
     + 	if (logmoved && rename(sb_newref.buf, sb_oldref.buf))
     +@@ refs/files-backend.c: static int log_ref_write_fd(int fd, const struct object_id *old_oid,
     + }
     + 
     + static int files_log_ref_write(struct files_ref_store *refs,
     +-			       const char *refname, const struct object_id *old_oid,
     ++			       const char *refname,
     ++			       const struct object_id *old_oid,
     + 			       const struct object_id *new_oid, const char *msg,
     +-			       int flags, struct strbuf *err)
     ++			       unsigned int flags, struct strbuf *err)
     + {
     + 	int logfd, result;
     + 
      @@ refs/files-backend.c: static int commit_ref_update(struct files_ref_store *refs,
       		 * check with HEAD only which should cover 99% of all usage
       		 * scenarios (even 100% of the default ones).
       		 */
      -		int head_flag;
     -+		unsigned int head_flag;
     ++		unsigned int head_flags;
       		const char *head_ref;
       		int ignore_errno;
       
     + 		head_ref = refs_resolve_ref_unsafe(&refs->base, "HEAD",
     +-						   RESOLVE_REF_READING,
     +-						   NULL, &head_flag,
     +-						   &ignore_errno);
     +-		if (head_ref && (head_flag & REF_ISSYMREF) &&
     ++						   RESOLVE_REF_READING, NULL,
     ++						   &head_flags, &ignore_errno);
     ++		if (head_ref && (head_flags & REF_ISSYMREF) &&
     + 		    !strcmp(head_ref, lock->ref_name)) {
     + 			struct strbuf log_err = STRBUF_INIT;
     + 			if (files_log_ref_write(refs, "HEAD",
      @@ refs/files-backend.c: static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
       	int ignore_errno;
       
     @@ refs/files-backend.c: static int files_transaction_abort(struct ref_store *ref_s
      -static int ref_present(const char *refname,
      -		       const struct object_id *oid, int flags, void *cb_data)
      +static int ref_present(const char *refname, const struct object_id *oid,
     -+		       unsigned int flags, void *cb_data)
     ++		       unsigned int unused_flags, void *cb_data)
       {
       	struct string_list *affected_refnames = cb_data;
       
     @@ remote.c: static void alias_all_urls(struct remote_state *remote_state)
       static void read_config(struct repository *repo)
       {
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       
       	if (repo->remote_state->initialized)
       		return;
     +@@ remote.c: static void read_config(struct repository *repo)
     + 	if (startup_info->have_repository) {
     + 		int ignore_errno;
     + 		const char *head_ref = refs_resolve_ref_unsafe(
     +-			get_main_ref_store(repo), "HEAD", 0, NULL, &flag, &ignore_errno);
     +-		if (head_ref && (flag & REF_ISSYMREF) &&
     ++			get_main_ref_store(repo), "HEAD", 0, NULL, &flags,
     ++			&ignore_errno);
     ++		if (head_ref && (flags & REF_ISSYMREF) &&
     + 		    skip_prefix(head_ref, "refs/heads/", &head_ref)) {
     + 			repo->remote_state->current_branch = make_branch(
     + 				repo->remote_state, head_ref, strlen(head_ref));
      @@ remote.c: static int match_explicit(struct ref *src, struct ref *dst,
       		return -1;
       
       	if (!dst_value) {
      -		int flag;
     -+		unsigned int flag;
     - 
     - 		dst_value = resolve_ref_unsafe(matched_src->name,
     - 					       RESOLVE_REF_READING,
     +-
     +-		dst_value = resolve_ref_unsafe(matched_src->name,
     +-					       RESOLVE_REF_READING,
     +-					       NULL, &flag);
     +-		if (!dst_value ||
     +-		    ((flag & REF_ISSYMREF) &&
     +-		     !starts_with(dst_value, "refs/heads/")))
     ++		unsigned int flags;
     ++
     ++		dst_value = resolve_ref_unsafe(
     ++			matched_src->name, RESOLVE_REF_READING, NULL, &flags);
     ++		if (!dst_value || ((flags & REF_ISSYMREF) &&
     ++				   !starts_with(dst_value, "refs/heads/")))
     + 			die(_("%s cannot be resolved to branch"),
     + 			    matched_src->name);
     + 	}
      @@ remote.c: const char *branch_get_push(struct branch *branch, struct strbuf *err)
       
       static int ignore_symref_update(const char *refname)
       {
      -	int flag;
     -+	unsigned int flag;
     ++	unsigned int flags;
       
     - 	if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
     +-	if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
     ++	if (!resolve_ref_unsafe(refname, 0, NULL, &flags))
       		return 0; /* non-existing refs are OK */
     +-	return (flag & REF_ISSYMREF);
     ++	return (flags & REF_ISSYMREF);
     + }
     + 
     + /*
      @@ remote.c: int format_tracking_info(struct branch *branch, struct strbuf *sb,
       }
       
     @@ replace-object.c
       
      -static int register_replace_ref(struct repository *r,
      -				const char *refname,
     --				const struct object_id *oid,
     --				int flag, void *cb_data)
      +static int register_replace_ref(struct repository *r, const char *refname,
     -+				const struct object_id *oid, unsigned int flag,
     -+				void *cb_data)
     + 				const struct object_id *oid,
     +-				int flag, void *cb_data)
     ++				unsigned int unused_flags, void *cb_data)
       {
       	/* Get sha1 from refname */
       	const char *slash = strrchr(refname, '/');
     @@ revision.c: int ref_excluded(struct string_list *ref_excludes, const char *path)
       
       static int handle_one_ref(const char *path, const struct object_id *oid,
      -			  int flag, void *cb_data)
     -+			  unsigned int flag, void *cb_data)
     ++			  unsigned int unused_flags, void *cb_data)
       {
       	struct all_refs_cb *cb = cb_data;
       	struct object *object;
      @@ revision.c: static int handle_one_reflog_ent(struct object_id *ooid, struct object_id *noid,
     - }
       
       static int handle_one_reflog(const char *refname_in_wt,
     --			     const struct object_id *oid,
     + 			     const struct object_id *oid,
      -			     int flag, void *cb_data)
     -+			     const struct object_id *oid, unsigned int flag,
     -+			     void *cb_data)
     ++			     unsigned int unused_flags, void *cb_data)
       {
       	struct all_refs_cb *cb = cb_data;
       	struct strbuf refname = STRBUF_INIT;
     @@ server-info.c: out:
       
       static int add_info_ref(const char *path, const struct object_id *oid,
      -			int flag, void *cb_data)
     -+			unsigned int flag, void *cb_data)
     ++			unsigned int unused_flags, void *cb_data)
       {
       	struct update_info_ctx *uic = cb_data;
       	struct object *o = parse_object(the_repository, oid);
     @@ shallow.c: static void paint_down(struct paint_info *info, const struct object_i
       
       static int mark_uninteresting(const char *refname, const struct object_id *oid,
      -			      int flags, void *cb_data)
     -+			      unsigned int flags, void *cb_data)
     ++			      unsigned int unused_flags, void *cb_data)
       {
       	struct commit *commit = lookup_commit_reference_gently(the_repository,
       							       oid, 1);
     @@ shallow.c: struct commit_array {
       
       static int add_ref(const char *refname, const struct object_id *oid,
      -		   int flags, void *cb_data)
     -+		   unsigned int flags, void *cb_data)
     ++		   unsigned int unused_flags, void *cb_data)
       {
       	struct commit_array *ca = cb_data;
       	ALLOC_GROW(ca->commits, ca->nr + 1, ca->alloc);
     @@ submodule.c: static void free_submodules_oids(struct string_list *submodules)
       
       static int has_remote(const char *refname, const struct object_id *oid,
      -		      int flags, void *cb_data)
     -+		      unsigned int flags, void *cb_data)
     ++		      unsigned int unused_flags, void *cb_data)
       {
       	return 1;
       }
     @@ submodule.c: int push_unpushed_submodules(struct repository *r,
       
       static int append_oid_to_array(const char *ref, const struct object_id *oid,
      -			       int flags, void *data)
     -+			       unsigned int flags, void *data)
     ++			       unsigned int unused_flags, void *data)
       {
       	struct oid_array *array = data;
       	oid_array_append(array, oid);
     @@ transport-helper.c: static int push_refs_with_export(struct transport *transport
       				if (!ref->deletion) {
       					const char *name;
      -					int flag;
     -+					unsigned int flag;
     ++					unsigned int ref_flags;
       
       					/* Follow symbolic refs (mainly for HEAD). */
     - 					name = resolve_ref_unsafe(ref->peer_ref->name,
     +-					name = resolve_ref_unsafe(ref->peer_ref->name,
     +-								  RESOLVE_REF_READING,
     +-								  &oid, &flag);
     +-					if (!name || !(flag & REF_ISSYMREF))
     ++					name = resolve_ref_unsafe(
     ++						ref->peer_ref->name,
     ++						RESOLVE_REF_READING, &oid,
     ++						&ref_flags);
     ++					if (!name ||
     ++					    !(ref_flags & REF_ISSYMREF))
     + 						name = ref->peer_ref->name;
     + 
     + 					strbuf_addf(&buf, "%s:%s", name, ref->name);
      
       ## transport.c ##
      @@ transport.c: static void set_upstreams(struct transport *transport, struct ref *refs,
     @@ transport.c: static void set_upstreams(struct transport *transport, struct ref *
       		const char *tmp;
       		const char *remotename;
      -		int flag = 0;
     -+		unsigned int flag = 0;
     ++		unsigned int ref_flags = 0;
       		/*
       		 * Check suitability for tracking. Must be successful /
       		 * already up-to-date ref create/modify (not delete).
     +@@ transport.c: static void set_upstreams(struct transport *transport, struct ref *refs,
     + 		/* Follow symbolic refs (mainly for HEAD). */
     + 		localname = ref->peer_ref->name;
     + 		remotename = ref->name;
     +-		tmp = resolve_ref_unsafe(localname, RESOLVE_REF_READING,
     +-					 NULL, &flag);
     +-		if (tmp && flag & REF_ISSYMREF &&
     +-			starts_with(tmp, "refs/heads/"))
     ++		tmp = resolve_ref_unsafe(localname, RESOLVE_REF_READING, NULL,
     ++					 &ref_flags);
     ++		if (tmp && ref_flags & REF_ISSYMREF &&
     ++		    starts_with(tmp, "refs/heads/"))
     + 			localname = tmp;
     + 
     + 		/* Both source and destination must be local branches. */
      
       ## upload-pack.c ##
      @@ upload-pack.c: static void send_unshallow(struct upload_pack_data *data)
     @@ upload-pack.c: static int mark_our_ref(const char *refname, const char *refname_
       
       static int check_ref(const char *refname_full, const struct object_id *oid,
      -		     int flag, void *cb_data)
     -+		     unsigned int flag, void *cb_data)
     ++		     unsigned int unused_flags, void *cb_data)
       {
       	const char *refname = strip_namespace(refname_full);
       
     @@ upload-pack.c: static void format_session_id(struct strbuf *buf, struct upload_p
       
       static int send_ref(const char *refname, const struct object_id *oid,
      -		    int flag, void *cb_data)
     -+		    unsigned int flag, void *cb_data)
     ++		    unsigned int unused_flags, void *cb_data)
       {
       	static const char *capabilities = "multi_ack thin-pack side-band"
       		" side-band-64k ofs-delta shallow deepen-since deepen-not"
     @@ upload-pack.c: static int send_ref(const char *refname, const struct object_id *
       
       static int find_symref(const char *refname, const struct object_id *oid,
      -		       int flag, void *cb_data)
     -+		       unsigned int flag, void *cb_data)
     ++		       unsigned int flags, void *cb_data)
       {
       	const char *symref_target;
       	struct string_list_item *item;
     + 
     +-	if ((flag & REF_ISSYMREF) == 0)
     ++	if ((flags & REF_ISSYMREF) == 0)
     + 		return 0;
     +-	symref_target = resolve_ref_unsafe(refname, 0, NULL, &flag);
     +-	if (!symref_target || (flag & REF_ISSYMREF) == 0)
     ++	symref_target = resolve_ref_unsafe(refname, 0, NULL, &flags);
     ++	if (!symref_target || (flags & REF_ISSYMREF) == 0)
     + 		die("'%s' is a symref but it is not?", refname);
     + 	item = string_list_append(cb_data, strip_namespace(refname));
     + 	item->util = xstrdup(strip_namespace(symref_target));
      
       ## walker.c ##
      @@ walker.c: static int interpret_target(struct walker *walker, char *target, struct object_i
     @@ walker.c: static int interpret_target(struct walker *walker, char *target, struc
       
       static int mark_complete(const char *path, const struct object_id *oid,
      -			 int flag, void *cb_data)
     -+			 unsigned int flag, void *cb_data)
     ++			 unsigned int unused_flags, void *cb_data)
       {
       	struct commit *commit = lookup_commit_reference_gently(the_repository,
       							       oid, 1);
     @@ worktree.c: int other_head_refs(each_ref_fn fn, void *cb_data)
       		struct worktree *wt = *p;
       		struct object_id oid;
      -		int flag;
     -+		unsigned int flag;
     ++		unsigned int flags;
       		int ignore_errno;
       
       		if (wt->is_current)
     +@@ worktree.c: int other_head_refs(each_ref_fn fn, void *cb_data)
     + 		strbuf_reset(&refname);
     + 		strbuf_worktree_ref(wt, &refname, "HEAD");
     + 		if (refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
     +-					    refname.buf,
     +-					    RESOLVE_REF_READING,
     +-					    &oid, &flag, &ignore_errno))
     +-			ret = fn(refname.buf, &oid, flag, cb_data);
     ++					    refname.buf, RESOLVE_REF_READING,
     ++					    &oid, &flags, &ignore_errno))
     ++			ret = fn(refname.buf, &oid, flags, cb_data);
     + 		if (ret)
     + 			break;
     + 	}

 bisect.c                    |  4 +-
 builtin/bisect--helper.c    |  9 +++--
 builtin/branch.c            |  4 +-
 builtin/checkout.c          | 24 ++++++-----
 builtin/describe.c          |  3 +-
 builtin/fetch.c             | 10 ++---
 builtin/fsck.c              |  4 +-
 builtin/gc.c                |  5 +--
 builtin/name-rev.c          |  3 +-
 builtin/pack-objects.c      | 11 ++---
 builtin/rebase.c            | 10 +++--
 builtin/receive-pack.c      | 13 +++---
 builtin/reflog.c            |  5 ++-
 builtin/remote.c            | 23 ++++++-----
 builtin/repack.c            |  2 +-
 builtin/replace.c           |  2 +-
 builtin/rev-parse.c         |  6 ++-
 builtin/show-branch.c       | 12 +++---
 builtin/show-ref.c          |  4 +-
 builtin/stash.c             |  2 +-
 builtin/submodule--helper.c |  4 +-
 builtin/symbolic-ref.c      |  6 +--
 bundle.c                    |  8 ++--
 commit-graph.c              |  5 +--
 config.c                    |  2 +-
 delta-islands.c             |  2 +-
 fetch-pack.c                |  7 ++--
 help.c                      |  2 +-
 http-backend.c              |  6 +--
 log-tree.c                  |  4 +-
 ls-refs.c                   | 18 ++++-----
 midx.c                      |  7 ++--
 negotiator/default.c        |  2 +-
 negotiator/skipping.c       |  2 +-
 notes.c                     |  5 ++-
 object-name.c               |  2 +-
 reachable.c                 |  4 +-
 ref-filter.c                |  9 +++--
 refs.c                      | 80 ++++++++++++++++++-------------------
 refs.h                      | 47 ++++++++++------------
 refs/files-backend.c        | 57 +++++++++++++-------------
 remote.c                    | 31 +++++++-------
 replace-object.c            |  5 +--
 revision.c                  |  6 +--
 server-info.c               |  2 +-
 shallow.c                   |  4 +-
 submodule.c                 |  4 +-
 t/helper/test-ref-store.c   |  4 +-
 transport-helper.c          | 12 +++---
 transport.c                 | 10 ++---
 upload-pack.c               | 14 +++----
 walker.c                    |  2 +-
 worktree.c                  | 13 +++---
 53 files changed, 276 insertions(+), 266 deletions(-)

diff --git a/bisect.c b/bisect.c
index 888949fba6b..64807d2996b 100644
--- a/bisect.c
+++ b/bisect.c
@@ -441,7 +441,7 @@ void find_bisection(struct commit_list **commit_list, int *reaches,
 }
 
 static int register_ref(const char *refname, const struct object_id *oid,
-			int flags, void *cb_data)
+			unsigned int unused_flags, void *cb_data)
 {
 	struct strbuf good_prefix = STRBUF_INIT;
 	strbuf_addstr(&good_prefix, term_good);
@@ -1146,7 +1146,7 @@ int estimate_bisect_steps(int all)
 }
 
 static int mark_for_removal(const char *refname, const struct object_id *oid,
-			    int flag, void *cb_data)
+			    unsigned int unused_flags, void *cb_data)
 {
 	struct string_list *refs = cb_data;
 	char *ref = xstrfmt("refs/bisect%s", refname);
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index 28a2e6a5750..ec460308bee 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -330,7 +330,7 @@ static int check_and_set_terms(struct bisect_terms *terms, const char *cmd)
 }
 
 static int mark_good(const char *refname, const struct object_id *oid,
-		     int flag, void *cb_data)
+		     unsigned int unused_flags, void *cb_data)
 {
 	int *m_good = (int *)cb_data;
 	*m_good = 0;
@@ -477,7 +477,7 @@ finish:
 }
 
 static int add_bisect_ref(const char *refname, const struct object_id *oid,
-			  int flags, void *cb)
+			  unsigned int unused_flags, void *cb)
 {
 	struct add_bisect_ref_data *data = cb;
 
@@ -617,7 +617,8 @@ static enum bisect_error bisect_start(struct bisect_terms *terms, const char **a
 	int no_checkout = 0;
 	int first_parent_only = 0;
 	int i, has_double_dash = 0, must_write_terms = 0, bad_seen = 0;
-	int flags, pathspec_pos;
+	int pathspec_pos;
+	unsigned int unused_flags;
 	enum bisect_error res = BISECT_OK;
 	struct string_list revs = STRING_LIST_INIT_DUP;
 	struct string_list states = STRING_LIST_INIT_DUP;
@@ -707,7 +708,7 @@ static enum bisect_error bisect_start(struct bisect_terms *terms, const char **a
 	/*
 	 * Verify HEAD
 	 */
-	head = resolve_ref_unsafe("HEAD", 0, &head_oid, &flags);
+	head = resolve_ref_unsafe("HEAD", 0, &head_oid, &unused_flags);
 	if (!head)
 		if (get_oid("HEAD", &head_oid))
 			return error(_("bad HEAD - I need a HEAD"));
diff --git a/builtin/branch.c b/builtin/branch.c
index 4ce2a247542..542eb2e4d50 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -234,7 +234,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 
 	for (i = 0; i < argc; i++, strbuf_reset(&bname)) {
 		char *target = NULL;
-		int flags = 0;
+		unsigned int flags = 0;
 
 		strbuf_branchname(&bname, argv[i], allowed_interpret);
 		free(name);
@@ -469,7 +469,7 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
 
 static void print_current_branch_name(void)
 {
-	int flags;
+	unsigned int flags;
 	const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
 	const char *shortname;
 	if (!refname)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index cc804ba8e1e..c964154fb4d 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -968,7 +968,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
 
 static int add_pending_uninteresting_ref(const char *refname,
 					 const struct object_id *oid,
-					 int flags, void *cb_data)
+					 unsigned int unused_flags,
+					 void *cb_data)
 {
 	add_pending_oid(cb_data, refname, oid, UNINTERESTING);
 	return 0;
@@ -1077,16 +1078,17 @@ static int switch_branches(const struct checkout_opts *opts,
 	int ret = 0;
 	struct branch_info old_branch_info = { 0 };
 	struct object_id rev;
-	int flag, writeout_error = 0;
+	int writeout_error = 0;
+	unsigned int flags;
 	int do_merge = 1;
 
 	trace2_cmd_mode("branch");
 
 	memset(&old_branch_info, 0, sizeof(old_branch_info));
-	old_branch_info.path = resolve_refdup("HEAD", 0, &rev, &flag);
+	old_branch_info.path = resolve_refdup("HEAD", 0, &rev, &flags);
 	if (old_branch_info.path)
 		old_branch_info.commit = lookup_commit_reference_gently(the_repository, &rev, 1);
-	if (!(flag & REF_ISSYMREF))
+	if (!(flags & REF_ISSYMREF))
 		FREE_AND_NULL(old_branch_info.path);
 
 	if (old_branch_info.path) {
@@ -1503,20 +1505,20 @@ static int checkout_branch(struct checkout_opts *opts,
 
 	if (new_branch_info->path && !opts->force_detach && !opts->new_branch &&
 	    !opts->ignore_other_worktrees) {
-		int flag;
-		char *head_ref = resolve_refdup("HEAD", 0, NULL, &flag);
-		if (head_ref &&
-		    (!(flag & REF_ISSYMREF) || strcmp(head_ref, new_branch_info->path)))
+		unsigned int flags;
+		char *head_ref = resolve_refdup("HEAD", 0, NULL, &flags);
+		if (head_ref && (!(flags & REF_ISSYMREF) ||
+				 strcmp(head_ref, new_branch_info->path)))
 			die_if_checked_out(new_branch_info->path, 1);
 		free(head_ref);
 	}
 
 	if (!new_branch_info->commit && opts->new_branch) {
 		struct object_id rev;
-		int flag;
+		unsigned int flags;
 
-		if (!read_ref_full("HEAD", 0, &rev, &flag) &&
-		    (flag & REF_ISSYMREF) && is_null_oid(&rev))
+		if (!read_ref_full("HEAD", 0, &rev, &flags) &&
+		    (flags & REF_ISSYMREF) && is_null_oid(&rev))
 			return switch_unborn_to_new_branch(opts);
 	}
 	return switch_branches(opts, new_branch_info);
diff --git a/builtin/describe.c b/builtin/describe.c
index 42159cd26bd..c7b24390ca6 100644
--- a/builtin/describe.c
+++ b/builtin/describe.c
@@ -140,7 +140,8 @@ static void add_to_known_names(const char *path,
 	}
 }
 
-static int get_name(const char *path, const struct object_id *oid, int flag, void *cb_data)
+static int get_name(const char *path, const struct object_id *oid,
+		    unsigned int unused_flags, void *cb_data)
 {
 	int is_tag = 0;
 	struct object_id peeled;
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 5f06b21f8e9..56b53ba3fff 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -323,9 +323,8 @@ static struct refname_hash_entry *refname_hash_add(struct hashmap *map,
 	return ent;
 }
 
-static int add_one_refname(const char *refname,
-			   const struct object_id *oid,
-			   int flag, void *cbdata)
+static int add_one_refname(const char *refname, const struct object_id *oid,
+			   unsigned int unused_flags, void *cbdata)
 {
 	struct hashmap *refname_map = cbdata;
 
@@ -1429,9 +1428,8 @@ static void set_option(struct transport *transport, const char *name, const char
 			name, transport->url);
 }
 
-
-static int add_oid(const char *refname, const struct object_id *oid, int flags,
-		   void *cb_data)
+static int add_oid(const char *refname, const struct object_id *oid,
+		   unsigned int unused_flags, void *cb_data)
 {
 	struct oid_array *oids = cb_data;
 
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 9e54892311d..c52bd1843d1 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -502,7 +502,7 @@ static int fsck_handle_reflog_ent(struct object_id *ooid, struct object_id *noid
 }
 
 static int fsck_handle_reflog(const char *logname, const struct object_id *oid,
-			      int flag, void *cb_data)
+			      unsigned int unused_flags, void *cb_data)
 {
 	struct strbuf refname = STRBUF_INIT;
 
@@ -513,7 +513,7 @@ static int fsck_handle_reflog(const char *logname, const struct object_id *oid,
 }
 
 static int fsck_handle_ref(const char *refname, const struct object_id *oid,
-			   int flag, void *cb_data)
+			   unsigned int unused_flags, void *cb_data)
 {
 	struct object *obj;
 
diff --git a/builtin/gc.c b/builtin/gc.c
index 8e60ef1eaba..983196dae26 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -768,9 +768,8 @@ struct cg_auto_data {
 	int limit;
 };
 
-static int dfs_on_ref(const char *refname,
-		      const struct object_id *oid, int flags,
-		      void *cb_data)
+static int dfs_on_ref(const char *refname, const struct object_id *oid,
+		      unsigned int unused_flags, void *cb_data)
 {
 	struct cg_auto_data *data = (struct cg_auto_data *)cb_data;
 	int result = 0;
diff --git a/builtin/name-rev.c b/builtin/name-rev.c
index 27f60153a6c..3a89589645a 100644
--- a/builtin/name-rev.c
+++ b/builtin/name-rev.c
@@ -305,7 +305,8 @@ static int cmp_by_tag_and_age(const void *a_, const void *b_)
 	return a->taggerdate != b->taggerdate;
 }
 
-static int name_ref(const char *path, const struct object_id *oid, int flags, void *cb_data)
+static int name_ref(const char *path, const struct object_id *oid,
+		    unsigned int unused_flags, void *cb_data)
 {
 	struct object *o = parse_object(the_repository, oid);
 	struct name_ref_data *data = cb_data;
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index ba2006f2212..86bc62e68ed 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -758,8 +758,8 @@ static enum write_one_status write_one(struct hashfile *f,
 	return WRITE_ONE_WRITTEN;
 }
 
-static int mark_tagged(const char *path, const struct object_id *oid, int flag,
-		       void *cb_data)
+static int mark_tagged(const char *path, const struct object_id *oid,
+		       unsigned int unused_flags, void *cb_data)
 {
 	struct object_id peeled;
 	struct object_entry *entry = packlist_find(&to_pack, oid);
@@ -3012,7 +3012,8 @@ static void add_tag_chain(const struct object_id *oid)
 	}
 }
 
-static int add_ref_tag(const char *tag, const struct object_id *oid, int flag, void *cb_data)
+static int add_ref_tag(const char *tag, const struct object_id *oid,
+		       unsigned int unused_flags, void *cb_data)
 {
 	struct object_id peeled;
 
@@ -3684,8 +3685,8 @@ static void record_recent_commit(struct commit *commit, void *data)
 }
 
 static int mark_bitmap_preferred_tip(const char *refname,
-				     const struct object_id *oid, int flags,
-				     void *_data)
+				     const struct object_id *oid,
+				     unsigned int flags, void *_data)
 {
 	struct object_id peeled;
 	struct object *object;
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 36490d06c8a..01021d6e1a8 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -999,7 +999,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 {
 	struct rebase_options options = REBASE_OPTIONS_INIT;
 	const char *branch_name;
-	int ret, flags, total_argc, in_progress = 0;
+	int ret, total_argc, in_progress = 0;
 	int keep_base = 0;
 	int ok_to_skip_pre_rebase = 0;
 	struct strbuf msg = STRBUF_INIT;
@@ -1611,6 +1611,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		}
 	} else if (argc == 0) {
 		/* Do not need to switch branches, we are already on it. */
+		unsigned int flags;
 		options.head_name =
 			xstrdup_or_null(resolve_ref_unsafe("HEAD", 0, NULL,
 					 &flags));
@@ -1668,7 +1669,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 	if (can_fast_forward(options.onto, options.upstream, options.restrict_revision,
 		    &options.orig_head, &merge_base) &&
 	    allow_preemptive_ff) {
-		int flag;
+		unsigned int unused_flags;
 
 		if (!(options.flags & REBASE_FORCE)) {
 			/* Lazily switch to the target branch if needed... */
@@ -1693,7 +1694,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 			if (!(options.flags & REBASE_NO_QUIET))
 				; /* be quiet */
 			else if (!strcmp(branch_name, "HEAD") &&
-				 resolve_ref_unsafe("HEAD", 0, NULL, &flag))
+				 resolve_ref_unsafe("HEAD", 0, NULL,
+						    &unused_flags))
 				puts(_("HEAD is up to date."));
 			else
 				printf(_("Current branch %s is up to date.\n"),
@@ -1703,7 +1705,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 		} else if (!(options.flags & REBASE_NO_QUIET))
 			; /* be quiet */
 		else if (!strcmp(branch_name, "HEAD") &&
-			 resolve_ref_unsafe("HEAD", 0, NULL, &flag))
+			 resolve_ref_unsafe("HEAD", 0, NULL, &unused_flags))
 			puts(_("HEAD is up to date, rebase forced."));
 		else
 			printf(_("Current branch %s is up to date, rebase "
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 9f4a0b816cf..aa000ada17f 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -291,7 +291,7 @@ static void show_ref(const char *path, const struct object_id *oid)
 }
 
 static int show_ref_cb(const char *path_full, const struct object_id *oid,
-		       int flag, void *data)
+		       unsigned int unused_flags, void *data)
 {
 	struct oidset *seen = data;
 	const char *path = strip_namespace(path_full);
@@ -1655,12 +1655,13 @@ static void run_update_post_hook(struct command *commands)
 
 static void check_aliased_update_internal(struct command *cmd,
 					  struct string_list *list,
-					  const char *dst_name, int flag)
+					  const char *dst_name,
+					  unsigned int flags)
 {
 	struct string_list_item *item;
 	struct command *dst_cmd;
 
-	if (!(flag & REF_ISSYMREF))
+	if (!(flags & REF_ISSYMREF))
 		return;
 
 	if (!dst_name) {
@@ -1701,11 +1702,11 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
 {
 	struct strbuf buf = STRBUF_INIT;
 	const char *dst_name;
-	int flag;
+	unsigned int flags;
 
 	strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
-	dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
-	check_aliased_update_internal(cmd, list, dst_name, flag);
+	dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flags);
+	check_aliased_update_internal(cmd, list, dst_name, flags);
 	strbuf_release(&buf);
 }
 
diff --git a/builtin/reflog.c b/builtin/reflog.c
index a4b1dd27e13..ddb5b6fb788 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -343,7 +343,7 @@ static int should_expire_reflog_ent_verbose(struct object_id *ooid,
 }
 
 static int push_tip_to_list(const char *refname, const struct object_id *oid,
-			    int flags, void *cb_data)
+			    unsigned int flags, void *cb_data)
 {
 	struct commit_list **list = cb_data;
 	struct commit *tip_commit;
@@ -424,7 +424,8 @@ static void reflog_expiry_cleanup(void *cb_data)
 	}
 }
 
-static int collect_reflog(const char *ref, const struct object_id *oid, int unused, void *cb_data)
+static int collect_reflog(const char *ref, const struct object_id *oid,
+			  unsigned int unused_flags, void *cb_data)
 {
 	struct worktree_reflogs *cb = cb_data;
 	struct worktree *worktree = cb->worktree;
diff --git a/builtin/remote.c b/builtin/remote.c
index 299c466116d..6e509e276cd 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -533,7 +533,8 @@ struct branches_for_remote {
 };
 
 static int add_branch_for_removal(const char *refname,
-	const struct object_id *oid, int flags, void *cb_data)
+				  const struct object_id *oid,
+				  unsigned int unused_flags, void *cb_data)
 {
 	struct branches_for_remote *branches = cb_data;
 	struct refspec_item refspec;
@@ -574,20 +575,21 @@ struct rename_info {
 };
 
 static int read_remote_branches(const char *refname,
-	const struct object_id *oid, int flags, void *cb_data)
+				const struct object_id *oid,
+				unsigned int unused_flags, void *cb_data)
 {
 	struct rename_info *rename = cb_data;
 	struct strbuf buf = STRBUF_INIT;
 	struct string_list_item *item;
-	int flag;
 	const char *symref;
 
 	strbuf_addf(&buf, "refs/remotes/%s/", rename->old_name);
 	if (starts_with(refname, buf.buf)) {
+		unsigned int flags;
 		item = string_list_append(rename->remote_branches, refname);
-		symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING,
-					    NULL, &flag);
-		if (symref && (flag & REF_ISSYMREF))
+		symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING, NULL,
+					    &flags);
+		if (symref && (flags & REF_ISSYMREF))
 			item->util = xstrdup(symref);
 		else
 			item->util = NULL;
@@ -766,10 +768,10 @@ static int mv(int argc, const char **argv)
 	for_each_ref(read_remote_branches, &rename);
 	for (i = 0; i < remote_branches.nr; i++) {
 		struct string_list_item *item = remote_branches.items + i;
-		int flag = 0;
+		unsigned int flags = 0;
 
-		read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flag);
-		if (!(flag & REF_ISSYMREF))
+		read_ref_full(item->string, RESOLVE_REF_READING, NULL, &flags);
+		if (!(flags & REF_ISSYMREF))
 			continue;
 		if (delete_ref(NULL, item->string, NULL, REF_NO_DEREF))
 			die(_("deleting '%s' failed"), item->string);
@@ -923,7 +925,8 @@ static void free_remote_ref_states(struct ref_states *states)
 }
 
 static int append_ref_to_tracked_list(const char *refname,
-	const struct object_id *oid, int flags, void *cb_data)
+				      const struct object_id *oid,
+				      unsigned int flags, void *cb_data)
 {
 	struct ref_states *states = cb_data;
 	struct refspec_item refspec;
diff --git a/builtin/repack.c b/builtin/repack.c
index da1e364a756..f995f829970 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -465,7 +465,7 @@ struct midx_snapshot_ref_data {
 
 static int midx_snapshot_ref_one(const char *refname,
 				 const struct object_id *oid,
-				 int flag, void *_data)
+				 unsigned int unused_flag, void *_data)
 {
 	struct midx_snapshot_ref_data *data = _data;
 	struct object_id peeled;
diff --git a/builtin/replace.c b/builtin/replace.c
index 6ff1734d587..af35b9f27ad 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -41,7 +41,7 @@ struct show_data {
 
 static int show_reference(struct repository *r, const char *refname,
 			  const struct object_id *oid,
-			  int flag, void *cb_data)
+			  unsigned int unused_flags, void *cb_data)
 {
 	struct show_data *data = cb_data;
 
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index 8480a59f573..46f09c25db6 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -195,7 +195,8 @@ static int show_default(void)
 	return 0;
 }
 
-static int show_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)
+static int show_reference(const char *refname, const struct object_id *oid,
+			  unsigned int unused_flags, void *cb_data)
 {
 	if (ref_excluded(ref_excludes, refname))
 		return 0;
@@ -203,7 +204,8 @@ static int show_reference(const char *refname, const struct object_id *oid, int
 	return 0;
 }
 
-static int anti_reference(const char *refname, const struct object_id *oid, int flag, void *cb_data)
+static int anti_reference(const char *refname, const struct object_id *oid,
+			  unsigned int unused_flags, void *cb_data)
 {
 	show_rev(REVERSED, oid, refname);
 	return 0;
diff --git a/builtin/show-branch.c b/builtin/show-branch.c
index e12c5e80e3e..8c392afcd74 100644
--- a/builtin/show-branch.c
+++ b/builtin/show-branch.c
@@ -403,7 +403,7 @@ static int append_ref(const char *refname, const struct object_id *oid,
 }
 
 static int append_head_ref(const char *refname, const struct object_id *oid,
-			   int flag, void *cb_data)
+			   unsigned int unused_flags, void *cb_data)
 {
 	struct object_id tmp;
 	int ofs = 11;
@@ -418,7 +418,7 @@ static int append_head_ref(const char *refname, const struct object_id *oid,
 }
 
 static int append_remote_ref(const char *refname, const struct object_id *oid,
-			     int flag, void *cb_data)
+			     unsigned int unused_flags, void *cb_data)
 {
 	struct object_id tmp;
 	int ofs = 13;
@@ -433,7 +433,7 @@ static int append_remote_ref(const char *refname, const struct object_id *oid,
 }
 
 static int append_tag_ref(const char *refname, const struct object_id *oid,
-			  int flag, void *cb_data)
+			  int unused_flags, void *cb_data)
 {
 	if (!starts_with(refname, "refs/tags/"))
 		return 0;
@@ -444,7 +444,7 @@ static const char *match_ref_pattern = NULL;
 static int match_ref_slash = 0;
 
 static int append_matching_ref(const char *refname, const struct object_id *oid,
-			       int flag, void *cb_data)
+			       unsigned int flags, void *cb_data)
 {
 	/* we want to allow pattern hold/<asterisk> to show all
 	 * branches under refs/heads/hold/, and v0.99.9? to show
@@ -460,9 +460,9 @@ static int append_matching_ref(const char *refname, const struct object_id *oid,
 	if (wildmatch(match_ref_pattern, tail, 0))
 		return 0;
 	if (starts_with(refname, "refs/heads/"))
-		return append_head_ref(refname, oid, flag, cb_data);
+		return append_head_ref(refname, oid, flags, cb_data);
 	if (starts_with(refname, "refs/tags/"))
-		return append_tag_ref(refname, oid, flag, cb_data);
+		return append_tag_ref(refname, oid, flags, cb_data);
 	return append_ref(refname, oid, 0);
 }
 
diff --git a/builtin/show-ref.c b/builtin/show-ref.c
index 7f8a5332f83..ff017b1202a 100644
--- a/builtin/show-ref.c
+++ b/builtin/show-ref.c
@@ -47,7 +47,7 @@ static void show_one(const char *refname, const struct object_id *oid)
 }
 
 static int show_ref(const char *refname, const struct object_id *oid,
-		    int flag, void *cbdata)
+		    unsigned int flag, void *cbdata)
 {
 	if (show_head && !strcmp(refname, "HEAD"))
 		goto match;
@@ -86,7 +86,7 @@ match:
 }
 
 static int add_existing(const char *refname, const struct object_id *oid,
-			int flag, void *cbdata)
+			unsigned int unused_flags, void *cbdata)
 {
 	struct string_list *list = (struct string_list *)cbdata;
 	string_list_insert(list, refname);
diff --git a/builtin/stash.c b/builtin/stash.c
index 86cd0b456e7..c02e014acb7 100644
--- a/builtin/stash.c
+++ b/builtin/stash.c
@@ -1296,7 +1296,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
 			   int quiet)
 {
 	int ret = 0;
-	int flags = 0;
+	unsigned int flags = 0;
 	int untracked_commit_option = 0;
 	const char *head_short_sha1 = NULL;
 	const char *branch_ref = NULL;
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index c5d3fc3817f..0a2755c8eee 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -738,8 +738,8 @@ static void print_status(unsigned int flags, char state, const char *path,
 }
 
 static int handle_submodule_head_ref(const char *refname,
-				     const struct object_id *oid, int flags,
-				     void *cb_data)
+				     const struct object_id *oid,
+				     unsigned int unused_flags, void *cb_data)
 {
 	struct object_id *output = cb_data;
 	if (oid)
diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c
index e547a08d6c7..478ae36b4da 100644
--- a/builtin/symbolic-ref.c
+++ b/builtin/symbolic-ref.c
@@ -12,12 +12,12 @@ static const char * const git_symbolic_ref_usage[] = {
 
 static int check_symref(const char *HEAD, int quiet, int shorten, int print)
 {
-	int flag;
-	const char *refname = resolve_ref_unsafe(HEAD, 0, NULL, &flag);
+	unsigned int flags;
+	const char *refname = resolve_ref_unsafe(HEAD, 0, NULL, &flags);
 
 	if (!refname)
 		die("No such ref: %s", HEAD);
-	else if (!(flag & REF_ISSYMREF)) {
+	else if (!(flags & REF_ISSYMREF)) {
 		if (!quiet)
 			die("ref %s is not a symbolic ref", HEAD);
 		else
diff --git a/bundle.c b/bundle.c
index a0bb687b0f4..a6658dab789 100644
--- a/bundle.c
+++ b/bundle.c
@@ -371,15 +371,15 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
 		struct object_id oid;
 		char *ref;
 		const char *display_ref;
-		int flag;
+		unsigned int flags;
 
 		if (e->item->flags & UNINTERESTING)
 			continue;
 		if (dwim_ref(e->name, strlen(e->name), &oid, &ref, 0) != 1)
 			goto skip_write_ref;
-		if (read_ref_full(e->name, RESOLVE_REF_READING, &oid, &flag))
-			flag = 0;
-		display_ref = (flag & REF_ISSYMREF) ? e->name : ref;
+		if (read_ref_full(e->name, RESOLVE_REF_READING, &oid, &flags))
+			flags = 0;
+		display_ref = (flags & REF_ISSYMREF) ? e->name : ref;
 
 		if (e->item->type == OBJ_TAG &&
 				!is_tag_in_date_range(e->item, revs)) {
diff --git a/commit-graph.c b/commit-graph.c
index 265c010122e..1a7d1bb154d 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -1636,9 +1636,8 @@ struct refs_cb_data {
 	struct progress *progress;
 };
 
-static int add_ref_to_set(const char *refname,
-			  const struct object_id *oid,
-			  int flags, void *cb_data)
+static int add_ref_to_set(const char *refname, const struct object_id *oid,
+			  unsigned int flags, void *cb_data)
 {
 	struct object_id peeled;
 	struct refs_cb_data *data = (struct refs_cb_data *)cb_data;
diff --git a/config.c b/config.c
index 2bffa8d4a01..a4f9cf339f7 100644
--- a/config.c
+++ b/config.c
@@ -276,7 +276,7 @@ done:
 
 static int include_by_branch(const char *cond, size_t cond_len)
 {
-	int flags;
+	unsigned int flags;
 	int ret;
 	struct strbuf pattern = STRBUF_INIT;
 	const char *refname = !the_repository->gitdir ?
diff --git a/delta-islands.c b/delta-islands.c
index aa98b2e5414..b53b8dc7f4a 100644
--- a/delta-islands.c
+++ b/delta-islands.c
@@ -365,7 +365,7 @@ static void add_ref_to_island(const char *island_name, const struct object_id *o
 }
 
 static int find_island_for_ref(const char *refname, const struct object_id *oid,
-			       int flags, void *data)
+			       unsigned int unused_flags, void *data)
 {
 	/*
 	 * We should advertise 'ARRAY_SIZE(matches) - 2' as the max,
diff --git a/fetch-pack.c b/fetch-pack.c
index dd6ec449f2d..1f3dce5860f 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -164,8 +164,9 @@ static int rev_list_insert_ref(struct fetch_negotiator *negotiator,
 	return 0;
 }
 
-static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,
-				   int flag, void *cb_data)
+static int rev_list_insert_ref_oid(const char *refname,
+				   const struct object_id *oid,
+				   unsigned int unused_flags, void *cb_data)
 {
 	return rev_list_insert_ref(cb_data, oid);
 }
@@ -548,7 +549,7 @@ static int mark_complete(const struct object_id *oid)
 }
 
 static int mark_complete_oid(const char *refname, const struct object_id *oid,
-			     int flag, void *cb_data)
+			     unsigned int unused_flags, void *cb_data)
 {
 	return mark_complete(oid);
 }
diff --git a/help.c b/help.c
index 71444906ddf..38e3def7cb6 100644
--- a/help.c
+++ b/help.c
@@ -728,7 +728,7 @@ struct similar_ref_cb {
 };
 
 static int append_similar_ref(const char *refname, const struct object_id *oid,
-			      int flags, void *cb_data)
+			      unsigned int flags, void *cb_data)
 {
 	struct similar_ref_cb *cb = (struct similar_ref_cb *)(cb_data);
 	char *branch = strrchr(refname, '/') + 1;
diff --git a/http-backend.c b/http-backend.c
index 807fb8839e7..351a124333b 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -504,7 +504,7 @@ static void run_service(const char **argv, int buffer_input)
 }
 
 static int show_text_ref(const char *name, const struct object_id *oid,
-			 int flag, void *cb_data)
+			 unsigned int flag, void *cb_data)
 {
 	const char *name_nons = strip_namespace(name);
 	struct strbuf *buf = cb_data;
@@ -559,11 +559,11 @@ static void get_info_refs(struct strbuf *hdr, char *arg)
 }
 
 static int show_head_ref(const char *refname, const struct object_id *oid,
-			 int flag, void *cb_data)
+			 unsigned int flags, void *cb_data)
 {
 	struct strbuf *buf = cb_data;
 
-	if (flag & REF_ISSYMREF) {
+	if (flags & REF_ISSYMREF) {
 		const char *target = resolve_ref_unsafe(refname,
 							RESOLVE_REF_READING,
 							NULL, NULL);
diff --git a/log-tree.c b/log-tree.c
index d3e7a40b648..4d2b74cf754 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -131,7 +131,7 @@ static int ref_filter_match(const char *refname,
 }
 
 static int add_ref_decoration(const char *refname, const struct object_id *oid,
-			      int flags, void *cb_data)
+			      unsigned int unused_flags, void *cb_data)
 {
 	struct object *obj;
 	enum object_type objtype;
@@ -241,7 +241,7 @@ static const struct name_decoration *current_pointed_by_HEAD(const struct name_d
 {
 	const struct name_decoration *list, *head = NULL;
 	const char *branch_name = NULL;
-	int rru_flags;
+	unsigned int rru_flags;
 
 	/* First find HEAD */
 	for (list = decoration; list; list = list->next)
diff --git a/ls-refs.c b/ls-refs.c
index 54078323dcb..3abdccb9394 100644
--- a/ls-refs.c
+++ b/ls-refs.c
@@ -76,7 +76,7 @@ struct ls_refs_data {
 };
 
 static int send_ref(const char *refname, const struct object_id *oid,
-		    int flag, void *cb_data)
+		    unsigned int flags, void *cb_data)
 {
 	struct ls_refs_data *data = cb_data;
 	const char *refname_nons = strip_namespace(refname);
@@ -93,11 +93,10 @@ static int send_ref(const char *refname, const struct object_id *oid,
 		strbuf_addf(&data->buf, "%s %s", oid_to_hex(oid), refname_nons);
 	else
 		strbuf_addf(&data->buf, "unborn %s", refname_nons);
-	if (data->symrefs && flag & REF_ISSYMREF) {
+	if (data->symrefs && flags & REF_ISSYMREF) {
 		struct object_id unused;
-		const char *symref_target = resolve_ref_unsafe(refname, 0,
-							       &unused,
-							       &flag);
+		const char *symref_target =
+			resolve_ref_unsafe(refname, 0, &unused, &flags);
 
 		if (!symref_target)
 			die("'%s' is a symref but it is not?", refname);
@@ -122,16 +121,17 @@ static void send_possibly_unborn_head(struct ls_refs_data *data)
 {
 	struct strbuf namespaced = STRBUF_INIT;
 	struct object_id oid;
-	int flag;
+	unsigned int flags;
 	int oid_is_null;
 
 	strbuf_addf(&namespaced, "%sHEAD", get_git_namespace());
-	if (!resolve_ref_unsafe(namespaced.buf, 0, &oid, &flag))
+	if (!resolve_ref_unsafe(namespaced.buf, 0, &oid, &flags))
 		return; /* bad ref */
 	oid_is_null = is_null_oid(&oid);
 	if (!oid_is_null ||
-	    (data->unborn && data->symrefs && (flag & REF_ISSYMREF)))
-		send_ref(namespaced.buf, oid_is_null ? NULL : &oid, flag, data);
+	    (data->unborn && data->symrefs && (flags & REF_ISSYMREF)))
+		send_ref(namespaced.buf, oid_is_null ? NULL : &oid, flags,
+			 data);
 	strbuf_release(&namespaced);
 }
 
diff --git a/midx.c b/midx.c
index 837b46b2af5..003bcce7633 100644
--- a/midx.c
+++ b/midx.c
@@ -922,14 +922,13 @@ static void prepare_midx_packing_data(struct packing_data *pdata,
 	}
 }
 
-static int add_ref_to_pending(const char *refname,
-			      const struct object_id *oid,
-			      int flag, void *cb_data)
+static int add_ref_to_pending(const char *refname, const struct object_id *oid,
+			      unsigned int flags, void *cb_data)
 {
 	struct rev_info *revs = (struct rev_info*)cb_data;
 	struct object *object;
 
-	if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+	if ((flags & REF_ISSYMREF) && (flags & REF_ISBROKEN)) {
 		warning("symbolic ref is dangling: %s", refname);
 		return 0;
 	}
diff --git a/negotiator/default.c b/negotiator/default.c
index 434189ae5dc..7ddc40e480b 100644
--- a/negotiator/default.c
+++ b/negotiator/default.c
@@ -36,7 +36,7 @@ static void rev_list_push(struct negotiation_state *ns,
 }
 
 static int clear_marks(const char *refname, const struct object_id *oid,
-		       int flag, void *cb_data)
+		       unsigned int unused_flags, void *cb_data)
 {
 	struct object *o = deref_tag(the_repository, parse_object(the_repository, oid), refname, 0);
 
diff --git a/negotiator/skipping.c b/negotiator/skipping.c
index 1236e792248..6ac6310b247 100644
--- a/negotiator/skipping.c
+++ b/negotiator/skipping.c
@@ -72,7 +72,7 @@ static struct entry *rev_list_push(struct data *data, struct commit *commit, int
 }
 
 static int clear_marks(const char *refname, const struct object_id *oid,
-		       int flag, void *cb_data)
+		       unsigned int unused_flags, void *cb_data)
 {
 	struct object *o = deref_tag(the_repository, parse_object(the_repository, oid), refname, 0);
 
diff --git a/notes.c b/notes.c
index f87dac40684..df41b004f49 100644
--- a/notes.c
+++ b/notes.c
@@ -924,8 +924,9 @@ out:
 	return ret;
 }
 
-static int string_list_add_one_ref(const char *refname, const struct object_id *oid,
-				   int flag, void *cb)
+static int string_list_add_one_ref(const char *refname,
+				   const struct object_id *oid,
+				   unsigned int unused_flags, void *cb)
 {
 	struct string_list *refs = cb;
 	if (!unsorted_string_list_has_string(refs, refname))
diff --git a/object-name.c b/object-name.c
index fdff4601b2c..d89b4ed9f3e 100644
--- a/object-name.c
+++ b/object-name.c
@@ -1208,7 +1208,7 @@ struct handle_one_ref_cb {
 };
 
 static int handle_one_ref(const char *path, const struct object_id *oid,
-			  int flag, void *cb_data)
+			  unsigned int unused_flags, void *cb_data)
 {
 	struct handle_one_ref_cb *cb = cb_data;
 	struct commit_list **list = cb->list;
diff --git a/reachable.c b/reachable.c
index 84e3d0d75ed..fc04a57cbf6 100644
--- a/reachable.c
+++ b/reachable.c
@@ -27,12 +27,12 @@ static void update_progress(struct connectivity_progress *cp)
 }
 
 static int add_one_ref(const char *path, const struct object_id *oid,
-		       int flag, void *cb_data)
+		       unsigned int flags, void *cb_data)
 {
 	struct rev_info *revs = (struct rev_info *)cb_data;
 	struct object *object;
 
-	if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+	if ((flags & REF_ISSYMREF) && (flags & REF_ISBROKEN)) {
 		warning("symbolic ref is dangling: %s", path);
 		return 0;
 	}
diff --git a/ref-filter.c b/ref-filter.c
index f7a2f17bfd9..addb7a237a4 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2233,7 +2233,8 @@ struct ref_filter_cbdata {
  * A call-back given to for_each_ref().  Filter refs and keep them for
  * later object processing.
  */
-static int ref_filter_handler(const char *refname, const struct object_id *oid, int flag, void *cb_data)
+static int ref_filter_handler(const char *refname, const struct object_id *oid,
+			      unsigned int flags, void *cb_data)
 {
 	struct ref_filter_cbdata *ref_cbdata = cb_data;
 	struct ref_filter *filter = ref_cbdata->filter;
@@ -2241,12 +2242,12 @@ static int ref_filter_handler(const char *refname, const struct object_id *oid,
 	struct commit *commit = NULL;
 	unsigned int kind;
 
-	if (flag & REF_BAD_NAME) {
+	if (flags & REF_BAD_NAME) {
 		warning(_("ignoring ref with broken name %s"), refname);
 		return 0;
 	}
 
-	if (flag & REF_ISBROKEN) {
+	if (flags & REF_ISBROKEN) {
 		warning(_("ignoring broken ref %s"), refname);
 		return 0;
 	}
@@ -2289,7 +2290,7 @@ static int ref_filter_handler(const char *refname, const struct object_id *oid,
 	 */
 	ref = ref_array_push(ref_cbdata->array, refname, oid);
 	ref->commit = commit;
-	ref->flag = flag;
+	ref->flag = flags;
 	ref->kind = kind;
 
 	return 0;
diff --git a/refs.c b/refs.c
index addb26293b4..3178a0cbdef 100644
--- a/refs.c
+++ b/refs.c
@@ -74,7 +74,7 @@ static unsigned char refname_disposition[256] = {
  * as an error, try to come up with a usable replacement for the input
  * refname in it.
  */
-static int check_refname_component(const char *refname, int *flags,
+static int check_refname_component(const char *refname, unsigned int *flags,
 				   struct strbuf *sanitized)
 {
 	const char *cp;
@@ -158,7 +158,7 @@ out:
 	return cp - refname;
 }
 
-static int check_or_sanitize_refname(const char *refname, int flags,
+static int check_or_sanitize_refname(const char *refname, unsigned int flags,
 				     struct strbuf *sanitized)
 {
 	int component_len, component_count = 0;
@@ -202,7 +202,7 @@ static int check_or_sanitize_refname(const char *refname, int flags,
 	return 0;
 }
 
-int check_refname_format(const char *refname, int flags)
+int check_refname_format(const char *refname, unsigned int flags)
 {
 	return check_or_sanitize_refname(refname, flags, NULL);
 }
@@ -264,9 +264,9 @@ int ref_resolves_to_object(const char *refname,
 	return 1;
 }
 
-char *refs_resolve_refdup(struct ref_store *refs,
-			  const char *refname, int resolve_flags,
-			  struct object_id *oid, int *flags)
+char *refs_resolve_refdup(struct ref_store *refs, const char *refname,
+			  unsigned int resolve_flags, struct object_id *oid,
+			  unsigned int *flags)
 {
 	const char *result;
 	int ignore_errno;
@@ -276,8 +276,8 @@ char *refs_resolve_refdup(struct ref_store *refs,
 	return xstrdup_or_null(result);
 }
 
-char *resolve_refdup(const char *refname, int resolve_flags,
-		     struct object_id *oid, int *flags)
+char *resolve_refdup(const char *refname, unsigned int resolve_flags,
+		     struct object_id *oid, unsigned int *flags)
 {
 	return refs_resolve_refdup(get_main_ref_store(the_repository),
 				   refname, resolve_flags,
@@ -292,7 +292,8 @@ struct ref_filter {
 	void *cb_data;
 };
 
-int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
+int read_ref_full(const char *refname, unsigned int resolve_flags,
+		  struct object_id *oid, unsigned int *flags)
 {
 	int ignore_errno;
 	struct ref_store *refs = get_main_ref_store(the_repository);
@@ -321,7 +322,7 @@ int ref_exists(const char *refname)
 }
 
 static int filter_refs(const char *refname, const struct object_id *oid,
-			   int flags, void *data)
+		       unsigned int flags, void *data)
 {
 	struct ref_filter *filter = (struct ref_filter *)data;
 
@@ -360,8 +361,9 @@ struct warn_if_dangling_data {
 	const char *msg_fmt;
 };
 
-static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,
-				   int flags, void *cb_data)
+static int warn_if_dangling_symref(const char *refname,
+				   const struct object_id *oid,
+				   unsigned int flags, void *cb_data)
 {
 	struct warn_if_dangling_data *d = cb_data;
 	const char *resolves_to;
@@ -439,11 +441,11 @@ int head_ref_namespaced(each_ref_fn fn, void *cb_data)
 	struct strbuf buf = STRBUF_INIT;
 	int ret = 0;
 	struct object_id oid;
-	int flag;
+	unsigned int flags;
 
 	strbuf_addf(&buf, "%sHEAD", get_git_namespace());
-	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
-		ret = fn(buf.buf, &oid, flag, cb_data);
+	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flags))
+		ret = fn(buf.buf, &oid, flags, cb_data);
 	strbuf_release(&buf);
 
 	return ret;
@@ -654,7 +656,7 @@ int expand_ref(struct repository *repo, const char *str, int len,
 	for (p = ref_rev_parse_rules; *p; p++) {
 		struct object_id oid_from_ref;
 		struct object_id *this_result;
-		int flag;
+		unsigned int flags;
 		struct ref_store *refs = get_main_ref_store(repo);
 		int ignore_errno;
 
@@ -662,17 +664,17 @@ int expand_ref(struct repository *repo, const char *str, int len,
 		strbuf_reset(&fullref);
 		strbuf_addf(&fullref, *p, len, str);
 		r = refs_resolve_ref_unsafe(refs, fullref.buf,
-					    RESOLVE_REF_READING,
-					    this_result, &flag,
-					    &ignore_errno);
+					    RESOLVE_REF_READING, this_result,
+					    &flags, &ignore_errno);
 		if (r) {
 			if (!refs_found++)
 				*ref = xstrdup(r);
 			if (!warn_ambiguous_refs)
 				break;
-		} else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
+		} else if ((flags & REF_ISSYMREF) &&
+			   strcmp(fullref.buf, "HEAD")) {
 			warning(_("ignoring dangling symref %s"), fullref.buf);
-		} else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
+		} else if ((flags & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
 			warning(_("ignoring broken ref %s"), fullref.buf);
 		}
 	}
@@ -1389,12 +1391,12 @@ const char *find_descendant_ref(const char *dirname,
 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
 {
 	struct object_id oid;
-	int flag;
+	unsigned int flags;
 	int ignore_errno;
 
-	if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
-				    &oid, &flag, &ignore_errno))
-		return fn("HEAD", &oid, flag, cb_data);
+	if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING, &oid,
+				    &flags, &ignore_errno))
+		return fn("HEAD", &oid, flags, cb_data);
 
 	return 0;
 }
@@ -1467,11 +1469,9 @@ struct do_for_each_ref_help {
 	void *cb_data;
 };
 
-static int do_for_each_ref_helper(struct repository *r,
-				  const char *refname,
+static int do_for_each_ref_helper(struct repository *r, const char *refname,
 				  const struct object_id *oid,
-				  int flags,
-				  void *cb_data)
+				  unsigned int flags, void *cb_data)
 {
 	struct do_for_each_ref_help *hp = cb_data;
 
@@ -1678,15 +1678,14 @@ int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
 					   type, failure_errno);
 }
 
-const char *refs_resolve_ref_unsafe(struct ref_store *refs,
-				    const char *refname,
-				    int resolve_flags,
-				    struct object_id *oid,
-				    int *flags, int *failure_errno)
+const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
+				    unsigned int resolve_flags,
+				    struct object_id *oid, unsigned int *flags,
+				    int *failure_errno)
 {
 	static struct strbuf sb_refname = STRBUF_INIT;
 	struct object_id unused_oid;
-	int unused_flags;
+	unsigned int unused_flags;
 	int symref_count;
 
 	assert(failure_errno);
@@ -1781,8 +1780,8 @@ int refs_init_db(struct strbuf *err)
 	return refs->be->init_db(refs, err);
 }
 
-const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
-			       struct object_id *oid, int *flags)
+const char *resolve_ref_unsafe(const char *refname, unsigned int resolve_flags,
+			       struct object_id *oid, unsigned int *flags)
 {
 	int ignore_errno;
 
@@ -1794,7 +1793,7 @@ int resolve_gitlink_ref(const char *submodule, const char *refname,
 			struct object_id *oid)
 {
 	struct ref_store *refs;
-	int flags;
+	unsigned int unused_flags;
 	int ignore_errno;
 
 	refs = get_submodule_ref_store(submodule);
@@ -1802,8 +1801,9 @@ int resolve_gitlink_ref(const char *submodule, const char *refname,
 	if (!refs)
 		return -1;
 
-	if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags,
-				     &ignore_errno) || is_null_oid(oid))
+	if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &unused_flags,
+				     &ignore_errno) ||
+	    is_null_oid(oid))
 		return -1;
 	return 0;
 }
diff --git a/refs.h b/refs.h
index 8f91a7f9ff2..6a4ef87b99e 100644
--- a/refs.h
+++ b/refs.h
@@ -68,23 +68,22 @@ struct worktree;
 #define RESOLVE_REF_NO_RECURSE 0x02
 #define RESOLVE_REF_ALLOW_BAD_NAME 0x04
 
-const char *refs_resolve_ref_unsafe(struct ref_store *refs,
-				    const char *refname,
-				    int resolve_flags,
-				    struct object_id *oid,
-				    int *flags, int *failure_errno);
-
-const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
-			       struct object_id *oid, int *flags);
-
-char *refs_resolve_refdup(struct ref_store *refs,
-			  const char *refname, int resolve_flags,
-			  struct object_id *oid, int *flags);
-char *resolve_refdup(const char *refname, int resolve_flags,
-		     struct object_id *oid, int *flags);
-
-int read_ref_full(const char *refname, int resolve_flags,
-		  struct object_id *oid, int *flags);
+const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
+				    unsigned int resolve_flags,
+				    struct object_id *oid, unsigned int *flags,
+				    int *failure_errno);
+
+const char *resolve_ref_unsafe(const char *refname, unsigned int resolve_flags,
+			       struct object_id *oid, unsigned int *flags);
+
+char *refs_resolve_refdup(struct ref_store *refs, const char *refname,
+			  unsigned int resolve_flags, struct object_id *oid,
+			  unsigned int *flags);
+char *resolve_refdup(const char *refname, unsigned int resolve_flags,
+		     struct object_id *oid, unsigned int *flags);
+
+int read_ref_full(const char *refname, unsigned int resolve_flags,
+		  struct object_id *oid, unsigned int *flags);
 int read_ref(const char *refname, struct object_id *oid);
 
 /*
@@ -298,17 +297,15 @@ struct ref_transaction;
  * arguments is only guaranteed to be valid for the duration of a
  * single callback invocation.
  */
-typedef int each_ref_fn(const char *refname,
-			const struct object_id *oid, int flags, void *cb_data);
+typedef int each_ref_fn(const char *refname, const struct object_id *oid,
+			unsigned int flags, void *cb_data);
 
 /*
  * The same as each_ref_fn, but also with a repository argument that
  * contains the repository associated with the callback.
  */
-typedef int each_repo_ref_fn(struct repository *r,
-			     const char *refname,
-			     const struct object_id *oid,
-			     int flags,
+typedef int each_repo_ref_fn(struct repository *r, const char *refname,
+			     const struct object_id *oid, unsigned int flags,
 			     void *cb_data);
 
 /*
@@ -532,7 +529,7 @@ int for_each_reflog(each_ref_fn fn, void *cb_data);
  * allow a single "*" wildcard character in the refspec. No leading or
  * repeated slashes are accepted.
  */
-int check_refname_format(const char *refname, int flags);
+int check_refname_format(const char *refname, unsigned int flags);
 
 /*
  * Apply the rules from check_refname_format, but mutate the result until it
@@ -896,7 +893,7 @@ struct ref_store *get_main_ref_store(struct repository *r);
  *
  * ----
  * static int handle_remote_ref(const char *refname,
- * 		const unsigned char *sha1, int flags, void *cb_data)
+ * 		const unsigned char *sha1, unsigned int flags, void *cb_data)
  * {
  * 	struct strbuf *output = cb_data;
  * 	strbuf_addf(output, "%s\n", refname);
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 43a3b882d7c..8890e2f684c 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -261,7 +261,6 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
 	while ((de = readdir(d)) != NULL) {
 		struct object_id oid;
 		struct stat st;
-		int flag;
 
 		if (de->d_name[0] == '.')
 			continue;
@@ -278,12 +277,12 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
 							  refname.len));
 		} else {
 			int ignore_errno;
-			if (!refs_resolve_ref_unsafe(&refs->base,
-						     refname.buf,
-						     RESOLVE_REF_READING,
-						     &oid, &flag, &ignore_errno)) {
+			unsigned int flags;
+			if (!refs_resolve_ref_unsafe(&refs->base, refname.buf,
+						     RESOLVE_REF_READING, &oid,
+						     &flags, &ignore_errno)) {
 				oidclr(&oid);
-				flag |= REF_ISBROKEN;
+				flags |= REF_ISBROKEN;
 			} else if (is_null_oid(&oid)) {
 				/*
 				 * It is so astronomically unlikely
@@ -293,7 +292,7 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
 				 * file to be repo corruption
 				 * (probably due to a software bug).
 				 */
-				flag |= REF_ISBROKEN;
+				flags |= REF_ISBROKEN;
 			}
 
 			if (check_refname_format(refname.buf,
@@ -301,10 +300,10 @@ static void loose_fill_ref_dir(struct ref_store *ref_store,
 				if (!refname_is_safe(refname.buf))
 					die("loose refname is dangerous: %s", refname.buf);
 				oidclr(&oid);
-				flag |= REF_BAD_NAME | REF_ISBROKEN;
+				flags |= REF_BAD_NAME | REF_ISBROKEN;
 			}
-			add_entry_to_dir(dir,
-					 create_ref_entry(refname.buf, &oid, flag));
+			add_entry_to_dir(dir, create_ref_entry(refname.buf,
+							       &oid, flags));
 		}
 		strbuf_setlen(&refname, dirnamelen);
 		strbuf_setlen(&path, path_baselen);
@@ -1391,7 +1390,8 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 	struct files_ref_store *refs =
 		files_downcast(ref_store, REF_STORE_WRITE, "rename_ref");
 	struct object_id orig_oid;
-	int flag = 0, logmoved = 0;
+	int logmoved = 0;
+	unsigned int flags = 0;
 	struct ref_lock *lock;
 	struct stat loginfo;
 	struct strbuf sb_oldref = STRBUF_INIT;
@@ -1412,13 +1412,14 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 	}
 
 	if (!refs_resolve_ref_unsafe(&refs->base, oldrefname,
-				     RESOLVE_REF_READING | RESOLVE_REF_NO_RECURSE,
-				     &orig_oid, &flag, &ignore_errno)) {
+				     RESOLVE_REF_READING |
+					     RESOLVE_REF_NO_RECURSE,
+				     &orig_oid, &flags, &ignore_errno)) {
 		ret = error("refname %s not found", oldrefname);
 		goto out;
 	}
 
-	if (flag & REF_ISSYMREF) {
+	if (flags & REF_ISSYMREF) {
 		if (copy)
 			ret = error("refname %s is a symbolic ref, copying it is not supported",
 				    oldrefname);
@@ -1514,14 +1515,14 @@ static int files_copy_or_rename_ref(struct ref_store *ref_store,
 		goto rollbacklog;
 	}
 
-	flag = log_all_ref_updates;
+	flags = log_all_ref_updates;
 	log_all_ref_updates = LOG_REFS_NONE;
 	if (write_ref_to_lockfile(lock, &orig_oid, 0, &err) ||
 	    commit_ref_update(refs, lock, &orig_oid, NULL, &err)) {
 		error("unable to write current sha1 into %s: %s", oldrefname, err.buf);
 		strbuf_release(&err);
 	}
-	log_all_ref_updates = flag;
+	log_all_ref_updates = flags;
 
  rollbacklog:
 	if (logmoved && rename(sb_newref.buf, sb_oldref.buf))
@@ -1702,9 +1703,10 @@ static int log_ref_write_fd(int fd, const struct object_id *old_oid,
 }
 
 static int files_log_ref_write(struct files_ref_store *refs,
-			       const char *refname, const struct object_id *old_oid,
+			       const char *refname,
+			       const struct object_id *old_oid,
 			       const struct object_id *new_oid, const char *msg,
-			       int flags, struct strbuf *err)
+			       unsigned int flags, struct strbuf *err)
 {
 	int logfd, result;
 
@@ -1826,15 +1828,14 @@ static int commit_ref_update(struct files_ref_store *refs,
 		 * check with HEAD only which should cover 99% of all usage
 		 * scenarios (even 100% of the default ones).
 		 */
-		int head_flag;
+		unsigned int head_flags;
 		const char *head_ref;
 		int ignore_errno;
 
 		head_ref = refs_resolve_ref_unsafe(&refs->base, "HEAD",
-						   RESOLVE_REF_READING,
-						   NULL, &head_flag,
-						   &ignore_errno);
-		if (head_ref && (head_flag & REF_ISSYMREF) &&
+						   RESOLVE_REF_READING, NULL,
+						   &head_flags, &ignore_errno);
+		if (head_ref && (head_flags & REF_ISSYMREF) &&
 		    !strcmp(head_ref, lock->ref_name)) {
 			struct strbuf log_err = STRBUF_INIT;
 			if (files_log_ref_write(refs, "HEAD",
@@ -2159,7 +2160,7 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator)
 	int ignore_errno;
 
 	while ((ok = dir_iterator_advance(diter)) == ITER_OK) {
-		int flags;
+		unsigned int flags;
 
 		if (!S_ISREG(diter->st.st_mode))
 			continue;
@@ -2669,7 +2670,7 @@ static int files_transaction_prepare(struct ref_store *ref_store,
 	int ret = 0;
 	struct string_list affected_refnames = STRING_LIST_INIT_NODUP;
 	char *head_ref = NULL;
-	int head_type;
+	unsigned int head_type;
 	struct files_transaction_backend_data *backend_data;
 	struct ref_transaction *packed_transaction = NULL;
 
@@ -2982,8 +2983,8 @@ static int files_transaction_abort(struct ref_store *ref_store,
 	return 0;
 }
 
-static int ref_present(const char *refname,
-		       const struct object_id *oid, int flags, void *cb_data)
+static int ref_present(const char *refname, const struct object_id *oid,
+		       unsigned int unused_flags, void *cb_data)
 {
 	struct string_list *affected_refnames = cb_data;
 
@@ -3209,7 +3210,7 @@ static int files_reflog_expire(struct ref_store *ref_store,
 		if ((expire_flags & EXPIRE_REFLOGS_UPDATE_REF) &&
 		    !is_null_oid(&cb.last_kept_oid)) {
 			int ignore_errno;
-			int type;
+			unsigned int type;
 			const char *ref;
 
 			ref = refs_resolve_ref_unsafe(&refs->base, refname,
diff --git a/remote.c b/remote.c
index a6d8ec6c1ac..d889241ce0a 100644
--- a/remote.c
+++ b/remote.c
@@ -500,7 +500,7 @@ static void alias_all_urls(struct remote_state *remote_state)
 
 static void read_config(struct repository *repo)
 {
-	int flag;
+	unsigned int flags;
 
 	if (repo->remote_state->initialized)
 		return;
@@ -510,8 +510,9 @@ static void read_config(struct repository *repo)
 	if (startup_info->have_repository) {
 		int ignore_errno;
 		const char *head_ref = refs_resolve_ref_unsafe(
-			get_main_ref_store(repo), "HEAD", 0, NULL, &flag, &ignore_errno);
-		if (head_ref && (flag & REF_ISSYMREF) &&
+			get_main_ref_store(repo), "HEAD", 0, NULL, &flags,
+			&ignore_errno);
+		if (head_ref && (flags & REF_ISSYMREF) &&
 		    skip_prefix(head_ref, "refs/heads/", &head_ref)) {
 			repo->remote_state->current_branch = make_branch(
 				repo->remote_state, head_ref, strlen(head_ref));
@@ -1272,14 +1273,12 @@ static int match_explicit(struct ref *src, struct ref *dst,
 		return -1;
 
 	if (!dst_value) {
-		int flag;
-
-		dst_value = resolve_ref_unsafe(matched_src->name,
-					       RESOLVE_REF_READING,
-					       NULL, &flag);
-		if (!dst_value ||
-		    ((flag & REF_ISSYMREF) &&
-		     !starts_with(dst_value, "refs/heads/")))
+		unsigned int flags;
+
+		dst_value = resolve_ref_unsafe(
+			matched_src->name, RESOLVE_REF_READING, NULL, &flags);
+		if (!dst_value || ((flags & REF_ISSYMREF) &&
+				   !starts_with(dst_value, "refs/heads/")))
 			die(_("%s cannot be resolved to branch"),
 			    matched_src->name);
 	}
@@ -1948,11 +1947,11 @@ const char *branch_get_push(struct branch *branch, struct strbuf *err)
 
 static int ignore_symref_update(const char *refname)
 {
-	int flag;
+	unsigned int flags;
 
-	if (!resolve_ref_unsafe(refname, 0, NULL, &flag))
+	if (!resolve_ref_unsafe(refname, 0, NULL, &flags))
 		return 0; /* non-existing refs are OK */
-	return (flag & REF_ISSYMREF);
+	return (flags & REF_ISSYMREF);
 }
 
 /*
@@ -2288,7 +2287,7 @@ int format_tracking_info(struct branch *branch, struct strbuf *sb,
 }
 
 static int one_local_ref(const char *refname, const struct object_id *oid,
-			 int flag, void *cb_data)
+			 unsigned int flag, void *cb_data)
 {
 	struct ref ***local_tail = cb_data;
 	struct ref *ref;
@@ -2369,7 +2368,7 @@ struct stale_heads_info {
 };
 
 static int get_stale_heads_cb(const char *refname, const struct object_id *oid,
-			      int flags, void *cb_data)
+			      unsigned int flags, void *cb_data)
 {
 	struct stale_heads_info *info = cb_data;
 	struct string_list matches = STRING_LIST_INIT_DUP;
diff --git a/replace-object.c b/replace-object.c
index 7bd9aba6ee6..d00486305a5 100644
--- a/replace-object.c
+++ b/replace-object.c
@@ -6,10 +6,9 @@
 #include "repository.h"
 #include "commit.h"
 
-static int register_replace_ref(struct repository *r,
-				const char *refname,
+static int register_replace_ref(struct repository *r, const char *refname,
 				const struct object_id *oid,
-				int flag, void *cb_data)
+				unsigned int unused_flags, void *cb_data)
 {
 	/* Get sha1 from refname */
 	const char *slash = strrchr(refname, '/');
diff --git a/revision.c b/revision.c
index ad4286fbdde..4b6f7f112a8 100644
--- a/revision.c
+++ b/revision.c
@@ -1527,7 +1527,7 @@ int ref_excluded(struct string_list *ref_excludes, const char *path)
 }
 
 static int handle_one_ref(const char *path, const struct object_id *oid,
-			  int flag, void *cb_data)
+			  unsigned int unused_flags, void *cb_data)
 {
 	struct all_refs_cb *cb = cb_data;
 	struct object *object;
@@ -1612,7 +1612,7 @@ static int handle_one_reflog_ent(struct object_id *ooid, struct object_id *noid,
 
 static int handle_one_reflog(const char *refname_in_wt,
 			     const struct object_id *oid,
-			     int flag, void *cb_data)
+			     unsigned int unused_flags, void *cb_data)
 {
 	struct all_refs_cb *cb = cb_data;
 	struct strbuf refname = STRBUF_INIT;
@@ -2678,7 +2678,7 @@ static int handle_revision_pseudo_opt(struct rev_info *revs,
 
 static void NORETURN diagnose_missing_default(const char *def)
 {
-	int flags;
+	unsigned int flags;
 	const char *refname;
 
 	refname = resolve_ref_unsafe(def, 0, NULL, &flags);
diff --git a/server-info.c b/server-info.c
index 7701d7c20a1..06e3eb388ea 100644
--- a/server-info.c
+++ b/server-info.c
@@ -147,7 +147,7 @@ out:
 }
 
 static int add_info_ref(const char *path, const struct object_id *oid,
-			int flag, void *cb_data)
+			unsigned int unused_flags, void *cb_data)
 {
 	struct update_info_ctx *uic = cb_data;
 	struct object *o = parse_object(the_repository, oid);
diff --git a/shallow.c b/shallow.c
index 9ed18eb8849..709e265dde7 100644
--- a/shallow.c
+++ b/shallow.c
@@ -596,7 +596,7 @@ static void paint_down(struct paint_info *info, const struct object_id *oid,
 }
 
 static int mark_uninteresting(const char *refname, const struct object_id *oid,
-			      int flags, void *cb_data)
+			      unsigned int unused_flags, void *cb_data)
 {
 	struct commit *commit = lookup_commit_reference_gently(the_repository,
 							       oid, 1);
@@ -707,7 +707,7 @@ struct commit_array {
 };
 
 static int add_ref(const char *refname, const struct object_id *oid,
-		   int flags, void *cb_data)
+		   unsigned int unused_flags, void *cb_data)
 {
 	struct commit_array *ca = cb_data;
 	ALLOC_GROW(ca->commits, ca->nr + 1, ca->alloc);
diff --git a/submodule.c b/submodule.c
index c6890705241..325cfc7cd4b 100644
--- a/submodule.c
+++ b/submodule.c
@@ -909,7 +909,7 @@ static void free_submodules_oids(struct string_list *submodules)
 }
 
 static int has_remote(const char *refname, const struct object_id *oid,
-		      int flags, void *cb_data)
+		      unsigned int unused_flags, void *cb_data)
 {
 	return 1;
 }
@@ -1216,7 +1216,7 @@ int push_unpushed_submodules(struct repository *r,
 }
 
 static int append_oid_to_array(const char *ref, const struct object_id *oid,
-			       int flags, void *data)
+			       unsigned int unused_flags, void *data)
 {
 	struct oid_array *array = data;
 	oid_array_append(array, oid);
diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c
index 3e4ddaee705..5054600e3a9 100644
--- a/t/helper/test-ref-store.c
+++ b/t/helper/test-ref-store.c
@@ -160,7 +160,7 @@ static int cmd_rename_ref(struct ref_store *refs, const char **argv)
 }
 
 static int each_ref(const char *refname, const struct object_id *oid,
-		    int flags, void *cb_data)
+		    unsigned int flags, void *cb_data)
 {
 	printf("%s %s 0x%x\n", oid_to_hex(oid), refname, flags);
 	return 0;
@@ -178,7 +178,7 @@ static int cmd_resolve_ref(struct ref_store *refs, const char **argv)
 	struct object_id oid = *null_oid();
 	const char *refname = notnull(*argv++, "refname");
 	int resolve_flags = arg_flags(*argv++, "resolve-flags", empty_flags);
-	int flags;
+	unsigned int flags;
 	const char *ref;
 	int ignore_errno;
 
diff --git a/transport-helper.c b/transport-helper.c
index a0297b0986c..b31c1198b8e 100644
--- a/transport-helper.c
+++ b/transport-helper.c
@@ -1090,13 +1090,15 @@ static int push_refs_with_export(struct transport *transport,
 			if (strcmp(ref->name, ref->peer_ref->name)) {
 				if (!ref->deletion) {
 					const char *name;
-					int flag;
+					unsigned int ref_flags;
 
 					/* Follow symbolic refs (mainly for HEAD). */
-					name = resolve_ref_unsafe(ref->peer_ref->name,
-								  RESOLVE_REF_READING,
-								  &oid, &flag);
-					if (!name || !(flag & REF_ISSYMREF))
+					name = resolve_ref_unsafe(
+						ref->peer_ref->name,
+						RESOLVE_REF_READING, &oid,
+						&ref_flags);
+					if (!name ||
+					    !(ref_flags & REF_ISSYMREF))
 						name = ref->peer_ref->name;
 
 					strbuf_addf(&buf, "%s:%s", name, ref->name);
diff --git a/transport.c b/transport.c
index 2a3e3241545..00f4906e12b 100644
--- a/transport.c
+++ b/transport.c
@@ -80,7 +80,7 @@ static void set_upstreams(struct transport *transport, struct ref *refs,
 		const char *localname;
 		const char *tmp;
 		const char *remotename;
-		int flag = 0;
+		unsigned int ref_flags = 0;
 		/*
 		 * Check suitability for tracking. Must be successful /
 		 * already up-to-date ref create/modify (not delete).
@@ -96,10 +96,10 @@ static void set_upstreams(struct transport *transport, struct ref *refs,
 		/* Follow symbolic refs (mainly for HEAD). */
 		localname = ref->peer_ref->name;
 		remotename = ref->name;
-		tmp = resolve_ref_unsafe(localname, RESOLVE_REF_READING,
-					 NULL, &flag);
-		if (tmp && flag & REF_ISSYMREF &&
-			starts_with(tmp, "refs/heads/"))
+		tmp = resolve_ref_unsafe(localname, RESOLVE_REF_READING, NULL,
+					 &ref_flags);
+		if (tmp && ref_flags & REF_ISSYMREF &&
+		    starts_with(tmp, "refs/heads/"))
 			localname = tmp;
 
 		/* Both source and destination must be local branches. */
diff --git a/upload-pack.c b/upload-pack.c
index 8acc98741bb..6300af75f20 100644
--- a/upload-pack.c
+++ b/upload-pack.c
@@ -822,7 +822,7 @@ static void send_unshallow(struct upload_pack_data *data)
 }
 
 static int check_ref(const char *refname_full, const struct object_id *oid,
-		     int flag, void *cb_data);
+		     unsigned int flag, void *cb_data);
 static void deepen(struct upload_pack_data *data, int depth)
 {
 	if (depth == INFINITE_DEPTH && !is_repository_shallow(the_repository)) {
@@ -1169,7 +1169,7 @@ static int mark_our_ref(const char *refname, const char *refname_full,
 }
 
 static int check_ref(const char *refname_full, const struct object_id *oid,
-		     int flag, void *cb_data)
+		     unsigned int unused_flags, void *cb_data)
 {
 	const char *refname = strip_namespace(refname_full);
 
@@ -1193,7 +1193,7 @@ static void format_session_id(struct strbuf *buf, struct upload_pack_data *d) {
 }
 
 static int send_ref(const char *refname, const struct object_id *oid,
-		    int flag, void *cb_data)
+		    unsigned int unused_flags, void *cb_data)
 {
 	static const char *capabilities = "multi_ack thin-pack side-band"
 		" side-band-64k ofs-delta shallow deepen-since deepen-not"
@@ -1236,15 +1236,15 @@ static int send_ref(const char *refname, const struct object_id *oid,
 }
 
 static int find_symref(const char *refname, const struct object_id *oid,
-		       int flag, void *cb_data)
+		       unsigned int flags, void *cb_data)
 {
 	const char *symref_target;
 	struct string_list_item *item;
 
-	if ((flag & REF_ISSYMREF) == 0)
+	if ((flags & REF_ISSYMREF) == 0)
 		return 0;
-	symref_target = resolve_ref_unsafe(refname, 0, NULL, &flag);
-	if (!symref_target || (flag & REF_ISSYMREF) == 0)
+	symref_target = resolve_ref_unsafe(refname, 0, NULL, &flags);
+	if (!symref_target || (flags & REF_ISSYMREF) == 0)
 		die("'%s' is a symref but it is not?", refname);
 	item = string_list_append(cb_data, strip_namespace(refname));
 	item->util = xstrdup(strip_namespace(symref_target));
diff --git a/walker.c b/walker.c
index c5e29219795..af8ce53a15b 100644
--- a/walker.c
+++ b/walker.c
@@ -216,7 +216,7 @@ static int interpret_target(struct walker *walker, char *target, struct object_i
 }
 
 static int mark_complete(const char *path, const struct object_id *oid,
-			 int flag, void *cb_data)
+			 unsigned int unused_flags, void *cb_data)
 {
 	struct commit *commit = lookup_commit_reference_gently(the_repository,
 							       oid, 1);
diff --git a/worktree.c b/worktree.c
index 6f598dcfcdf..1c92993952a 100644
--- a/worktree.c
+++ b/worktree.c
@@ -26,7 +26,7 @@ void free_worktrees(struct worktree **worktrees)
  */
 static void add_head_info(struct worktree *wt)
 {
-	int flags;
+	unsigned int flags;
 	const char *target;
 	int ignore_errno;
 
@@ -415,7 +415,7 @@ const struct worktree *find_shared_symref(struct worktree **worktrees,
 		struct worktree *wt = worktrees[i];
 		const char *symref_target;
 		struct ref_store *refs;
-		int flags;
+		unsigned int flags;
 		int ignore_errno;
 
 		if (wt->is_bare)
@@ -562,7 +562,7 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
 	for (p = worktrees; *p; p++) {
 		struct worktree *wt = *p;
 		struct object_id oid;
-		int flag;
+		unsigned int flags;
 		int ignore_errno;
 
 		if (wt->is_current)
@@ -571,10 +571,9 @@ int other_head_refs(each_ref_fn fn, void *cb_data)
 		strbuf_reset(&refname);
 		strbuf_worktree_ref(wt, &refname, "HEAD");
 		if (refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
-					    refname.buf,
-					    RESOLVE_REF_READING,
-					    &oid, &flag, &ignore_errno))
-			ret = fn(refname.buf, &oid, flag, cb_data);
+					    refname.buf, RESOLVE_REF_READING,
+					    &oid, &flags, &ignore_errno))
+			ret = fn(refname.buf, &oid, flags, cb_data);
 		if (ret)
 			break;
 	}

base-commit: 5d01301f2b865aa8dba1654d3f447ce9d21db0b5
-- 
gitgitgadget