On Sat, Mar 1, 2014 at 7:12 AM, Nguyễn Thái Ngọc Duy <pclo...@gmail.com> wrote:
> 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

"All callers are not" is unusually difficult to understand. Changing
it to "Callers are not" simplifies.

> 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

"(for example, there's..." reads a bit better.

> 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

I guess you mean it should return /foo/bar/abc.

> 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 <pclo...@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.

Would it help to add a quick illustration here?

    For example, if GIT_OBJECT_DIRECTORY is /foo/bar,
    then "git rev-parse --git-path objects/abc" returns /foo/bar/abc.

>  --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/path.c b/path.c
> index ccd7228..e020530 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 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);

Maybe simplify by dropping git_dir and invoking strbuf_addstr(buf,
get_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);
>  }
>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to