/* backend functions */
int ref_store_create_on_disk(struct ref_store *refs, int flags, struct strbuf *err)
{
- return refs->be->create_on_disk(refs, flags, err);
+ int ret = refs->be->create_on_disk(refs, flags, err);
+
+ if (!ret &&
+ ref_storage_format_by_name(refs->be->name) != REF_STORAGE_FORMAT_FILES) {
+ struct strbuf msg = STRBUF_INIT;
+
+ strbuf_addf(&msg, "this repository uses the %s format", refs->be->name);
+ refs_create_refdir_stubs(refs->repo, refs->gitdir, msg.buf);
+ strbuf_release(&msg);
+ }
+
+ return ret;
}
int ref_store_remove_on_disk(struct ref_store *refs, struct strbuf *err)
{
- return refs->be->remove_on_disk(refs, err);
+ int ret = refs->be->remove_on_disk(refs, err);
+
+ if (!ret &&
+ ref_storage_format_by_name(refs->be->name) != REF_STORAGE_FORMAT_FILES) {
+ struct strbuf sb = STRBUF_INIT;
+
+ strbuf_addf(&sb, "%s/HEAD", refs->gitdir);
+ if (unlink(sb.buf) < 0) {
+ strbuf_addf(err, "could not delete stub HEAD: %s",
+ strerror(errno));
+ ret = -1;
+ }
+ strbuf_reset(&sb);
+
+ strbuf_addf(&sb, "%s/refs/heads", refs->gitdir);
+ if (unlink(sb.buf) < 0) {
+ strbuf_addf(err, "could not delete stub heads: %s",
+ strerror(errno));
+ ret = -1;
+ }
+ strbuf_reset(&sb);
+
+ strbuf_addf(&sb, "%s/refs", refs->gitdir);
+ if (rmdir(sb.buf) < 0) {
+ strbuf_addf(err, "could not delete refs directory: %s",
+ strerror(errno));
+ ret = -1;
+ }
+
+ strbuf_release(&sb);
+ }
+
+ return ret;
}
int repo_resolve_gitlink_ref(struct repository *r,
if (for_each_root_ref(refs, remove_one_root_ref, &data) < 0)
ret = -1;
- if (ref_store_remove_on_disk(refs->packed_ref_store, err) < 0)
+ /*
+ * Directly access the cleanup functions for packed-refs as the generic function
+ * would try to clear stubs which isn't required for the files backend.
+ */
+ if (refs->packed_ref_store->be->remove_on_disk(refs->packed_ref_store, err) < 0)
ret = -1;
strbuf_release(&sb);
safe_create_dir(the_repository, sb.buf, 1);
strbuf_reset(&sb);
- refs_create_refdir_stubs(the_repository, refs->base.gitdir,
- "this repository uses the reftable format");
-
strbuf_release(&sb);
return 0;
}
strerror(errno));
ret = -1;
}
- strbuf_reset(&sb);
-
- strbuf_addf(&sb, "%s/HEAD", refs->base.gitdir);
- if (unlink(sb.buf) < 0) {
- strbuf_addf(err, "could not delete stub HEAD: %s",
- strerror(errno));
- ret = -1;
- }
- strbuf_reset(&sb);
-
- strbuf_addf(&sb, "%s/refs/heads", refs->base.gitdir);
- if (unlink(sb.buf) < 0) {
- strbuf_addf(err, "could not delete stub heads: %s",
- strerror(errno));
- ret = -1;
- }
- strbuf_reset(&sb);
-
- strbuf_addf(&sb, "%s/refs", refs->base.gitdir);
- if (rmdir(sb.buf) < 0) {
- strbuf_addf(err, "could not delete refs directory: %s",
- strerror(errno));
- ret = -1;
- }
strbuf_release(&sb);
return ret;