Skip to contentSkip to conversation

Allow git-instaweb to be run from bare repositories

PATCH In review Jonas Fonseca 2 participants 3 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Allow git-instaweb to be run from bare repositories

---
 git-instaweb.sh |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

On IRC yesterday, two were asking for this and it seems simply enough. Apparently, git-instaweb is a great way to see if you've set up a remote repository correctly.

git-instaweb.sh +1 -0
index 95c3e5a..14917ac 100755
@@ -6,6 +6,7 @@ USAGE='[--start] [--stop] [--restart]
   [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
   [--module-path=<path> (for Apache2 only)]'
 
+SUBDIRECTORY_OK=Yes
 . git-sh-setup
 
 fqgitdir="$GIT_DIR"
Signature · 6 lines
1.5.3.4.1481.g854da-dirty



-- 
Jonas Fonseca
#1 lore raw
Quoted 14 lines · Jonas Fonseca
---
 git-instaweb.sh |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

On IRC yesterday, two were asking for this and it seems simply enough. Apparently, git-instaweb is a great way to see if you've set up a remote repository correctly.

git-instaweb.sh +0 -0
index 95c3e5a..14917ac 100755

git-instaweb.sh USAGE='[--start] [--stop] [--restart] · line 12

Quoted 7 lines
git-instaweb.sh +1 -0
@@ -6,6 +6,7 @@ USAGE='[--start] [--stop] [--restart]
   [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
   [--module-path=<path> (for Apache2 only)]'
 
+SUBDIRECTORY_OK=Yes
 . git-sh-setup
 
 fqgitdir="$GIT_DIR"

I'd agree with the goal of the patch, and I would not doubt the patch worked for you, but it somewhat feels wrong that you can say "It is Ok to run this script from a subdirectory" and that is the magic to allow something to work in a bare repository.

Care to share your insights on what is going on?

#2 lore raw

Junio C Hamano <[email protected]> wrote Fri, Nov 02, 2007:

Quoted 22 lines
Quoted 20 lines · Jonas Fonseca
---
 git-instaweb.sh |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

On IRC yesterday, two were asking for this and it seems simply enough. Apparently, git-instaweb is a great way to see if you've set up a remote repository correctly.

git-instaweb.sh +1 -0
index 95c3e5a..14917ac 100755
@@ -6,6 +6,7 @@ USAGE='[--start] [--stop] [--restart]
   [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
   [--module-path=<path> (for Apache2 only)]'
 
+SUBDIRECTORY_OK=Yes
 . git-sh-setup
 
Quoted 8 lines

git-instaweb.sh USAGE='[--start] [--stop] [--restart] · line 12

Quoted 1 line
git-instaweb.sh +0 -0
 fqgitdir="$GIT_DIR"

I'd agree with the goal of the patch, and I would not doubt the patch worked for you, but it somewhat feels wrong that you can say "It is Ok to run this script from a subdirectory" and that is the magic to allow something to work in a bare repository.

Care to share your insights on what is going on?

After disecting the source code in more depth as well as the trace of running git-instaweb inside a bare repository, the command relies on git-sh-setup (which is assumed to be safe in bare repos) to initialize a sane value of GIT_DIR. It uses GIT_DIR to initialize:

+ fqgitdir=/tmp/git.git

which is never touched later (and could possibly be changed to just use the GIT_DIR variable instead, since either is used interchangably throughout the script. In fact, it later does:

	GIT_DIR="$fqgitdir"

which could be removed. Anyway, this fqgitdir variable is used for creating a place for gitweb and HTTP server configuration files under "$fqgitdir/gitweb".

+ mkdir -p /tmp/git.git/gitweb/tmp

The remaining things in the script is option handling and setting up the HTTP server configuration. The only place where I see it possibly "spilling out" into the parent directory is this sequence:

	+ dirname /tmp/git.git
	+ script=
	s#^\(my\|our\) $projectroot =.*#\1 $projectroot = "/tmp";#
	s#\(my\|our\) $gitbin =.*#\1 $gitbin = "/home/fonseca/bin";#
	s#\(my\|our\) $projects_list =.*#\1 $projects_list = $projectroot;#
	s#\(my\|our\) $git_temp =.*#\1 $git_temp = "/tmp/git.git/gitweb/tmp";#

Where it creates gitweb.cgi. This might make gitweb try to look for .git directories in subdirectories. Maybe it should create a projects_list file to explicitly list that only "$barerepo.git" is exported?

Signature · 1 line
Jonas Fonseca