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

Re: [PATCH v6 00/32] Support multiple checkouts

From
Dennis Kaarsemaker <dennis@kaarsemaker.net>
Date
Jul 11, 2014, 07:13 UTC
Message-ID
<1405062810.23880.6.camel@spirit>
In-Reply-To
<1404891197-18067-1-git-send-email-pclouds@gmail.com>
Tested-by: Dennis Kaarsemaker <dennis@kaarsemaker.net>

I've been using this branch for a little while now and have no breakages to report. Max Kirillov reported some bugs in the interaction with submodules which I plan to chase when I have some time unless someone beats me to it :)

On wo, 2014-07-09 at 14:32 +0700, Nguyễn Thái Ngọc Duy wrote:
Show 102 quoted lines
> This is basically a reroll from what was parked on 'pu' with two
> new patches at the end: one to not share info/sparse-checkout
> across worktrees, and one to allow 'checkout --to` from a bare
> repository.
> 
> I cherry-picked two patches from jk/xstrfmt (on next) because they
> result in non-trivial conflicts. When this series is merged with
> jk/xstrfmt, you still get conflicts in environment.c, but you can just
> pick up my changes and drop Jeff's.
> 
> Dennis Kaarsemaker (1):
>   checkout: don't require a work tree when checking out into a new one
> 
> Jeff King (2):
>   setup_git_env: use git_pathdup instead of xmalloc + sprintf
>   setup_git_env(): introduce git_path_from_env() helper
> 
> Nguyễn Thái Ngọc Duy (29):
>   path.c: make get_pathname() return strbuf instead of static buffer
>   path.c: make get_pathname() call sites return const char *
>   git_snpath(): retire and replace with strbuf_git_path()
>   path.c: rename vsnpath() to do_git_path()
>   path.c: group git_path(), git_pathdup() and strbuf_git_path() together
>   git_path(): be aware of file relocation in $GIT_DIR
>   *.sh: respect $GIT_INDEX_FILE
>   reflog: avoid constructing .lock path with git_path
>   fast-import: use git_path() for accessing .git dir instead of get_git_dir()
>   commit: use SEQ_DIR instead of hardcoding "sequencer"
>   $GIT_COMMON_DIR: a new environment variable
>   git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects
>   *.sh: avoid hardcoding $GIT_DIR/hooks/...
>   git-stash: avoid hardcoding $GIT_DIR/logs/....
>   setup.c: convert is_git_directory() to use strbuf
>   setup.c: detect $GIT_COMMON_DIR in is_git_directory()
>   setup.c: convert check_repository_format_gently to use strbuf
>   setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()
>   setup.c: support multi-checkout repo setup
>   wrapper.c: wrapper to open a file, fprintf then close
>   use new wrapper write_file() for simple file writing
>   checkout: support checking out into a new working directory
>   checkout: clean up half-prepared directories in --to mode
>   checkout: detach if the branch is already checked out elsewhere
>   prune: strategies for linked checkouts
>   gc: style change -- no SP before closing bracket
>   gc: support prune --repos
>   count-objects: report unused files in $GIT_DIR/repos/...
>   git_path(): keep "info/sparse-checkout" per work-tree
> 
>  Documentation/config.txt               |   9 ++
>  Documentation/git-checkout.txt         |  34 +++++
>  Documentation/git-prune.txt            |   3 +
>  Documentation/git-rev-parse.txt        |  10 ++
>  Documentation/git.txt                  |   9 ++
>  Documentation/gitrepository-layout.txt |  75 ++++++++--
>  builtin/branch.c                       |   4 +-
>  builtin/checkout.c                     | 248 ++++++++++++++++++++++++++++++++-
>  builtin/clone.c                        |   9 +-
>  builtin/commit.c                       |   2 +-
>  builtin/count-objects.c                |   4 +-
>  builtin/fetch.c                        |   5 +-
>  builtin/fsck.c                         |   4 +-
>  builtin/gc.c                           |  21 ++-
>  builtin/init-db.c                      |   7 +-
>  builtin/prune.c                        |  74 ++++++++++
>  builtin/receive-pack.c                 |   2 +-
>  builtin/reflog.c                       |   2 +-
>  builtin/remote.c                       |   2 +-
>  builtin/repack.c                       |   8 +-
>  builtin/rev-parse.c                    |  11 ++
>  cache.h                                |  17 ++-
>  daemon.c                               |  11 +-
>  environment.c                          |  45 ++++--
>  fast-import.c                          |   7 +-
>  git-am.sh                              |  22 +--
>  git-pull.sh                            |   2 +-
>  git-rebase--interactive.sh             |   6 +-
>  git-rebase--merge.sh                   |   6 +-
>  git-rebase.sh                          |   4 +-
>  git-sh-setup.sh                        |   2 +-
>  git-stash.sh                           |   6 +-
>  git.c                                  |   2 +-
>  notes-merge.c                          |   6 +-
>  path.c                                 | 234 +++++++++++++++++++++----------
>  refs.c                                 |  86 +++++++-----
>  refs.h                                 |   2 +-
>  run-command.c                          |   4 +-
>  run-command.h                          |   2 +-
>  setup.c                                | 124 +++++++++++++----
>  sha1_file.c                            |   2 +-
>  submodule.c                            |   9 +-
>  t/t0060-path-utils.sh                  |  35 +++++
>  t/t1501-worktree.sh                    |  76 ++++++++++
>  t/t1510-repo-setup.sh                  |   1 +
>  t/t2025-checkout-to.sh (new +x)        |  72 ++++++++++
>  templates/hooks--applypatch-msg.sample |   4 +-
>  templates/hooks--pre-applypatch.sample |   4 +-
>  trace.c                                |   1 +
>  transport.c                            |   8 +-
>  wrapper.c                              |  31 +++++
>  51 files changed, 1109 insertions(+), 265 deletions(-)
>  create mode 100755 t/t2025-checkout-to.sh
> 
-- 
Dennis Kaarsemaker
www.kaarsemaker.net
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 39 of 83 in “Support multiple checkouts”
  1. 00/32 Support multiple checkoutsNguyễn Thái Ngọc Duy, Jul 9, 2014
  2. 01/32 path.c: make get_pathname() return strbuf instead of static bufferNguyễn Thái Ngọc Duy, Jul 9, 2014
  3. 02/32 path.c: make get_pathname() call sites return const char *Nguyễn Thái Ngọc Duy, Jul 9, 2014
  4. 03/32 git_snpath(): retire and replace with strbuf_git_path()Nguyễn Thái Ngọc Duy, Jul 9, 2014
  5. 04/32 path.c: rename vsnpath() to do_git_path()Nguyễn Thái Ngọc Duy, Jul 9, 2014
  6. 05/32 path.c: group git_path(), git_pathdup() and strbuf_git_path() togetherNguyễn Thái Ngọc Duy, Jul 9, 2014
  7. 06/32 setup_git_env: use git_pathdup instead of xmalloc + sprintfNguyễn Thái Ngọc Duy, Jul 9, 2014
  8. 07/32 setup_git_env(): introduce git_path_from_env() helperNguyễn Thái Ngọc Duy, Jul 9, 2014
  9. 08/32 git_path(): be aware of file relocation in $GIT_DIRNguyễn Thái Ngọc Duy, Jul 9, 2014
  10. 09/32 *.sh: respect $GIT_INDEX_FILENguyễn Thái Ngọc Duy, Jul 9, 2014
  11. 10/32 reflog: avoid constructing .lock path with git_pathNguyễn Thái Ngọc Duy, Jul 9, 2014
  12. 11/32 fast-import: use git_path() for accessing .git dir instead of get_git_dir()Nguyễn Thái Ngọc Duy, Jul 9, 2014
  13. 12/32 commit: use SEQ_DIR instead of hardcoding "sequencer"Nguyễn Thái Ngọc Duy, Jul 9, 2014
  14. 13/32 $GIT_COMMON_DIR: a new environment variableNguyễn Thái Ngọc Duy, Jul 9, 2014
  15. 14/32 git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objectsNguyễn Thái Ngọc Duy, Jul 9, 2014
  16. 15/32 *.sh: avoid hardcoding $GIT_DIR/hooks/...Nguyễn Thái Ngọc Duy, Jul 9, 2014
  17. 16/32 git-stash: avoid hardcoding $GIT_DIR/logs/....Nguyễn Thái Ngọc Duy, Jul 9, 2014
  18. 17/32 setup.c: convert is_git_directory() to use strbufNguyễn Thái Ngọc Duy, Jul 9, 2014
  19. 18/32 setup.c: detect $GIT_COMMON_DIR in is_git_directory()Nguyễn Thái Ngọc Duy, Jul 9, 2014
  20. 19/32 setup.c: convert check_repository_format_gently to use strbufNguyễn Thái Ngọc Duy, Jul 9, 2014
  21. 20/32 setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()Nguyễn Thái Ngọc Duy, Jul 9, 2014
  22. 21/32 setup.c: support multi-checkout repo setupNguyễn Thái Ngọc Duy, Jul 9, 2014
  23. 22/32 wrapper.c: wrapper to open a file, fprintf then closeNguyễn Thái Ngọc Duy, Jul 9, 2014
  24. 23/32 use new wrapper write_file() for simple file writingNguyễn Thái Ngọc Duy, Jul 9, 2014
  25. 24/32 checkout: support checking out into a new working directoryNguyễn Thái Ngọc Duy, Jul 9, 2014
  26. 25/32 checkout: clean up half-prepared directories in --to modeNguyễn Thái Ngọc Duy, Jul 9, 2014
  27. 26/32 checkout: detach if the branch is already checked out elsewhereNguyễn Thái Ngọc Duy, Jul 9, 2014
  28. Max KirillovJul 12, 2014
  29. 27/32 prune: strategies for linked checkoutsNguyễn Thái Ngọc Duy, Jul 9, 2014
  30. Eric SunshineJul 9, 2014
  31. 28/32 gc: style change -- no SP before closing bracketNguyễn Thái Ngọc Duy, Jul 9, 2014
  32. Eric SunshineJul 9, 2014
  33. Junio C HamanoJul 14, 2014
  34. 29/32 gc: support prune --reposNguyễn Thái Ngọc Duy, Jul 9, 2014
  35. Eric SunshineJul 9, 2014
  36. 30/32 count-objects: report unused files in $GIT_DIR/repos/...Nguyễn Thái Ngọc Duy, Jul 9, 2014
  37. 31/32 git_path(): keep "info/sparse-checkout" per work-treeNguyễn Thái Ngọc Duy, Jul 9, 2014
  38. 32/32 checkout: don't require a work tree when checking out into a new oneNguyễn Thái Ngọc Duy, Jul 9, 2014
  39. Dennis KaarsemakerJul 11, 2014
  40. 00/31 Support multiple checkoutsNguyễn Thái Ngọc Duy, Jul 13, 2014
  41. 01/31 path.c: make get_pathname() return strbuf instead of static bufferNguyễn Thái Ngọc Duy, Jul 13, 2014
  42. 02/31 path.c: make get_pathname() call sites return const char *Nguyễn Thái Ngọc Duy, Jul 13, 2014
  43. 03/31 git_snpath(): retire and replace with strbuf_git_path()Nguyễn Thái Ngọc Duy, Jul 13, 2014
  44. 04/31 path.c: rename vsnpath() to do_git_path()Nguyễn Thái Ngọc Duy, Jul 13, 2014
  45. 05/31 path.c: group git_path(), git_pathdup() and strbuf_git_path() togetherNguyễn Thái Ngọc Duy, Jul 13, 2014
  46. 06/31 git_path(): be aware of file relocation in $GIT_DIRNguyễn Thái Ngọc Duy, Jul 13, 2014
  47. 07/31 *.sh: respect $GIT_INDEX_FILENguyễn Thái Ngọc Duy, Jul 13, 2014
  48. 08/31 reflog: avoid constructing .lock path with git_pathNguyễn Thái Ngọc Duy, Jul 13, 2014
  49. 09/31 fast-import: use git_path() for accessing .git dir instead of get_git_dir()Nguyễn Thái Ngọc Duy, Jul 13, 2014
  50. 10/31 commit: use SEQ_DIR instead of hardcoding "sequencer"Nguyễn Thái Ngọc Duy, Jul 13, 2014
  51. 11/31 $GIT_COMMON_DIR: a new environment variableNguyễn Thái Ngọc Duy, Jul 13, 2014
  52. Eric SunshineJul 23, 2014
  53. 12/31 git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objectsNguyễn Thái Ngọc Duy, Jul 13, 2014
  54. 13/31 *.sh: avoid hardcoding $GIT_DIR/hooks/...Nguyễn Thái Ngọc Duy, Jul 13, 2014
  55. 14/31 git-stash: avoid hardcoding $GIT_DIR/logs/....Nguyễn Thái Ngọc Duy, Jul 13, 2014
  56. 15/31 setup.c: convert is_git_directory() to use strbufNguyễn Thái Ngọc Duy, Jul 13, 2014
  57. 16/31 setup.c: detect $GIT_COMMON_DIR in is_git_directory()Nguyễn Thái Ngọc Duy, Jul 13, 2014
  58. 17/31 setup.c: convert check_repository_format_gently to use strbufNguyễn Thái Ngọc Duy, Jul 13, 2014
  59. 18/31 setup.c: detect $GIT_COMMON_DIR check_repository_format_gently()Nguyễn Thái Ngọc Duy, Jul 13, 2014
  60. 19/31 setup.c: support multi-checkout repo setupNguyễn Thái Ngọc Duy, Jul 13, 2014
  61. 20/31 wrapper.c: wrapper to open a file, fprintf then closeNguyễn Thái Ngọc Duy, Jul 13, 2014
  62. 21/31 use new wrapper write_file() for simple file writingNguyễn Thái Ngọc Duy, Jul 13, 2014
  63. 22/31 checkout: support checking out into a new working directoryNguyễn Thái Ngọc Duy, Jul 13, 2014
  64. Max KirillovJul 17, 2014
  65. Junio C HamanoJul 17, 2014
  66. Eric SunshineJul 18, 2014
  67. 23/31 checkout: clean up half-prepared directories in --to modeNguyễn Thái Ngọc Duy, Jul 13, 2014
  68. Eric SunshineJul 20, 2014
  69. Eric SunshineJul 21, 2014
  70. Duy NguyenJul 23, 2014
  71. 24/31 checkout: detach if the branch is already checked out elsewhereNguyễn Thái Ngọc Duy, Jul 13, 2014
  72. 25/31 prune: strategies for linked checkoutsNguyễn Thái Ngọc Duy, Jul 13, 2014
  73. Thomas RastJul 18, 2014
  74. Duy NguyenJul 19, 2014
  75. 26/31 gc: style change -- no SP before closing bracketNguyễn Thái Ngọc Duy, Jul 13, 2014
  76. 27/31 gc: factor out gc.pruneexpire parsing codeNguyễn Thái Ngọc Duy, Jul 13, 2014
  77. 28/31 gc: support prune --reposNguyễn Thái Ngọc Duy, Jul 13, 2014
  78. 29/31 count-objects: report unused files in $GIT_DIR/repos/...Nguyễn Thái Ngọc Duy, Jul 13, 2014
  79. 30/31 git_path(): keep "info/sparse-checkout" per work-treeNguyễn Thái Ngọc Duy, Jul 13, 2014
  80. 31/31 checkout: don't require a work tree when checking out into a new oneNguyễn Thái Ngọc Duy, Jul 13, 2014
  81. Junio C HamanoJul 14, 2014
  82. Duy NguyenJul 14, 2014
  83. Junio C HamanoJul 14, 2014

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.