aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTommi Virtanen <tv@eagain.net>2008-04-19 19:10:36 +0300
committerTommi Virtanen <tv@eagain.net>2008-04-19 19:10:36 +0300
commit38561aa6a51a2ef6cc04aa119481df62d213ffa4 (patch)
tree6880f0c0c7ae6d130e3328a88c5e74a89448037f
parentShow how group sections in config can be used in example.conf. (diff)
downloadgitosis-gentoo-38561aa6a51a2ef6cc04aa119481df62d213ffa4.zip
gitosis-gentoo-38561aa6a51a2ef6cc04aa119481df62d213ffa4.tar.gz
gitosis-gentoo-38561aa6a51a2ef6cc04aa119481df62d213ffa4.tar.bz2
Understand the popular gitosis.conf typo "writeable".
Log a warning still, don't want that to get too common.
-rw-r--r--gitosis/serve.py29
-rw-r--r--gitosis/test/test_access.py1
-rw-r--r--gitosis/test/test_serve.py31
3 files changed, 55 insertions, 6 deletions
diff --git a/gitosis/serve.py b/gitosis/serve.py
index 37ad97f..c0b7135 100644
--- a/gitosis/serve.py
+++ b/gitosis/serve.py
@@ -15,6 +15,8 @@ from gitosis import gitdaemon
from gitosis import app
from gitosis import util
+log = logging.getLogger('gitosis.serve')
+
ALLOW_RE = re.compile("^'/*(?P<path>[a-zA-Z0-9][a-zA-Z0-9@._-]*(/[a-zA-Z0-9][a-zA-Z0-9@._-]*)*)'$")
COMMANDS_READONLY = [
@@ -81,6 +83,21 @@ def serve(
path=path)
if newpath is None:
+ # didn't have write access; try once more with the popular
+ # misspelling
+ newpath = access.haveAccess(
+ config=cfg,
+ user=user,
+ mode='writeable',
+ path=path)
+ if newpath is not None:
+ log.warning(
+ 'Repository %r config has typo "writeable", '
+ +'should be "writable"',
+ path,
+ )
+
+ if newpath is None:
# didn't have write access
newpath = access.haveAccess(
@@ -147,15 +164,15 @@ class Main(app.App):
except ValueError:
parser.error('Missing argument USER.')
- log = logging.getLogger('gitosis.serve.main')
+ main_log = logging.getLogger('gitosis.serve.main')
os.umask(0022)
cmd = os.environ.get('SSH_ORIGINAL_COMMAND', None)
if cmd is None:
- log.error('Need SSH_ORIGINAL_COMMAND in environment.')
+ main_log.error('Need SSH_ORIGINAL_COMMAND in environment.')
sys.exit(1)
- log.debug('Got command %(cmd)r' % dict(
+ main_log.debug('Got command %(cmd)r' % dict(
cmd=cmd,
))
@@ -168,10 +185,10 @@ class Main(app.App):
command=cmd,
)
except ServingError, e:
- log.error('%s', e)
+ main_log.error('%s', e)
sys.exit(1)
- log.debug('Serving %s', newcmd)
+ main_log.debug('Serving %s', newcmd)
os.execvp('git-shell', ['git-shell', '-c', newcmd])
- log.error('Cannot execute git-shell.')
+ main_log.error('Cannot execute git-shell.')
sys.exit(1)
diff --git a/gitosis/test/test_access.py b/gitosis/test/test_access.py
index 751b0b4..f39444c 100644
--- a/gitosis/test/test_access.py
+++ b/gitosis/test/test_access.py
@@ -1,5 +1,6 @@
from nose.tools import eq_ as eq
+import logging
from ConfigParser import RawConfigParser
from gitosis import access
diff --git a/gitosis/test/test_serve.py b/gitosis/test/test_serve.py
index a223c43..56d50b0 100644
--- a/gitosis/test/test_serve.py
+++ b/gitosis/test/test_serve.py
@@ -1,7 +1,9 @@
from nose.tools import eq_ as eq
from gitosis.test.util import assert_raises
+import logging
import os
+from cStringIO import StringIO
from ConfigParser import RawConfigParser
from gitosis import serve
@@ -410,3 +412,32 @@ def test_absolute():
command="git-upload-pack '/foo'",
)
eq(got, "git-upload-pack '%s/foo.git'" % tmp)
+
+def test_typo_writeable():
+ tmp = util.maketemp()
+ repository.init(os.path.join(tmp, 'foo.git'))
+ cfg = RawConfigParser()
+ cfg.add_section('gitosis')
+ cfg.set('gitosis', 'repositories', tmp)
+ cfg.add_section('group foo')
+ cfg.set('group foo', 'members', 'jdoe')
+ cfg.set('group foo', 'writeable', 'foo')
+ log = logging.getLogger('gitosis.serve')
+ buf = StringIO()
+ handler = logging.StreamHandler(buf)
+ log.addHandler(handler)
+ try:
+ got = serve.serve(
+ cfg=cfg,
+ user='jdoe',
+ command="git-receive-pack 'foo'",
+ )
+ finally:
+ log.removeHandler(handler)
+ eq(got, "git-receive-pack '%s/foo.git'" % tmp)
+ handler.flush()
+ eq(
+ buf.getvalue(),
+ "Repository 'foo' config has typo \"writeable\", shou"
+ +"ld be \"writable\"\n",
+ )