When in apache2 mode if there isn't an apache2 command on the
system but there is a httpd command installed (like there is
on Mac OS X) use that command instead.
When in apache2 mode and there isn't a module_path specified, look for
module paths in /usr/lib/apache2/modules _and_ /usr/libexec/apache2,
in that order.
Added a LockFile directive to the apache2 config because the default
location of /private/var/run is only root-writeable on Mac OS X.
Signed-off-by: nathan spindel <redacted>
---
git-instaweb.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 54 insertions(+), 1 deletions(-)
@@ -172,7 +172,59 @@ EOF} apache2_conf(){-test-z"$module_path"&&module_path=/usr/lib/apache2/modules+# if there isn't an apache2 command on the system but there+# is a httpd command which looks like apache, use that instead+# for Mac OS X compatibility.+httpd_only="`echo $httpd | cut -f1 -d' '`"+if!type$httpd_only>/dev/null2>&1+then+found_apache_command=1+httpd_parent_paths="/usr/local/sbin /usr/sbin"+foriin$httpd_parent_paths;do+iftest-x"$i/$httpd_only"+then+found_apache_command=0+break+fi+done++iftest$found_apache_command!=0+then+alt_apache="httpd"+iftype$alt_apache>/dev/null2>&1+then+$alt_apache-v|grepApache>/dev/null2>&1+iftest$?==0+then+httpd=`echo"$httpd"|sed"s/apache2/httpd/"`+else+foriin$httpd_parent_paths;do+iftest-x"$i/$alt_apache"+then+$i/$alt_apache-v|grepApache>/dev/null2>&1+iftest$?==0+then+httpd=`echo"$httpd"|sed"s/apache2/httpd/"`+break+fi+fi+done+fi+fi+fi+fi++iftest-z"$module_path"+then+forpathin/usr/lib/apache2/modules/usr/libexec/apache2;do+iftest-d"$path"+then+module_path="$path"+break+fi+done+fi+mkdir-p"$GIT_DIR/gitweb/logs"bind=testx"$local"=xtrue&&bind='127.0.0.1:'
On May 11, 2008, at 12:36 PM, nathan spindel wrote:
apache2_conf () {
- test -z "$module_path" && module_path=/usr/lib/apache2/modules
+ # if there isn't an apache2 command on the system but there
+ # is a httpd command which looks like apache, use that instead
+ # for Mac OS X compatibility.
+ httpd_only="`echo $httpd | cut -f1 -d' '`"
+ if ! type $httpd_only > /dev/null 2>&1
+ then
+ found_apache_command=1
+ httpd_parent_paths="/usr/local/sbin /usr/sbin"
+ for i in $httpd_parent_paths; do
+ if test -x "$i/$httpd_only"
+ then
+ found_apache_command=0
+ break
+ fi
+ done
+
+ if test $found_apache_command != 0
+ then
+ alt_apache="httpd"
+ if type $alt_apache > /dev/null 2>&1
+ then
+ $alt_apache -v | grep Apache > /dev/null 2>&1
+ if test $? == 0
+ then
+ httpd=`echo "$httpd" | sed "s/apache2/httpd/"`
+ else
+ for i in $httpd_parent_paths; do
+ if test -x "$i/$alt_apache"
+ then
+ $i/$alt_apache -v | grep Apache > /dev/null 2>&1
+ if test $? == 0
+ then
+ httpd=`echo "$httpd" | sed "s/apache2/httpd/"`
+ break
+ fi
+ fi
+ done
+ fi
+ fi
+ fi
+ fi
I'd like to see a cleaner implementation of this logic, if anyone has
strong shell-fu.
From: Christian Couder <hidden> Date: 2016-06-15 22:44:36
Le dimanche 11 mai 2008, nathan spindel a écrit :
On May 11, 2008, at 12:36 PM, nathan spindel wrote:
quoted
apache2_conf () {
- test -z "$module_path" && module_path=/usr/lib/apache2/modules
+ # if there isn't an apache2 command on the system but there
+ # is a httpd command which looks like apache, use that instead
+ # for Mac OS X compatibility.
+ httpd_only="`echo $httpd | cut -f1 -d' '`"
+ if ! type $httpd_only > /dev/null 2>&1
+ then
+ found_apache_command=1
+ httpd_parent_paths="/usr/local/sbin /usr/sbin"
+ for i in $httpd_parent_paths; do
+ if test -x "$i/$httpd_only"
+ then
+ found_apache_command=0
+ break
+ fi
+ done
+
+ if test $found_apache_command != 0
+ then
+ alt_apache="httpd"
+ if type $alt_apache > /dev/null 2>&1
+ then
+ $alt_apache -v | grep Apache > /dev/null 2>&1
+ if test $? == 0
+ then
+ httpd=`echo "$httpd" | sed "s/apache2/httpd/"`
+ else
+ for i in $httpd_parent_paths; do
+ if test -x "$i/$alt_apache"
+ then
+ $i/$alt_apache -v | grep Apache > /dev/null 2>&1
+ if test $? == 0
+ then
+ httpd=`echo "$httpd" | sed "s/apache2/httpd/"`
+ break
+ fi
+ fi
+ done
+ fi
+ fi
+ fi
+ fi
I'd like to see a cleaner implementation of this logic,
Maybe you can use a function like this not tested one:
check_cmd() {
cmd="$1"
if type "$cmd" > /dev/null 2>&1; then
if "$cmd" -v | grep Apache > /dev/null 2>&1; then
httpd=$(echo "$cmd" | sed "s/apache2/httpd/")
fi
fi
}
Regards,
Christian.
From: Junio C Hamano <hidden> Date: 2016-06-15 22:44:36
Christian Couder [off-list ref] writes:
Maybe you can use a function like this not tested one:
check_cmd() {
cmd="$1"
if type "$cmd" > /dev/null 2>&1; then
if "$cmd" -v | grep Apache > /dev/null 2>&1; then
httpd=$(echo "$cmd" | sed "s/apache2/httpd/")
fi
fi
}
One worry I have with that approach is if any and all random
implementations of "httpd" that live somewhere in path do not do any harm
when started with "-v" option. Namely, they should exit without becoming
a daemon and/or start the service.
I am not convinced that would be the case.
On May 12, 2008, at 11:42 AM, Junio C Hamano wrote:
Christian Couder [off-list ref] writes:
quoted
Maybe you can use a function like this not tested one:
check_cmd() {
cmd="$1"
if type "$cmd" > /dev/null 2>&1; then
if "$cmd" -v | grep Apache > /dev/null 2>&1; then
httpd=$(echo "$cmd" | sed "s/apache2/httpd/")
fi
fi
}
One worry I have with that approach is if any and all random
implementations of "httpd" that live somewhere in path do not do any
harm
when started with "-v" option. Namely, they should exit without
becoming
a daemon and/or start the service.
I am not convinced that would be the case.
I agree with that worry. Solving that in the general case is pretty
difficult, so I think we could instead look for other clues in the
system. Some ideas:
- Use $HTTPD as defined in apachectl. (How portable is that?)
- Inspect the text of 'man httpd' to determine if it's Apache or not.
- Only fallback on the httpd command on Mac OS X 10.5? That's pretty
safe.
From: Jakub Narebski <hidden> Date: 2016-06-15 22:44:36
nathan spindel [off-list ref] writes:
On May 12, 2008, at 11:42 AM, Junio C Hamano wrote:
quoted
Christian Couder [off-list ref] writes:
quoted
Maybe you can use a function like this not tested one:
check_cmd() {
cmd="$1"
if type "$cmd"> /dev/null 2>&1; then
if "$cmd" -v | grep Apache> /dev/null 2>&1; then
httpd=$(echo "$cmd" | sed "s/apache2/httpd/")
fi
fi
}
One worry I have with that approach is if any and all random
implementations of "httpd" that live somewhere in path do not do
any harm when started with "-v" option. Namely, they should exit
without becoming a daemon and/or start the service.
I am not convinced that would be the case.
By the way, it is a bit strange that Apache doesn't understand long
equivalent of -v, namely --version.
I agree with that worry. Solving that in the general case is pretty
difficult, so I think we could instead look for other clues in the
system. Some ideas:
- Use $HTTPD as defined in apachectl. (How portable is that?)
You mean what apachectl returns in Usage: (first line)?
1014:jnareb@roke:~> /usr/sbin/apachectl
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
- Inspect the text of 'man httpd' to determine if it's Apache or not.
Manpages might be not installed. I think 'httpd -v' is less error
prone...
- Only fallback on the httpd command on Mac OS X 10.5? That's pretty
safe.
Not only MacOS X has Apache installed as httpd binary. Some Linux
distributions do that too.
P.S. I wonder if it would be possible, as absolutely last resort
fallback, to make git-instaweb to create/use very simple web server in
Perl, using HTTP::Daemon module (if it is installed), which comes from
libwww-perl.
--
Jakub Narebski
Poland
ShadeHawk on #git