git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 24/25] worktree move: accept destination as directory

From
Eric Sunshine <sunshine@sunshineco.com>
Date
May 11, 2016, 17:32 UTC
Message-ID
<CAPig+cTB8tdPo=wd5UdB84owKJ6c5hj6H9d4_YGDRecBdUE0vA@mail.gmail.com>
In-Reply-To
<CACsJy8CCAan9ALxULPFeGSU7wsfwbrywRWFr4Hsjx3=PGwosLA@mail.gmail.com>
On Wed, May 11, 2016 at 9:34 AM, Duy Nguyen <pclouds@gmail.com> wrote:
Show 17 quoted lines
> On Wed, May 11, 2016 at 11:43 AM, Eric Sunshine <sunshine@sunshineco.com> wrote:
>> On Wed, Apr 13, 2016 at 9:15 AM, Nguyễn Thái Ngọc Duy <pclouds@gmail.com> wrote:
>>> +       if (is_directory(dst.buf)) {
>>> +               const char *sep = strrchr(wt->path, '/');
>>
>> Does this need to take Windows into account?
>
> wt->path comes from $GIT_DIR/worktrees/xxx/gitdir, which normally uses
> forward slashes, so we should be safe. We already rely on forward
> slashes in get_linked_worktree()
>
>> Perhaps git_find_last_dir_sep()?
>
> But this is probably a good thing to do anyway, to be more robust in
> future. But it could confuse the reader later on why it's necessary
> when backward slashes can't exist in wt->path. I don't know. Maybe
> just have a comment that backward slashes can't never appear here?

As this path is read from a file git itself creates, and if we know that it will always contain forward slashes, then I agree that it could be potentially confusing to later readers to see git_find_last_dir_sep(). So, keeping it as-is seems correct.

Not sure if it needs a comment. I reviewed this rather quickly since (I think) you plan on re-rolling it and I'm far behind on my reviews. Consequently, I didn't check the existing code, and reviewed only within the context of the patch itself. If the end result is that it's clear from reading the code that it will always contain forward slashes, then a comment would be redundant. You could perhaps mention in the commit message that the slash will always be forward, which should satisfy future reviewers and readers of the code once its in the tree.

Show 7 quoted lines
> There is also a potential problem with find_worktree_by_path(). I was
> counting on real_path() to normalize paths and could simply do
> strcmp_icase (or its new name, fspathcmp). But real_path() does not
> seem to convert unify slashes. I will need to have a closer look at
> this. Hopefully prefix_filename() already makes sure everything uses
> forward slashes. Or maybe we could improve fspathcmp to see '/' and
> '\' the same thing on Windows.

If we look at fspathcmp() as a function which performs whatever magic is needed to make comparisons work on a platform/filesystem, then it might indeed be reasonable to enhance it to recognize '/' and '\' as equivalent (with possible caveats for Windows corner cases).

Previous: Duy NguyenNext: Johannes Sixt
Message 28 of 35 in “worktree lock, move, remove and unlock”
  1. 00/25 worktree lock, move, remove and unlockNguyễn Thái Ngọc Duy, Apr 13, 2016
  2. 01/25 usage.c: move format processing out of die_errno()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  3. 02/25 usage.c: add sys_error() that prints strerror() automaticallyNguyễn Thái Ngọc Duy, Apr 13, 2016
  4. 03/25 copy.c: import copy_file() from busyboxNguyễn Thái Ngọc Duy, Apr 13, 2016
  5. 04/25 copy.c: delete unused code in copy_file()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  6. 05/25 copy.c: convert bb_(p)error_msg to (sys_)errorNguyễn Thái Ngọc Duy, Apr 13, 2016
  7. 06/25 copy.c: style fixNguyễn Thái Ngọc Duy, Apr 13, 2016
  8. 07/25 copy.c: convert copy_file() to copy_dir_recursively()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  9. 08/25 completion: support git-worktreeNguyễn Thái Ngọc Duy, Apr 13, 2016
  10. 09/25 git-worktree.txt: keep subcommand listing in alphabetical orderNguyễn Thái Ngọc Duy, Apr 13, 2016
  11. 10/25 path.c: add git_common_path() and strbuf_git_common_path()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  12. 11/25 worktree.c: use is_dot_or_dotdot()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  13. 12/25 worktree.c: store "id" instead of "git_dir"Nguyễn Thái Ngọc Duy, Apr 13, 2016
  14. 13/25 worktree.c: add clear_worktree()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  15. 14/25 worktree.c: add find_worktree_by_path()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  16. 15/25 worktree.c: add is_main_worktree()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  17. 16/25 worktree.c: add validate_worktree()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  18. 17/25 worktree.c: add update_worktree_location()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  19. 18/25 worktree.c: add is_worktree_locked()Nguyễn Thái Ngọc Duy, Apr 13, 2016
  20. 19/25 worktree: avoid 0{40}, too many zeroes, hard to readNguyễn Thái Ngọc Duy, Apr 13, 2016
  21. 20/25 worktree: simplify prefixing pathsNguyễn Thái Ngọc Duy, Apr 13, 2016
  22. 21/25 worktree: add "lock" commandNguyễn Thái Ngọc Duy, Apr 13, 2016
  23. 22/25 worktree: add "unlock" commandNguyễn Thái Ngọc Duy, Apr 13, 2016
  24. 23/25 worktree: add "move" commmandNguyễn Thái Ngọc Duy, Apr 13, 2016
  25. 24/25 worktree move: accept destination as directoryNguyễn Thái Ngọc Duy, Apr 13, 2016
  26. Eric SunshineMay 11, 2016
  27. Duy NguyenMay 11, 2016
  28. Eric SunshineMay 11, 2016
  29. Johannes SixtMay 11, 2016
  30. Junio C HamanoMay 11, 2016
  31. Johannes SixtMay 12, 2016
  32. 25/25 worktree: add "remove" commandNguyễn Thái Ngọc Duy, Apr 13, 2016
  33. Junio C HamanoApr 14, 2016
  34. Duy NguyenApr 15, 2016
  35. Junio C HamanoApr 15, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.