return NULL;
}
-static void check_linked_checkout(struct branch_info *new, const char *id)
+static void check_linked_checkout(const char *branch, const char *id)
{
struct strbuf sb = STRBUF_INIT;
struct strbuf path = STRBUF_INIT;
end = start;
while (*end && !isspace(*end))
end++;
- if (strncmp(start, new->path, end - start) || new->path[end - start] != '\0')
+ if (strncmp(start, branch, end - start) || branch[end - start] != '\0')
goto done;
if (id) {
strbuf_reset(&path);
strbuf_rtrim(&gitdir);
} else
strbuf_addstr(&gitdir, get_git_common_dir());
- die(_("'%s' is already checked out at '%s'"), new->name, gitdir.buf);
+ skip_prefix(branch, "refs/heads/", &branch);
+ die(_("'%s' is already checked out at '%s'"), branch, gitdir.buf);
done:
strbuf_release(&path);
strbuf_release(&sb);
strbuf_release(&gitdir);
}
-static void die_if_checked_out(struct branch_info *new)
+static void die_if_checked_out(const char *branch)
{
struct strbuf path = STRBUF_INIT;
DIR *dir;
struct dirent *d;
- check_linked_checkout(new, NULL);
+ check_linked_checkout(branch, NULL);
strbuf_addf(&path, "%s/worktrees", get_git_common_dir());
dir = opendir(path.buf);
while ((d = readdir(dir)) != NULL) {
if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
continue;
- check_linked_checkout(new, d->d_name);
+ check_linked_checkout(branch, d->d_name);
}
closedir(dir);
}
char *head_ref = resolve_refdup("HEAD", 0, sha1, &flag);
if (head_ref &&
(!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)))
- die_if_checked_out(new);
+ die_if_checked_out(new->path);
free(head_ref);
}