ref_file = git_path("%s", orig_refname);
if (remove_empty_directories(ref_file)) {
last_errno = errno;
- strbuf_addf(err, "there are still refs under '%s'",
- orig_refname);
+
+ if (!verify_refname_available(orig_refname, extras, skip,
+ get_loose_refs(&ref_cache), err))
+ strbuf_addf(err, "there are still refs under '%s'",
+ orig_refname);
+
goto error_return;
}
refname = resolve_ref_unsafe(orig_refname, resolve_flags,
*type_p = type;
if (!refname) {
last_errno = errno;
- strbuf_addf(err, "unable to resolve reference %s: %s",
- orig_refname, strerror(errno));
+ if (last_errno != ENOTDIR ||
+ !verify_refname_available(orig_refname, extras, skip,
+ get_loose_refs(&ref_cache), err))
+ strbuf_addf(err, "unable to resolve reference %s: %s",
+ orig_refname, strerror(last_errno));
+
goto error_return;
}
/*
prefix=refs/1l &&
test_update_rejected $prefix "a c e" false "b c/x d" \
- "unable to resolve reference $prefix/c/x: Not a directory"
+ "$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x$Q"
'
prefix=refs/2l &&
test_update_rejected $prefix "a c e" false "b c/x/y d" \
- "unable to resolve reference $prefix/c/x/y: Not a directory"
+ "$Q$prefix/c$Q exists; cannot create $Q$prefix/c/x/y$Q"
'
prefix=refs/3l &&
test_update_rejected $prefix "a c/x e" false "b c d" \
- "there are still refs under $Q$prefix/c$Q"
+ "$Q$prefix/c/x$Q exists; cannot create $Q$prefix/c$Q"
'
prefix=refs/4l &&
test_update_rejected $prefix "a c/x/y e" false "b c d" \
- "there are still refs under $Q$prefix/c$Q"
+ "$Q$prefix/c/x/y$Q exists; cannot create $Q$prefix/c$Q"
'