On Mon, Jul 13, 2015 at 2:36 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Eric Sunshine <sunshine@xxxxxxxxxxxxxx> writes: >> This series eliminates git-checkout from the picture by instead >> employing "git reset --hard"[2] to populate the new worktree initially. > > A few comments on things I noticed while reading (mostly coming from > the original before this patch series): > > - What does this comment apply to? > > /* > * $GIT_COMMON_DIR/HEAD is practically outside > * $GIT_DIR so resolve_ref_unsafe() won't work (it > * uses git_path). Parse the ref ourselves. > */ > > It appears in front of a call to check-linked-checkout, but I > think the comment attempts to explain why it manually decides > what the path should be in that function, so perhaps move it to > the callee from the caller? The placement of the comment in the original code wasn't bad, but after patch 3/16 moves code around, the comment does become somewhat confusing, so moving it to the callee seems a reasonable idea. > - check_linked_checkout() when trying to decide what branch is > checked out assumes HEAD is always a regular file, but I do not > think we have dropped the support of SYMLINK_HEAD yet. It needs > to check st_mode and readlink(2), like resolve_ref_unsafe() does. Hmm, I wasn't aware of SYMLINK_HEAD (and don't know if Duy was). The related code in resolve_ref_unsafe() is fairly involved, worrying about race conditions and such, however, I guess check_linked_checkout()'s implementation can perhaps be simpler, as it's probably far less catastrophic for it to give the wrong answer (or just die) under such a race? > - After a new skelton worktree is set up, the code runs a few > commands to finish populating it, under a different pair of > GIT_DIR/GIT_WORK_TREE, but the function does so with setenv(); it > may be cleaner to use cp.env[] for it, as the process we care > about using the updated environment is not "worktree add" command > we are running ourselves, but "update-ref/symbolic-ref" and > "reset" commands that run in the new worktree. After sending the series, I was realized that this could be done more cleanly with -C, but that would have to be repeated for each command, so cp.env[] might indeed be a better choice. > Other than that, looks nicely done. > > I however have to wonder if the stress on "reset --hard" on log > messages of various commits (and in the endgame) is somewhat > misplaced. > > The primary thing we wanted to see, which this series nicely brings > us, is to remove "new-worktree-mode" hack from "checkout" (in other > words, instead of "reset --hard", "checkout -f" would also have been > a satisfactory endgame). I'll see if the commit messages can be reworded a bit without becoming too wordy. ("git reset --hard" has a nice conciseness.) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html