From mboxrd@z Thu Jan 1 00:00:00 1970 From: Johannes Schindelin Subject: Re: [PATCH 1/4] config --show-origin: report paths with forward slashes Date: Wed, 23 Mar 2016 09:20:27 +0100 (CET) Message-ID: References: <8beb1c208e33e1de8f272caa22fb7a0b662ca4cc.1458668543.git.johannes.schindelin@gmx.de> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Cc: git@vger.kernel.org, Lars Schneider , Johannes Sixt , Kazutoshi SATODA , Eric Wong To: Junio C Hamano X-From: git-owner@vger.kernel.org Wed Mar 23 09:20:55 2016 Return-path: Envelope-to: gcvg-git-2@plane.gmane.org Received: from vger.kernel.org ([209.132.180.67]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1aie2B-0004AC-D7 for gcvg-git-2@plane.gmane.org; Wed, 23 Mar 2016 09:20:55 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753820AbcCWIUw (ORCPT ); Wed, 23 Mar 2016 04:20:52 -0400 Received: from mout.gmx.net ([212.227.15.15]:59110 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753557AbcCWIUs (ORCPT ); Wed, 23 Mar 2016 04:20:48 -0400 Received: from virtualbox ([37.24.143.127]) by mail.gmx.com (mrgmx003) with ESMTPSA (Nemesis) id 0MDQI1-1aZ37i329V-00Gp6Z; Wed, 23 Mar 2016 09:20:31 +0100 X-X-Sender: virtualbox@virtualbox In-Reply-To: User-Agent: Alpine 2.20 (DEB 67 2015-01-07) X-Provags-ID: V03:K0:kxWiBkyRPgFOs5MxhJFkn7qS00UJbhetBWiYawY/PBKD9LKj0Rb ELIa1m1Aypyg9VLeGYsC0l6pwXzEQNx9DVFpqmLa95So6ZLS9cjt++dUs1jWanafSginy5z LjsxqIeN0E5HNn+QtCmfWhphHIsvH2TVIAsazHkxHIn3Tb+kpq4yd3Uc0hjqZZ5eYGs+/mx Bc1J0Cj6LvGX0/w0gKUxg== X-UI-Out-Filterresults: notjunk:1;V01:K0:ERvWVK1T+j0=:ATbDsQjuuuxmmhwUF4CUsB 2sRfEa4E1P/Tk1Qs2h0K3TxWe/7m6o/DWBSV1XNP8xLgXOCdqo7r3dx08o2aHs5RTja3yS/TK nowdxP2b5tbX7YGmWJ/bAYb9zi/q1ZK2TX1N1YvdQskNcjtQCyOM0J6VonshZyO1Xvdq6Wf9b /YcIkiK2QiYRNKp7te+3H+De0nObrQ2ChIq03aVy1e+KvDWb6o03K6onlHzS5xhM8lGjErXde s1L9NwNnAml+2/gIaw4Au2wr5Yp9wOMesUfWWQIpLmdZetH8A7fim/k0/VMXQV8AJfSDtXl44 PVY/5+MUfMzfaXujGkhVoHnHDYjTnNOnG0Z892oMkCbIpOuN9f2V3Wvvj3ROFMA66OgHZLwVW LOHdSFrVZjFyF7RkDh1sObn2r0/PmIqjxWbEMg/tNNOLeiCEwsdFkXVvL2kxjloLgF5HJjDIT J2km+KfLEkRCDGJzzBBxOtCJBlphDsVHgcrPMxdD2eB+KFZvf3s3iMDo+cAYFag7CuUz2HVlH 0hXKhpKSrbTbG7MqvtU7FEvlklwpqyn0XC+47yD32au0jDvhQ0qyOrFkQweVueBt9a9/fJjil SayHuCEA7At5CDkGU/wI1jd433qBNHUeJXtU9lv7Fxk+zGL+3+WDAFJFylLxaBAPA6qtzAwIx 97MmBxwfBCpIyePqek4T1/kw3Lk3PJeD9Mgf5H8MPmIxZXsUpYY7y0LA0Je2NWRgijGq1AcN9 e2w2lU1FBWzznvBa17G9H6/GVjrGuw/0CmUfOlKTSLMgLLtz19xN0ULnvi9J9YALYQY710IU Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Archived-At: Hi Junio, On Tue, 22 Mar 2016, Junio C Hamano wrote: > Johannes Schindelin 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 > > --- > > 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, Well, I tried to be careful. There *are* circumstamces when backslashes are required (CreateProcess() comes to mind), so I wanted to have this conversion as much only in the user-visible output as possible. > e.g. > > 1. have a fallback for other platforms in git-compat-util.h > > #ifndef get_HOME > #define get_HOME() getenv("HOME") > #endif Once upon a time, I had something like that (without the ugly uppercase, to account for the fact that Windows has no single HOME setting): http://thread.gmane.org/gmane.comp.version-control.msysgit/20339 > 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() We could do that much easier now: -- snip -- diff --git a/compat/mingw.c b/compat/mingw.c index 54c82ec..96022b7 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -2117,6 +2117,12 @@ static void setup_windows_environment() *tmp = '/'; } + tmp = getenv("HOME"); + if (tmp) + for (; *tmp; tmp++) + if (*tmp == '\\') + *tmp = '/'; + /* simulate TERM to enable auto-color (see color.c) */ if (!getenv("TERM")) setenv("TERM", "cygwin", 1); -- snap -- But again, I am uncomfortable to do this wholesale without having the time to do anything quickly about unintended side effects. > 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.) That outright scares me. Don't do that. :-) Again, just to make sure my point is heard: there *are* circumstances when the Win32 API expects backslashes and cannot handle forward ones. I would not dare to claim to be an expert in that matter, so I would rather want to err on the side of converting backslashes to forward slashes *only* when really needed. Ciao, Dscho