+struct refmatch {
+ char *req_ref;
+ char *first_ref;
+ int match;
+};
+
+int find_current_ref(const char *refname, const unsigned char *sha1,
+ int flags, void *cb_data)
+{
+ struct refmatch *info;
+
+ info = (struct refmatch *)cb_data;
+ if (!strcmp(refname, info->req_ref))
+ info->match = 1;
+ if (!info->first_ref)
+ info->first_ref = xstrdup(refname);
+ return info->match;
+}
+
+char *find_default_branch(struct repoinfo *repo)
+{
+ struct refmatch info;
+
+ info.req_ref = repo->defbranch;
+ info.first_ref = NULL;
+ info.match = 0;
+ for_each_branch_ref(find_current_ref, &info);
+ if (info.match)
+ return info.req_ref;
+ else
+ return info.first_ref;
+}
+