Johannes Schindelin <johannes.schinde...@gmx.de> writes:

> On Windows, the backslash is the native directory separator, but
> all supported Windows versions also accept the forward slash in
> most circumstances.
>
> Our tests expect forward slashes.
>
> Relative paths are generated by Git using forward slashes.

... and the paths tracked by Git (in the index) use slashes.

> So let's try to be consistent and use forward slashes in the $HOME
> part of the paths reported by `git config --show-origin`, too.

OK, sounds sensible.

>
> Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
> ---
>  compat/mingw.h | 6 ++++++
>  path.c         | 3 +++
>  2 files changed, 9 insertions(+)
>
> diff --git a/compat/mingw.h b/compat/mingw.h
> index 8c5bf50..c008694 100644
> --- a/compat/mingw.h
> +++ b/compat/mingw.h
> @@ -396,6 +396,12 @@ static inline char *mingw_find_last_dir_sep(const char 
> *path)
>                       ret = (char *)path;
>       return ret;
>  }
> +static inline void convert_slashes(char *path)
> +{
> +     for (; *path; path++)
> +             if (*path == '\\')
> +                     *path = '/';
> +}
>  #define find_last_dir_sep mingw_find_last_dir_sep
>  int mingw_offset_1st_component(const char *path);
>  #define offset_1st_component mingw_offset_1st_component
> diff --git a/path.c b/path.c
> index 8b7e168..969b494 100644
> --- a/path.c
> +++ b/path.c
> @@ -584,6 +584,9 @@ char *expand_user_path(const char *path)
>                       if (!home)
>                               goto return_null;
>                       strbuf_addstr(&user_path, home);
> +#ifdef GIT_WINDOWS_NATIVE
> +                     convert_slashes(user_path.buf);
> +#endif

Hmm, I wonder if we want to do this at a bit lower level, e.g.

    1. have a fallback for other platforms in git-compat-util.h

    #ifndef get_HOME
    #define get_HOME() getenv("HOME")
    #endif

    2. have the one that does convert-slashes for mingw

    static inline const char *mingw_getenv_HOME(void) {
        ... do convert-slashes on the result of getenv("HOME");
    }
    #define get_HOME() mingw_getenv_HOME()

    3. Instead of the above patch to path.c, change the line before
       the precontext with s/getenv("HOME")/get_HOME()/

Or even lower, inside mingw_getenv() and catch variables that deal
with paths (not just HOME but PATH, TMP, TMPDIR, etc.)

>               } else {
>                       struct passwd *pw = getpw_str(username, username_len);
>                       if (!pw)
--
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