refs: kill set_worktree_head_symref()

70999e9cec (branch -m: update all per-worktree HEADs - 2016-03-27)
added this function in order to update HEADs of all relevant
worktrees, when a branch is renamed.

It, as a public ref api, kind of breaks abstraction when it uses
internal functions of files backend. With the introduction of
refs_create_symref(), we can move back pretty close to the code before
70999e9cec, where create_symref() was used for updating HEAD.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2017-04-24 17:01:24 +07:00
committed by Junio C Hamano
parent fa099d2322
commit d026a25657
4 changed files with 18 additions and 60 deletions

View File

@ -3160,50 +3160,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)
{