Merge branch 'nd/worktree-name-sanitization'
In recent versions of Git, per-worktree refs are exposed in refs/worktrees/<wtname>/ hierarchy, which means that worktree names must be a valid refname component. The code now sanitizes the names given to worktrees, to make sure these refs are well-formed. * nd/worktree-name-sanitization: worktree add: sanitize worktree names
This commit is contained in:
@ -275,6 +275,7 @@ static int add_worktree(const char *path, const char *refname,
|
||||
struct strbuf symref = STRBUF_INIT;
|
||||
struct commit *commit = NULL;
|
||||
int is_branch = 0;
|
||||
struct strbuf sb_name = STRBUF_INIT;
|
||||
|
||||
validate_worktree_add(path, opts);
|
||||
|
||||
@ -290,7 +291,13 @@ static int add_worktree(const char *path, const char *refname,
|
||||
die(_("invalid reference: %s"), refname);
|
||||
|
||||
name = worktree_basename(path, &len);
|
||||
git_path_buf(&sb_repo, "worktrees/%.*s", (int)(path + len - name), name);
|
||||
strbuf_add(&sb, name, path + len - name);
|
||||
sanitize_refname_component(sb.buf, &sb_name);
|
||||
if (!sb_name.len)
|
||||
BUG("How come '%s' becomes empty after sanitization?", sb.buf);
|
||||
strbuf_reset(&sb);
|
||||
name = sb_name.buf;
|
||||
git_path_buf(&sb_repo, "worktrees/%s", name);
|
||||
len = sb_repo.len;
|
||||
if (safe_create_leading_directories_const(sb_repo.buf))
|
||||
die_errno(_("could not create leading directories of '%s'"),
|
||||
@ -418,6 +425,7 @@ done:
|
||||
strbuf_release(&symref);
|
||||
strbuf_release(&sb_repo);
|
||||
strbuf_release(&sb_git);
|
||||
strbuf_release(&sb_name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user