git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v3 05/25] Make git_path() aware of file relocation in $GIT_DIR
Date: Tue, 18 Feb 2014 20:39:54 +0700	[thread overview]
Message-ID: <1392730814-19656-6-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1392730814-19656-1-git-send-email-pclouds@gmail.com>

We allow the user to relocate certain paths out of $GIT_DIR via
environment variables, e.g. GIT_OBJECT_DIRECTORY, GIT_INDEX_FILE and
GIT_GRAFT_FILE. All callers are not supposed to use git_path() or
git_pathdup() to get those paths. Instead they must use
get_object_directory(), get_index_file() and get_graft_file()
respectively. This is inconvenient and could be missed in review
(there's git_path("objects/info/alternates") somewhere in
sha1_file.c).

This patch makes git_path() and git_pathdup() understand those
environment variables. So if you set GIT_OBJECT_DIRECTORY to /foo/bar,
git_path("objects/abc") should return /tmp/bar/abc. The same is done
for the two remaining env variables.

"git rev-parse --git-path" is the wrapper for script use.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Documentation/git-rev-parse.txt |  5 +++++
 builtin/rev-parse.c             |  7 +++++++
 cache.h                         |  1 +
 environment.c                   |  9 ++++++--
 path.c                          | 46 +++++++++++++++++++++++++++++++++++++++++
 t/t0060-path-utils.sh           | 19 +++++++++++++++++
 6 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 0d2cdcd..33e4e90 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -232,6 +232,11 @@ print a message to stderr and exit with nonzero status.
 	repository.  If <path> is a gitfile then the resolved path
 	to the real repository is printed.
 
+--git-path <path>::
+	Resolve "$GIT_DIR/<path>" and takes other path relocation
+	variables such as $GIT_OBJECT_DIRECTORY,
+	$GIT_INDEX_FILE... into account.
+
 --show-cdup::
 	When the command is invoked from a subdirectory, show the
 	path of the top-level directory relative to the current
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index aaeb611..e50bc65 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -518,6 +518,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
 	for (i = 1; i < argc; i++) {
 		const char *arg = argv[i];
 
+		if (!strcmp(arg, "--git-path")) {
+			if (!argv[i + 1])
+				die("--git-path requires an argument");
+			puts(git_path("%s", argv[i + 1]));
+			i++;
+			continue;
+		}
 		if (as_is) {
 			if (show_file(arg, output_prefix) && as_is < 2)
 				verify_filename(prefix, arg, 0);
diff --git a/cache.h b/cache.h
index 8d3697e..6c08e4a 100644
--- a/cache.h
+++ b/cache.h
@@ -585,6 +585,7 @@ extern int fsync_object_files;
 extern int core_preload_index;
 extern int core_apply_sparse_checkout;
 extern int precomposed_unicode;
+extern int git_db_env, git_index_env, git_graft_env;
 
 /*
  * The character that begins a commented line in user-editable file
diff --git a/environment.c b/environment.c
index 4a3437d..f513479 100644
--- a/environment.c
+++ b/environment.c
@@ -82,6 +82,7 @@ static size_t namespace_len;
 
 static const char *git_dir;
 static char *git_object_dir, *git_index_file, *git_graft_file;
+int git_db_env, git_index_env, git_graft_env;
 
 /*
  * Repository-local GIT_* environment variables; see cache.h for details.
@@ -137,15 +138,19 @@ static void setup_git_env(void)
 	if (!git_object_dir) {
 		git_object_dir = xmalloc(strlen(git_dir) + 9);
 		sprintf(git_object_dir, "%s/objects", git_dir);
-	}
+	} else
+		git_db_env = 1;
 	git_index_file = getenv(INDEX_ENVIRONMENT);
 	if (!git_index_file) {
 		git_index_file = xmalloc(strlen(git_dir) + 7);
 		sprintf(git_index_file, "%s/index", git_dir);
-	}
+	} else
+		git_index_env = 1;
 	git_graft_file = getenv(GRAFT_ENVIRONMENT);
 	if (!git_graft_file)
 		git_graft_file = git_pathdup("info/grafts");
+	else
+		git_graft_env = 1;
 	if (getenv(NO_REPLACE_OBJECTS_ENVIRONMENT))
 		read_replace_refs = 0;
 	namespace = expand_namespace(getenv(GIT_NAMESPACE_ENVIRONMENT));
diff --git a/path.c b/path.c
index e088c40..0f8c3dc 100644
--- a/path.c
+++ b/path.c
@@ -60,13 +60,59 @@ char *mksnpath(char *buf, size_t n, const char *fmt, ...)
 	return cleanup_path(buf);
 }
 
+static int dir_prefix(const char *buf, const char *dir)
+{
+	int len = strlen(dir);
+	return !strncmp(buf, dir, len) &&
+		(is_dir_sep(buf[len]) || buf[len] == '\0');
+}
+
+/* $buf =~ m|$dir/+$file| but without regex */
+static int is_dir_file(const char *buf, const char *dir, const char *file)
+{
+	int len = strlen(dir);
+	if (strncmp(buf, dir, len) || !is_dir_sep(buf[len]))
+		return 0;
+	while (is_dir_sep(buf[len]))
+		len++;
+	return !strcmp(buf + len, file);
+}
+
+static void replace_dir(struct strbuf *buf, int len, const char *newdir)
+{
+	int newlen = strlen(newdir);
+	int need_sep = (buf->buf[len] && !is_dir_sep(buf->buf[len])) &&
+		!is_dir_sep(newdir[newlen - 1]);
+	if (need_sep)
+		len--;	 /* keep one char, to be replaced with '/'  */
+	strbuf_splice(buf, 0, len, newdir, newlen);
+	if (need_sep)
+		buf->buf[newlen] = '/';
+}
+
+static void adjust_git_path(struct strbuf *buf, int git_dir_len)
+{
+	const char *base = buf->buf + git_dir_len;
+	if (git_graft_env && is_dir_file(base, "info", "grafts"))
+		strbuf_splice(buf, 0, buf->len,
+			      get_graft_file(), strlen(get_graft_file()));
+	else if (git_index_env && !strcmp(base, "index"))
+		strbuf_splice(buf, 0, buf->len,
+			      get_index_file(), strlen(get_index_file()));
+	else if (git_db_env && dir_prefix(base, "objects"))
+		replace_dir(buf, git_dir_len + 7, get_object_directory());
+}
+
 static void do_git_path(struct strbuf *buf, const char *fmt, va_list args)
 {
 	const char *git_dir = get_git_dir();
+	int gitdir_len;
 	strbuf_addstr(buf, git_dir);
 	if (buf->len && !is_dir_sep(buf->buf[buf->len - 1]))
 		strbuf_addch(buf, '/');
+	gitdir_len = buf->len;
 	strbuf_vaddf(buf, fmt, args);
+	adjust_git_path(buf, gitdir_len);
 	strbuf_cleanup_path(buf);
 }
 
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 07c10c8..1d29901 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -19,6 +19,14 @@ relative_path() {
 	"test \"\$(test-path-utils relative_path '$1' '$2')\" = '$expected'"
 }
 
+test_git_path() {
+	test_expect_success "git-path $1 $2 => $3" "
+		$1 git rev-parse --git-path $2 >actual &&
+		echo $3 >expect &&
+		test_cmp expect actual
+	"
+}
+
 # On Windows, we are using MSYS's bash, which mangles the paths.
 # Absolute paths are anchored at the MSYS installation directory,
 # which means that the path / accounts for this many characters:
@@ -223,4 +231,15 @@ relative_path "<null>"		"<empty>"	./
 relative_path "<null>"		"<null>"	./
 relative_path "<null>"		/foo/a/b	./
 
+test_git_path A=B                info/grafts .git/info/grafts
+test_git_path GIT_GRAFT_FILE=foo info/grafts foo
+test_git_path GIT_GRAFT_FILE=foo info/////grafts foo
+test_git_path GIT_INDEX_FILE=foo index foo
+test_git_path GIT_INDEX_FILE=foo index/foo .git/index/foo
+test_git_path GIT_INDEX_FILE=foo index2 .git/index2
+test_expect_success 'setup fake objects directory foo' 'mkdir foo'
+test_git_path GIT_OBJECT_DIRECTORY=foo objects foo
+test_git_path GIT_OBJECT_DIRECTORY=foo objects/foo foo/foo
+test_git_path GIT_OBJECT_DIRECTORY=foo objects2 .git/objects2
+
 test_done
-- 
1.8.5.2.240.g8478abd

  parent reply	other threads:[~2014-02-18 13:40 UTC|newest]

Thread overview: 169+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-18 13:39 [PATCH v3 00/25] Support multiple checkouts Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` [PATCH v3 01/25] path.c: make get_pathname() return strbuf instead of static buffer Nguyễn Thái Ngọc Duy
2014-02-19 20:28   ` Junio C Hamano
2014-02-19 23:26   ` Junio C Hamano
2014-03-01  2:40     ` Duy Nguyen
2014-03-03 17:56       ` Junio C Hamano
2014-02-18 13:39 ` [PATCH v3 02/25] Convert git_snpath() to strbuf_git_path() Nguyễn Thái Ngọc Duy
2014-02-19 23:48   ` Junio C Hamano
2014-02-19 23:54     ` Duy Nguyen
2014-02-20  3:41       ` Junio C Hamano
2014-02-20  3:55         ` Duy Nguyen
2014-02-20 18:54           ` Junio C Hamano
2014-02-20 19:44   ` Junio C Hamano
2014-02-18 13:39 ` [PATCH v3 03/25] path.c: rename vsnpath() to do_git_path() Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` [PATCH v3 04/25] path.c: group git_path(), git_pathdup() and strbuf_git_path() together Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` Nguyễn Thái Ngọc Duy [this message]
2014-02-18 13:39 ` [PATCH v3 06/25] *.sh: respect $GIT_INDEX_FILE Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` [PATCH v3 07/25] reflog: avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2014-02-25 22:44   ` Junio C Hamano
2014-03-01  3:42     ` Duy Nguyen
2014-03-03 18:07       ` Junio C Hamano
2014-02-18 13:39 ` [PATCH v3 08/25] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` [PATCH v3 09/25] commit: use SEQ_DIR instead of hardcoding "sequencer" Nguyễn Thái Ngọc Duy
2014-02-18 13:39 ` [PATCH v3 10/25] Add new environment variable $GIT_COMMON_DIR Nguyễn Thái Ngọc Duy
2014-02-26  1:24   ` Eric Sunshine
2014-02-26 10:55     ` Duy Nguyen
2014-02-26 16:12       ` Philip Oakley
2014-02-26 17:23         ` Eric Sunshine
2014-02-26 19:43       ` Eric Sunshine
2014-02-26 23:58   ` Junio C Hamano
2014-02-27  3:03     ` Duy Nguyen
2014-02-18 13:40 ` [PATCH v3 11/25] git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects Nguyễn Thái Ngọc Duy
2014-02-27  0:00   ` Junio C Hamano
2014-02-18 13:40 ` [PATCH v3 12/25] *.sh: avoid hardcoding $GIT_DIR/hooks/ Nguyễn Thái Ngọc Duy
2014-02-18 13:40 ` [PATCH v3 13/25] git-stash: avoid hardcoding $GIT_DIR/logs/ Nguyễn Thái Ngọc Duy
2014-02-18 13:40 ` [PATCH v3 14/25] setup.c: convert is_git_directory() to use strbuf Nguyễn Thái Ngọc Duy
2014-02-19 20:17   ` Junio C Hamano
2014-02-20 13:04     ` Duy Nguyen
2014-02-20 19:06       ` Junio C Hamano
2014-02-20 19:36         ` Junio C Hamano
2014-03-01  2:50     ` [PATCH] strbuf: style fix -- top opening bracket on a separate line Nguyễn Thái Ngọc Duy
2014-02-21  3:38   ` [PATCH v3 14/25] setup.c: convert is_git_directory() to use strbuf Eric Sunshine
2014-02-18 13:40 ` [PATCH v3 15/25] setup.c: detect $GIT_COMMON_DIR in is_git_directory() Nguyễn Thái Ngọc Duy
2014-02-27  0:16   ` Junio C Hamano
2014-03-01  3:33     ` Duy Nguyen
2014-02-18 13:40 ` [PATCH v3 16/25] setup.c: convert check_repository_format_gently to use strbuf Nguyễn Thái Ngọc Duy
2014-02-27  0:18   ` Junio C Hamano
2014-02-18 13:40 ` [PATCH v3 17/25] setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() Nguyễn Thái Ngọc Duy
2014-02-27  0:22   ` Junio C Hamano
2014-02-27  2:43     ` Duy Nguyen
2014-02-27 17:48       ` Junio C Hamano
2014-02-18 13:40 ` [PATCH v3 18/25] setup.c: support multi-checkout repo setup Nguyễn Thái Ngọc Duy
2014-02-19 20:19   ` Junio C Hamano
2014-02-27 20:28   ` Junio C Hamano
2014-03-24 14:52   ` Torsten Bögershausen
2014-03-25 13:52     ` Duy Nguyen
2014-03-25 14:07       ` Duy Nguyen
2014-03-26 21:03         ` Junio C Hamano
2014-02-18 13:40 ` [PATCH v3 19/25] wrapper.c: wrapper to open a file, fprintf then close Nguyễn Thái Ngọc Duy
2014-02-18 13:40 ` [PATCH v3 20/25] use new wrapper write_file() for simple file writing Nguyễn Thái Ngọc Duy
2014-02-18 13:40 ` [PATCH v3 21/25] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2014-02-26 20:06   ` Eric Sunshine
2014-02-26 23:19     ` Duy Nguyen
2014-02-27  6:59       ` Eric Sunshine
2014-02-18 13:40 ` [PATCH v3 22/25] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2014-02-18 13:40 ` [PATCH v3 23/25] checkout: detach if the branch is already checked out elsewhere Nguyễn Thái Ngọc Duy
2014-02-19 20:20   ` Junio C Hamano
2014-02-19 21:52   ` Eric Sunshine
2014-02-18 13:40 ` [PATCH v3 24/25] prune: strategies for linked checkouts Nguyễn Thái Ngọc Duy
2014-02-19 20:32   ` Junio C Hamano
2014-02-19 20:42     ` Junio C Hamano
2014-02-20 13:15     ` Duy Nguyen
2014-02-20 19:55       ` Junio C Hamano
2014-02-19 22:08   ` Eric Sunshine
2014-02-19 22:53     ` Eric Sunshine
2014-02-20 13:19     ` Duy Nguyen
2014-02-18 13:40 ` [PATCH v3 25/25] gc: support prune --repos Nguyễn Thái Ngọc Duy
2014-02-19 20:22   ` Junio C Hamano
2014-02-19 20:57 ` [PATCH v3 00/25] Support multiple checkouts Junio C Hamano
2014-03-01 12:12 ` [PATCH v4 00/27] " Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 01/27] path.c: make get_pathname() return strbuf instead of static buffer Nguyễn Thái Ngọc Duy
2014-03-02 19:51     ` Eric Sunshine
2014-03-03  0:14       ` Duy Nguyen
2014-03-01 12:12   ` [PATCH v4 02/27] Convert git_snpath() to strbuf_git_path() Nguyễn Thái Ngọc Duy
2014-03-03  0:02     ` Eric Sunshine
2014-03-03  0:15       ` Duy Nguyen
2014-03-07  5:03         ` Duy Nguyen
2014-03-07  5:26           ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 03/27] path.c: rename vsnpath() to do_git_path() Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 04/27] path.c: group git_path(), git_pathdup() and strbuf_git_path() together Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 05/27] Make git_path() aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2014-03-03  1:34     ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 06/27] *.sh: respect $GIT_INDEX_FILE Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 07/27] reflog: avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 08/27] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 09/27] commit: use SEQ_DIR instead of hardcoding "sequencer" Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 10/27] Add new environment variable $GIT_COMMON_DIR Nguyễn Thái Ngọc Duy
2014-03-03  7:29     ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 11/27] git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 12/27] *.sh: avoid hardcoding $GIT_DIR/hooks/ Nguyễn Thái Ngọc Duy
2014-03-03  8:31     ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 13/27] git-stash: avoid hardcoding $GIT_DIR/logs/ Nguyễn Thái Ngọc Duy
2014-03-01 15:50     ` Torsten Bögershausen
2014-03-01 12:12   ` [PATCH v4 14/27] setup.c: convert is_git_directory() to use strbuf Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 15/27] setup.c: detect $GIT_COMMON_DIR in is_git_directory() Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 16/27] setup.c: convert check_repository_format_gently to use strbuf Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 17/27] setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 18/27] setup.c: support multi-checkout repo setup Nguyễn Thái Ngọc Duy
2014-03-05 19:42     ` Junio C Hamano
2014-03-08  1:55       ` Duy Nguyen
2014-03-01 12:12   ` [PATCH v4 19/27] wrapper.c: wrapper to open a file, fprintf then close Nguyễn Thái Ngọc Duy
2014-03-01 17:11     ` Torsten Bögershausen
2014-03-04  2:47       ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 20/27] use new wrapper write_file() for simple file writing Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 21/27] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2014-03-01 12:12   ` [PATCH v4 22/27] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2014-03-06 10:06     ` Eric Sunshine
2014-03-01 12:12   ` [PATCH v4 23/27] checkout: detach if the branch is already checked out elsewhere Nguyễn Thái Ngọc Duy
2014-03-01 12:13   ` [PATCH v4 24/27] prune: strategies for linked checkouts Nguyễn Thái Ngọc Duy
2014-03-01 17:12     ` Torsten Bögershausen
2014-03-02  0:01       ` Duy Nguyen
2014-03-05 20:07     ` Junio C Hamano
2014-03-01 12:13   ` [PATCH v4 25/27] gc: style change -- no SP before closing bracket Nguyễn Thái Ngọc Duy
2014-03-01 12:13   ` [PATCH v4 26/27] gc: support prune --repos Nguyễn Thái Ngọc Duy
2014-03-07  6:40     ` Eric Sunshine
2014-03-01 12:13   ` [PATCH v4 27/27] count-objects: report unused files in $GIT_DIR/repos/ Nguyễn Thái Ngọc Duy
2014-03-05  4:25     ` Eric Sunshine
2014-03-05 12:08       ` Duy Nguyen
2014-03-08  2:47   ` [PATCH v5 00/28] Support multiple checkouts Nguyễn Thái Ngọc Duy
2014-03-08  2:47     ` [PATCH v5 01/28] path.c: make get_pathname() return strbuf instead of static buffer Nguyễn Thái Ngọc Duy
2014-03-08  6:11       ` Torsten Bögershausen
2014-03-08  8:57         ` Duy Nguyen
2014-03-08  2:47     ` [PATCH v5 02/28] path.c: make get_pathname() call sites return const char * Nguyễn Thái Ngọc Duy
2014-03-08  2:47     ` [PATCH v5 03/28] Convert git_snpath() to strbuf_git_path() Nguyễn Thái Ngọc Duy
2014-03-17 18:11       ` Junio C Hamano
2014-03-08  2:47     ` [PATCH v5 04/28] path.c: rename vsnpath() to do_git_path() Nguyễn Thái Ngọc Duy
2014-03-08  2:47     ` [PATCH v5 05/28] path.c: group git_path(), git_pathdup() and strbuf_git_path() together Nguyễn Thái Ngọc Duy
2014-03-08  2:47     ` [PATCH v5 06/28] Make git_path() aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2014-03-09  8:19       ` Eric Sunshine
2014-03-08  2:47     ` [PATCH v5 07/28] *.sh: respect $GIT_INDEX_FILE Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 08/28] reflog: avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 09/28] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 10/28] commit: use SEQ_DIR instead of hardcoding "sequencer" Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 11/28] Add new environment variable $GIT_COMMON_DIR Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 12/28] git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 13/28] *.sh: avoid hardcoding $GIT_DIR/hooks/ Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 14/28] git-stash: avoid hardcoding $GIT_DIR/logs/ Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 15/28] setup.c: convert is_git_directory() to use strbuf Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 16/28] setup.c: detect $GIT_COMMON_DIR in is_git_directory() Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 17/28] setup.c: convert check_repository_format_gently to use strbuf Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 18/28] setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 19/28] setup.c: support multi-checkout repo setup Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 20/28] wrapper.c: wrapper to open a file, fprintf then close Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 21/28] use new wrapper write_file() for simple file writing Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 22/28] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 23/28] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 24/28] checkout: detach if the branch is already checked out elsewhere Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 25/28] prune: strategies for linked checkouts Nguyễn Thái Ngọc Duy
2014-03-09  8:20       ` Eric Sunshine
2014-03-08  2:48     ` [PATCH v5 26/28] gc: style change -- no SP before closing bracket Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 27/28] gc: support prune --repos Nguyễn Thái Ngọc Duy
2014-03-08  2:48     ` [PATCH v5 28/28] count-objects: report unused files in $GIT_DIR/repos/ Nguyễn Thái Ngọc Duy
2014-03-09  8:21       ` Eric Sunshine
2014-03-09 11:25         ` Duy Nguyen
2014-03-09  8:18     ` [PATCH v5 00/28] Support multiple checkouts Eric Sunshine
2014-07-06 20:46     ` Max Kirillov
2014-07-07 10:25       ` Duy Nguyen
2014-07-07 10:49         ` Dennis Kaarsemaker
2014-07-07 17:32           ` Max Kirillov

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1392730814-19656-6-git-send-email-pclouds@gmail.com \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    /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.
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 NNTP newsgroup(s).