diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-05-16 05:51:51 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-05-16 05:51:51 +0300 |
commit | 4b44b7b1df44d371eaf3fbed75829d1a749bc7df (patch) | |
tree | d8ea9ed31a6946e476db01034a653a2bbd86084c /refs | |
parent | a0ab83ebd807f2bfe1a565ff94fe7d3c6903efee (diff) | |
parent | d026a25657cbe15ceb6bcb5d5047a36a0a70b33e (diff) |
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.c | 44 | ||||
-rw-r--r-- | refs/refs-internal.h | 4 |
2 files changed, 4 insertions, 44 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index 83ea080e01..9d08e84ded 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 3d46131efb..12cf4e4718 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 |