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

2014-07-11 Thread Dennis Kaarsemaker
Tested-by: Dennis Kaarsemaker den...@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:
 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   

[PATCH v6 00/32] Support multiple checkouts

2014-07-09 Thread Nguyễn Thái Ngọc Duy
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