From: Junio C Hamano <gitster@pobox.com>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v5 03/28] Convert git_snpath() to strbuf_git_path()
Date: Mon, 17 Mar 2014 11:11:52 -0700 [thread overview]
Message-ID: <xmqqvbvceluf.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1394246900-31535-4-git-send-email-pclouds@gmail.com> ("Nguyễn Thái Ngọc Duy"'s message of "Sat, 8 Mar 2014 09:47:55 +0700")
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> In the previous patch, git_snpath() is modified to allocate a new
> strbuf buffer because vsnpath() needs that. But that makes it awkward
> because git_snpath() receives a pre-allocated buffer from outside and
> has to copy data back. Rename it to strbuf_git_path() and make it
> receive strbuf directly.
>
> The conversion from git_snpath() to git_path() in
> update_refs_for_switch() is safe because that function does not keep
> any pointer to the round-robin buffer pool allocated by
> get_pathname().
s/that function does not/that function and all of its callers do not/
is the guarantee we need to say it is safe. And I think that holds
true.
Thanks.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> builtin/checkout.c | 25 +++++++++--------
> cache.h | 4 +--
> path.c | 11 ++------
> refs.c | 78 +++++++++++++++++++++++++++++++++---------------------
> refs.h | 2 +-
> 5 files changed, 65 insertions(+), 55 deletions(-)
>
> diff --git a/builtin/checkout.c b/builtin/checkout.c
> index 64c2aca..efb5e2f 100644
> --- a/builtin/checkout.c
> +++ b/builtin/checkout.c
> @@ -585,18 +585,21 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
> if (opts->new_orphan_branch) {
> if (opts->new_branch_log && !log_all_ref_updates) {
> int temp;
> - char log_file[PATH_MAX];
> - const char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
> + struct strbuf log_file = STRBUF_INIT;
> + int ret;
> + const char *ref_name;
>
> + ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
> temp = log_all_ref_updates;
> log_all_ref_updates = 1;
> - if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
> + ret = log_ref_setup(ref_name, &log_file);
> + log_all_ref_updates = temp;
> + strbuf_release(&log_file);
> + if (ret) {
> fprintf(stderr, _("Can not do reflog for '%s'\n"),
> opts->new_orphan_branch);
> - log_all_ref_updates = temp;
> return;
> }
> - log_all_ref_updates = temp;
> }
> }
> else
> @@ -651,14 +654,10 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
> new->name);
> }
> }
> - if (old->path && old->name) {
> - char log_file[PATH_MAX], ref_file[PATH_MAX];
> -
> - git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
> - git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
> - if (!file_exists(ref_file) && file_exists(log_file))
> - remove_path(log_file);
> - }
> + if (old->path && old->name &&
> + !file_exists(git_path("%s", old->path)) &&
> + file_exists(git_path("logs/%s", old->path)))
> + remove_path(git_path("logs/%s", old->path));
> }
> remove_branch_state();
> strbuf_release(&msg);
> diff --git a/cache.h b/cache.h
> index a344a5f..0fae730 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -646,8 +646,8 @@ extern int check_repository_format(void);
>
> extern char *mksnpath(char *buf, size_t n, const char *fmt, ...)
> __attribute__((format (printf, 3, 4)));
> -extern char *git_snpath(char *buf, size_t n, const char *fmt, ...)
> - __attribute__((format (printf, 3, 4)));
> +extern void strbuf_git_path(struct strbuf *sb, const char *fmt, ...)
> + __attribute__((format (printf, 2, 3)));
> extern char *git_pathdup(const char *fmt, ...)
> __attribute__((format (printf, 1, 2)));
> extern char *mkpathdup(const char *fmt, ...)
> diff --git a/path.c b/path.c
> index 36d461e..417df76 100644
> --- a/path.c
> +++ b/path.c
> @@ -70,19 +70,12 @@ static void vsnpath(struct strbuf *buf, const char *fmt, va_list args)
> strbuf_cleanup_path(buf);
> }
>
> -char *git_snpath(char *buf, size_t n, const char *fmt, ...)
> +void strbuf_git_path(struct strbuf *sb, const char *fmt, ...)
> {
> - struct strbuf sb = STRBUF_INIT;
> va_list args;
> va_start(args, fmt);
> - vsnpath(&sb, fmt, args);
> + vsnpath(sb, fmt, args);
> va_end(args);
> - if (sb.len >= n)
> - strlcpy(buf, bad_path, n);
> - else
> - memcpy(buf, sb.buf, sb.len + 1);
> - strbuf_release(&sb);
> - return buf;
> }
>
> char *git_pathdup(const char *fmt, ...)
> diff --git a/refs.c b/refs.c
> index f846f2f..c5613b0 100644
> --- a/refs.c
> +++ b/refs.c
> @@ -1325,10 +1325,12 @@ static const char *handle_missing_loose_ref(const char *refname,
>
> const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int reading, int *flag)
> {
> + struct strbuf sb_path = STRBUF_INIT;
> int depth = MAXDEPTH;
> ssize_t len;
> char buffer[256];
> static char refname_buffer[256];
> + const char *ret;
>
> if (flag)
> *flag = 0;
> @@ -1337,15 +1339,17 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> return NULL;
>
> for (;;) {
> - char path[PATH_MAX];
> + const char *path;
> struct stat st;
> char *buf;
> int fd;
>
> if (--depth < 0)
> - return NULL;
> + goto fail;
>
> - git_snpath(path, sizeof(path), "%s", refname);
> + strbuf_reset(&sb_path);
> + strbuf_git_path(&sb_path, "%s", refname);
> + path = sb_path.buf;
>
> /*
> * We might have to loop back here to avoid a race
> @@ -1359,10 +1363,11 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> stat_ref:
> if (lstat(path, &st) < 0) {
> if (errno == ENOENT)
> - return handle_missing_loose_ref(refname, sha1,
> - reading, flag);
> + ret = handle_missing_loose_ref(refname, sha1,
> + reading, flag);
> else
> - return NULL;
> + ret = NULL;
> + goto done;
> }
>
> /* Follow "normalized" - ie "refs/.." symlinks by hand */
> @@ -1373,7 +1378,7 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> /* inconsistent with lstat; retry */
> goto stat_ref;
> else
> - return NULL;
> + goto fail;
> }
> buffer[len] = 0;
> if (starts_with(buffer, "refs/") &&
> @@ -1389,7 +1394,7 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> /* Is it a directory? */
> if (S_ISDIR(st.st_mode)) {
> errno = EISDIR;
> - return NULL;
> + goto fail;
> }
>
> /*
> @@ -1402,12 +1407,13 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> /* inconsistent with lstat; retry */
> goto stat_ref;
> else
> - return NULL;
> + goto fail;
> }
> +
> len = read_in_full(fd, buffer, sizeof(buffer)-1);
> close(fd);
> if (len < 0)
> - return NULL;
> + goto fail;
> while (len && isspace(buffer[len-1]))
> len--;
> buffer[len] = '\0';
> @@ -1424,9 +1430,10 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> (buffer[40] != '\0' && !isspace(buffer[40]))) {
> if (flag)
> *flag |= REF_ISBROKEN;
> - return NULL;
> + goto fail;
> }
> - return refname;
> + ret = refname;
> + goto done;
> }
> if (flag)
> *flag |= REF_ISSYMREF;
> @@ -1436,10 +1443,15 @@ const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int rea
> if (check_refname_format(buf, REFNAME_ALLOW_ONELEVEL)) {
> if (flag)
> *flag |= REF_ISBROKEN;
> - return NULL;
> + goto fail;
> }
> refname = strcpy(refname_buffer, buf);
> }
> +fail:
> + ret = NULL;
> +done:
> + strbuf_release(&sb_path);
> + return ret;
> }
>
> char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag)
> @@ -2717,41 +2729,41 @@ static int copy_msg(char *buf, const char *msg)
> return cp - buf;
> }
>
> -int log_ref_setup(const char *refname, char *logfile, int bufsize)
> +int log_ref_setup(const char *refname, struct strbuf *logfile)
> {
> int logfd, oflags = O_APPEND | O_WRONLY;
>
> - git_snpath(logfile, bufsize, "logs/%s", refname);
> + strbuf_git_path(logfile, "logs/%s", refname);
> if (log_all_ref_updates &&
> (starts_with(refname, "refs/heads/") ||
> starts_with(refname, "refs/remotes/") ||
> starts_with(refname, "refs/notes/") ||
> !strcmp(refname, "HEAD"))) {
> - if (safe_create_leading_directories(logfile) < 0)
> + if (safe_create_leading_directories(logfile->buf) < 0)
> return error("unable to create directory for %s",
> - logfile);
> + logfile->buf);
> oflags |= O_CREAT;
> }
>
> - logfd = open(logfile, oflags, 0666);
> + logfd = open(logfile->buf, oflags, 0666);
> if (logfd < 0) {
> if (!(oflags & O_CREAT) && errno == ENOENT)
> return 0;
>
> if ((oflags & O_CREAT) && errno == EISDIR) {
> - if (remove_empty_directories(logfile)) {
> + if (remove_empty_directories(logfile->buf)) {
> return error("There are still logs under '%s'",
> - logfile);
> + logfile->buf);
> }
> - logfd = open(logfile, oflags, 0666);
> + logfd = open(logfile->buf, oflags, 0666);
> }
>
> if (logfd < 0)
> return error("Unable to append to %s: %s",
> - logfile, strerror(errno));
> + logfile->buf, strerror(errno));
> }
>
> - adjust_shared_perm(logfile);
> + adjust_shared_perm(logfile->buf);
> close(logfd);
> return 0;
> }
> @@ -2762,20 +2774,22 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1,
> int logfd, result, written, oflags = O_APPEND | O_WRONLY;
> unsigned maxlen, len;
> int msglen;
> - char log_file[PATH_MAX];
> + struct strbuf sb_log_file = STRBUF_INIT;
> + const char *log_file;
> char *logrec;
> const char *committer;
>
> if (log_all_ref_updates < 0)
> log_all_ref_updates = !is_bare_repository();
>
> - result = log_ref_setup(refname, log_file, sizeof(log_file));
> + result = log_ref_setup(refname, &sb_log_file);
> if (result)
> - return result;
> + goto done;
> + log_file = sb_log_file.buf;
>
> logfd = open(log_file, oflags);
> if (logfd < 0)
> - return 0;
> + goto done;
> msglen = msg ? strlen(msg) : 0;
> committer = git_committer_info(0);
> maxlen = strlen(committer) + msglen + 100;
> @@ -2788,9 +2802,13 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1,
> len += copy_msg(logrec + len - 1, msg) - 1;
> written = len <= maxlen ? write_in_full(logfd, logrec, len) : -1;
> free(logrec);
> - if (close(logfd) != 0 || written != len)
> - return error("Unable to append to %s", log_file);
> - return 0;
> + if (close(logfd) != 0 || written != len) {
> + error("Unable to append to %s", log_file);
> + result = -1;
> + }
> +done:
> + strbuf_release(&sb_log_file);
> + return result;
> }
>
> static int is_branch(const char *refname)
> diff --git a/refs.h b/refs.h
> index 87a1a79..783033a 100644
> --- a/refs.h
> +++ b/refs.h
> @@ -166,7 +166,7 @@ extern void unlock_ref(struct ref_lock *lock);
> extern int write_ref_sha1(struct ref_lock *lock, const unsigned char *sha1, const char *msg);
>
> /** Setup reflog before using. **/
> -int log_ref_setup(const char *ref_name, char *logfile, int bufsize);
> +int log_ref_setup(const char *ref_name, struct strbuf *logfile);
>
> /** Reads log for the value of ref during at_time. **/
> extern int read_ref_at(const char *refname, unsigned long at_time, int cnt,
next prev parent reply other threads:[~2014-03-17 18:12 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 ` [PATCH v3 05/25] Make git_path() aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
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 [this message]
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqvbvceluf.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.com \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).