diff mbox series

[2/2] subtree: fix assumption about the directory separator

Message ID 4e1a569c9fa494fa9bb1bfde14d77ac9751d9049.1623316412.git.gitgitgadget@gmail.com (mailing list archive)
State New
Headers show
Series Fix git subtree on Windows | expand

Commit Message

Johannes Schindelin June 10, 2021, 9:13 a.m. UTC
From: Johannes Schindelin <johannes.schindelin@gmx.de>

On Windows, both forward and backslash are valid separators. In
22d550749361 (subtree: don't fuss with PATH, 2021-04-27), however, we
added code that assumes that it can only be the forward slash.

Let's fix that.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/subtree/git-subtree.sh | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

Luke Shumaker June 11, 2021, 1:02 a.m. UTC | #1
On Thu, 10 Jun 2021 03:13:31 -0600,
Johannes Schindelin via GitGitGadget wrote:
> 
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
> 
> On Windows, both forward and backslash are valid separators. In
> 22d550749361 (subtree: don't fuss with PATH, 2021-04-27), however, we
> added code that assumes that it can only be the forward slash.
> 
> Let's fix that.
> 
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  contrib/subtree/git-subtree.sh | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
> index 6bd689a6bb92..d11ac56f9eb8 100755
> --- a/contrib/subtree/git-subtree.sh
> +++ b/contrib/subtree/git-subtree.sh
> @@ -13,6 +13,8 @@ if test -z "$GIT_EXEC_PATH" || {
>  	}
>  } || ! test -f "$GIT_EXEC_PATH/git-sh-setup"
>  then
> +	base=${0##*/}
> +	base=${base##*\\}

This might be more clearly written as

    base=${0##*[/\\]}

?

(And then maybe it doesn't need a separate variable, and can still be
written in-line?)
Johannes Schindelin June 11, 2021, 10:35 a.m. UTC | #2
Hi Luke,

On Thu, 10 Jun 2021, Luke Shumaker wrote:

> On Thu, 10 Jun 2021 03:13:31 -0600,
> Johannes Schindelin via GitGitGadget wrote:
> >
> > From: Johannes Schindelin <johannes.schindelin@gmx.de>
> >
> > On Windows, both forward and backslash are valid separators. In
> > 22d550749361 (subtree: don't fuss with PATH, 2021-04-27), however, we
> > added code that assumes that it can only be the forward slash.
> >
> > Let's fix that.
> >
> > Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > ---
> >  contrib/subtree/git-subtree.sh | 8 +++++---
> >  1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
> > index 6bd689a6bb92..d11ac56f9eb8 100755
> > --- a/contrib/subtree/git-subtree.sh
> > +++ b/contrib/subtree/git-subtree.sh
> > @@ -13,6 +13,8 @@ if test -z "$GIT_EXEC_PATH" || {
> >  	}
> >  } || ! test -f "$GIT_EXEC_PATH/git-sh-setup"
> >  then
> > +	base=${0##*/}
> > +	base=${base##*\\}
>
> This might be more clearly written as
>
>     base=${0##*[/\\]}
>
> ?

True. For some reason, this did not work in my tests (probably because I
confused `#` with `%` or put the wildcard on the wrong side, or
something).

Will fix.

> (And then maybe it doesn't need a separate variable, and can still be
> written in-line?)

I am not in favor of inlining here. Three times. It is too complicated a
construct for a casual contributor. At least giving it a name (where
"basename" would make even more sense than "base", I just realized)
alleviates this problem _somewhat_.

Ciao,
Dscho
diff mbox series

Patch

diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh
index 6bd689a6bb92..d11ac56f9eb8 100755
--- a/contrib/subtree/git-subtree.sh
+++ b/contrib/subtree/git-subtree.sh
@@ -13,6 +13,8 @@  if test -z "$GIT_EXEC_PATH" || {
 	}
 } || ! test -f "$GIT_EXEC_PATH/git-sh-setup"
 then
+	base=${0##*/}
+	base=${base##*\\}
 	echo >&2 'It looks like either your git installation or your'
 	echo >&2 'git-subtree installation is broken.'
 	echo >&2
@@ -20,10 +22,10 @@  then
 	echo >&2 " - If \`git --exec-path\` does not print the correct path to"
 	echo >&2 "   your git install directory, then set the GIT_EXEC_PATH"
 	echo >&2 "   environment variable to the correct directory."
-	echo >&2 " - Make sure that your \`${0##*/}\` file is either in your"
+	echo >&2 " - Make sure that your \`$base\` file is either in your"
 	echo >&2 "   PATH or in your git exec path (\`$(git --exec-path)\`)."
-	echo >&2 " - You should run git-subtree as \`git ${0##*/git-}\`,"
-	echo >&2 "   not as \`${0##*/}\`." >&2
+	echo >&2 " - You should run git-subtree as \`git ${base#git-}\`,"
+	echo >&2 "   not as \`$base\`." >&2
 	exit 126
 fi