threads / patch / 11329

patchMinor portability patch to git-submodule

Subject: [PATCH] Minor portability patch to git-submodule

## tl;dr

4 messages between Dec 17, 2007 and Dec 18, 2007. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Andy Dougherty· Dec 17, 2007, 21:41 UTC · lore

While trying git out on Solaris 8, I needed the following patch. The 'grep' command on Solaris doesn't understand the -e option, though egrep does.

More mysterious is the printf patch. Without it, the sed command didn't match anything.

--- git-1.5.4.rc0/git-submodule.sh Wed Dec 12 21:29:16 2007 +++ git-andy/git-submodule.sh Mon Dec 17 14:30:46 2007

Show changes to diff +4 −4
@@ -74,7 +74,7 @@
 module_name()
 {
 	# Do we have "submodule.<something>.path = $1" defined in .gitmodules file?
-	re=$(printf '%s' "$1" | sed -e 's/[].[^$\\*]/\\&/g')
+	re=$(printf '%s\n' "$1" | sed -e 's/[].[^$\\*]/\\&/g')
 	name=$( GIT_CONFIG=.gitmodules \
 		git config --get-regexp '^submodule\..*\.path$' |
 		sed -n -e 's|^submodule\.\(.*\)\.path '"$re"'$|\1|p' )
@@ -176,7 +176,7 @@
 #
 modules_init()
 {
-	git ls-files --stage -- "$@" | grep -e '^160000 ' |
+	git ls-files --stage -- "$@" | egrep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
 		# Skip already registered paths
@@ -209,7 +209,7 @@
 #
 modules_update()
 {
-	git ls-files --stage -- "$@" | grep -e '^160000 ' |
+	git ls-files --stage -- "$@" | egrep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
 		name=$(module_name "$path") || exit
@@ -268,7 +268,7 @@
 #
 modules_list()
 {
-	git ls-files --stage -- "$@" | grep -e '^160000 ' |
+	git ls-files --stage -- "$@" | egrep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
 		name=$(module_name "$path") || exit
-- 
    Andy Dougherty		doughera@lafayette.edu
Johannes Schindelin· Dec 17, 2007, 22:54 UTC · re: Andy Dougherty · lore

Re: [PATCH] Minor portability patch to git-submodule

Hi,
On Mon, 17 Dec 2007, Andy Dougherty wrote:
> -	git ls-files --stage -- "$@" | grep -e '^160000 ' |
> +	git ls-files --stage -- "$@" | egrep -e '^160000 ' |

Nack. egrep is not available on all platforms. But then I have to wonder why not saying "grep '^160000 '" instead?

Ciao, Dscho

Andy Dougherty· Dec 18, 2007, 13:35 UTC · re: Johannes Schindelin · lore

Re: [PATCH] Minor portability patch to git-submodule

On Mon, 17 Dec 2007, Johannes Schindelin wrote:
Show 7 quoted lines
> On Mon, 17 Dec 2007, Andy Dougherty wrote:
> 
> > -	git ls-files --stage -- "$@" | grep -e '^160000 ' |
> > +	git ls-files --stage -- "$@" | egrep -e '^160000 ' |
> 
> Nack.  egrep is not available on all platforms.  But then I have to wonder 
> why not saying "grep '^160000 '" instead?

Your last suggestion is easily and obviously better -- I'll assume you don't need an explicit patch and can just hand-edit mine. Still, I'd have thought egrep was fine. As far as I recall, it goes back to v7 Unix. Or are there non-unix systems at issue (perhaps cygwin variants or something) that have grep but not egrep?

Anyway, thanks.
-- 
    Andy Dougherty		doughera@lafayette.edu
Johannes Schindelin· Dec 18, 2007, 14:01 UTC · re: Andy Dougherty · lore

Re: [PATCH] Minor portability patch to git-submodule

Hi,
On Tue, 18 Dec 2007, Andy Dougherty wrote:
Show 13 quoted lines
> On Mon, 17 Dec 2007, Johannes Schindelin wrote:
> 
> > On Mon, 17 Dec 2007, Andy Dougherty wrote:
> > 
> > > -	git ls-files --stage -- "$@" | grep -e '^160000 ' |
> > > +	git ls-files --stage -- "$@" | egrep -e '^160000 ' |
> > 
> > Nack.  egrep is not available on all platforms.  But then I have to 
> > wonder why not saying "grep '^160000 '" instead?
> 
> Your last suggestion is easily and obviously better -- I'll assume you 
> don't need an explicit patch and can just hand-edit mine.  Still, I'd have 
> thought egrep was fine.  As far as I recall, it goes back to v7 Unix.

This is just another instance where we should look at existing systems and not so much at standards documents.

> Or are there non-unix systems at issue (perhaps cygwin variants or 
> something) that have grep but not egrep?
Well, I checked msysGit, and it has it.

That is, kind of: it is just a wrapper, calling "grep -E". Which means yet another fork() on a fork() challenged platform, so I would appreciate it if we could avoid it.

Thanks, Dscho

← back to recent threads