summaryrefslogtreecommitdiff
path: root/refs
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-05-16 02:51:51 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-05-16 02:51:51 (GMT)
commit4b44b7b1df44d371eaf3fbed75829d1a749bc7df (patch)
treed8ea9ed31a6946e476db01034a653a2bbd86084c /refs
parenta0ab83ebd807f2bfe1a565ff94fe7d3c6903efee (diff)
parentd026a25657cbe15ceb6bcb5d5047a36a0a70b33e (diff)
downloadgit-4b44b7b1df44d371eaf3fbed75829d1a749bc7df.zip
git-4b44b7b1df44d371eaf3fbed75829d1a749bc7df.tar.gz
git-4b44b7b1df44d371eaf3fbed75829d1a749bc7df.tar.bz2
Merge branch 'nd/worktree-kill-parse-ref'
"git gc" did not interact well with "git worktree"-managed per-worktree refs. * nd/worktree-kill-parse-ref: refs: kill set_worktree_head_symref() worktree.c: kill parse_ref() in favor of refs_resolve_ref_unsafe() refs: introduce get_worktree_ref_store() refs: add REFS_STORE_ALL_CAPS refs.c: make submodule ref store hashmap generic environment.c: fix potential segfault by get_git_common_dir()
Diffstat (limited to 'refs')
-rw-r--r--refs/files-backend.c44
-rw-r--r--refs/refs-internal.h4
2 files changed, 4 insertions, 44 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 83ea080..9d08e84 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2240,50 +2240,6 @@ static int files_create_symref(struct ref_store *ref_store,
return ret;
}
-int set_worktree_head_symref(const char *gitdir, const char *target, const char *logmsg)
-{
- /*
- * FIXME: this obviously will not work well for future refs
- * backends. This function needs to die.
- */
- struct files_ref_store *refs =
- files_downcast(get_main_ref_store(),
- REF_STORE_WRITE,
- "set_head_symref");
-
- static struct lock_file head_lock;
- struct ref_lock *lock;
- struct strbuf head_path = STRBUF_INIT;
- const char *head_rel;
- int ret;
-
- strbuf_addf(&head_path, "%s/HEAD", absolute_path(gitdir));
- if (hold_lock_file_for_update(&head_lock, head_path.buf,
- LOCK_NO_DEREF) < 0) {
- struct strbuf err = STRBUF_INIT;
- unable_to_lock_message(head_path.buf, errno, &err);
- error("%s", err.buf);
- strbuf_release(&err);
- strbuf_release(&head_path);
- return -1;
- }
-
- /* head_rel will be "HEAD" for the main tree, "worktrees/wt/HEAD" for
- linked trees */
- head_rel = remove_leading_path(head_path.buf,
- absolute_path(get_git_common_dir()));
- /* to make use of create_symref_locked(), initialize ref_lock */
- lock = xcalloc(1, sizeof(struct ref_lock));
- lock->lk = &head_lock;
- lock->ref_name = xstrdup(head_rel);
-
- ret = create_symref_locked(refs, lock, head_rel, target, logmsg);
-
- unlock_ref(lock); /* will free lock */
- strbuf_release(&head_path);
- return ret;
-}
-
static int files_reflog_exists(struct ref_store *ref_store,
const char *refname)
{
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index 3d46131..12cf4e4 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -482,6 +482,10 @@ struct ref_store;
#define REF_STORE_WRITE (1 << 1) /* can perform update operations */
#define REF_STORE_ODB (1 << 2) /* has access to object database */
#define REF_STORE_MAIN (1 << 3)
+#define REF_STORE_ALL_CAPS (REF_STORE_READ | \
+ REF_STORE_WRITE | \
+ REF_STORE_ODB | \
+ REF_STORE_MAIN)
/*
* Initialize the ref_store for the specified gitdir. These functions