From: Eric Sunshine <sunshine@sunshineco.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>,
Duy Nguyen <pclouds@gmail.com>,
Michael J Gruber <git@drmicha.warpmail.net>,
Eric Sunshine <sunshine@sunshineco.com>
Subject: [PATCH v2 18/20] worktree: avoid resolving HEAD unnecessarily
Date: Thu, 16 Jul 2015 04:20:23 -0400 [thread overview]
Message-ID: <1437034825-32054-19-git-send-email-sunshine@sunshineco.com> (raw)
In-Reply-To: <1437034825-32054-1-git-send-email-sunshine@sunshineco.com>
Now that git-worktree sets HEAD explicitly to its final value via either
git-symbolic-ref or git-update-ref, rather than relying upon
git-checkout to do so, the "hack" for pacifying is_git_directory() with
a temporary HEAD, though still necessary, can be simplified.
Since the real HEAD is now populated with its proper final value, the
value of the temporary HEAD truly no longer matters, and any value which
looks like an object ID is good enough to satisfy is_git_directory().
Therefore, just set the temporary HEAD to a literal value rather than
going through the effort of resolving the current branch's HEAD.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
No changes since v1.
builtin/worktree.c | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 59609e3..54f2f35 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -192,7 +192,6 @@ static int add_worktree(const char *path, const char *refname,
int counter = 0, len, ret;
struct strbuf symref = STRBUF_INIT;
struct commit *commit = NULL;
- unsigned char rev[20];
if (file_exists(path) && !is_empty_dir(path))
die(_("'%s' already exists"), path);
@@ -253,20 +252,14 @@ static int add_worktree(const char *path, const char *refname,
real_path(get_git_common_dir()), name);
/*
* This is to keep resolve_ref() happy. We need a valid HEAD
- * or is_git_directory() will reject the directory. Moreover, HEAD
- * in the new worktree must resolve to the same value as HEAD in
- * the current tree since the command invoked to populate the new
- * worktree will be handed the branch/ref specified by the user.
- * For instance, if the user asks for the new worktree to be based
- * at HEAD~5, then the resolved HEAD~5 in the new worktree must
- * match the resolved HEAD~5 in the current tree in order to match
- * the user's expectation.
+ * or is_git_directory() will reject the directory. Any value which
+ * looks like an object ID will do since it will be immediately
+ * replaced by the symbolic-ref or update-ref invocation in the new
+ * worktree.
*/
- if (!resolve_ref_unsafe("HEAD", 0, rev, NULL))
- die(_("unable to resolve HEAD"));
strbuf_reset(&sb);
strbuf_addf(&sb, "%s/HEAD", sb_repo.buf);
- write_file(sb.buf, 1, "%s\n", sha1_to_hex(rev));
+ write_file(sb.buf, 1, "0000000000000000000000000000000000000000\n");
strbuf_reset(&sb);
strbuf_addf(&sb, "%s/commondir", sb_repo.buf);
write_file(sb.buf, 1, "../..\n");
--
2.5.0.rc2.378.g0af52e8
next prev parent reply other threads:[~2015-07-16 8:22 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-16 8:20 [PATCH v2 00/20] rid git-checkout of too-intimate knowledge of new worktree Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 01/20] checkout: avoid resolving HEAD unnecessarily Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 02/20] checkout: name check_linked_checkouts() more meaningfully Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 03/20] checkout: improve die_if_checked_out() robustness Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 04/20] checkout: die_if_checked_out: simplify strbuf management Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 05/20] checkout: generalize die_if_checked_out() branch name argument Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 06/20] checkout: check_linked_checkout: improve "already checked out" aesthetic Eric Sunshine
2015-07-16 17:55 ` Junio C Hamano
2015-07-17 0:32 ` Eric Sunshine
2015-07-17 1:42 ` Duy Nguyen
2015-07-16 8:20 ` [PATCH v2 07/20] checkout: check_linked_checkout: simplify symref parsing Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 08/20] checkout: teach check_linked_checkout() about symbolic link HEAD Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 09/20] branch: publish die_if_checked_out() Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 10/20] worktree: simplify new branch (-b/-B) option checking Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 11/20] worktree: introduce options container Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 12/20] worktree: make --detach mutually exclusive with -b/-B Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 13/20] worktree: make branch creation distinct from worktree population Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 14/20] worktree: elucidate environment variables intended for child processes Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 15/20] worktree: add_worktree: construct worktree-population command locally Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 16/20] worktree: detect branch-name/detached and error conditions locally Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 17/20] worktree: make setup of new HEAD distinct from worktree population Eric Sunshine
2015-07-16 8:20 ` Eric Sunshine [this message]
2015-07-16 8:20 ` [PATCH v2 19/20] worktree: populate via "git reset --hard" rather than "git checkout" Eric Sunshine
2015-07-16 8:20 ` [PATCH v2 20/20] checkout: drop intimate knowledge of newly created worktree Eric Sunshine
2015-07-16 18:13 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1437034825-32054-19-git-send-email-sunshine@sunshineco.com \
--to=sunshine@sunshineco.com \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).