aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2010-09-10 18:51:54 +0000
committerRobin H. Johnson <robbat2@gentoo.org>2010-09-10 18:51:54 +0000
commit9aeeb26bb23a8a0f9be04921a77f258ab87eb9d8 (patch)
treed10a4030b731cae3f7ad12c90b4704850ffc2a20
parentFix re usage. (diff)
parentLet even readonly operations init a repo if needed. (diff)
downloadgitosis-gentoo-9aeeb26bb23a8a0f9be04921a77f258ab87eb9d8.tar.gz
gitosis-gentoo-9aeeb26bb23a8a0f9be04921a77f258ab87eb9d8.tar.bz2
gitosis-gentoo-9aeeb26bb23a8a0f9be04921a77f258ab87eb9d8.zip
Merge branch 'upstream' into gentoo
Conflicts: gitosis/test/test_repository.py gitosis/test/test_serve.py
-rw-r--r--gitosis/serve.py3
-rw-r--r--gitosis/test/test_repository.py7
-rw-r--r--gitosis/test/test_serve.py30
3 files changed, 34 insertions, 6 deletions
diff --git a/gitosis/serve.py b/gitosis/serve.py
index e54a399..94c59b5 100644
--- a/gitosis/serve.py
+++ b/gitosis/serve.py
@@ -147,8 +147,7 @@ def serve(cfg, user, command):
'git extension should have been stripped: %r' % relpath
repopath = '%s.git' % relpath
fullpath = os.path.join(topdir, repopath)
- if (not os.path.exists(fullpath)
- and verb in COMMANDS_WRITE):
+ if not os.path.exists(fullpath):
# it doesn't exist on the filesystem, but the configuration
# refers to it, we're serving a write request, and the user is
# authorized to do that: create the repository on the fly
diff --git a/gitosis/test/test_repository.py b/gitosis/test/test_repository.py
index 0920c4a..c74acd9 100644
--- a/gitosis/test/test_repository.py
+++ b/gitosis/test/test_repository.py
@@ -70,7 +70,12 @@ def test_init_templates():
got = readFile(os.path.join(path, 'hooks', 'post-update'))
eq(got, '#!/bin/sh\n# i can override standard templates\n')
# standard templates are there, too
- assert (os.path.isfile(os.path.join(path, 'hooks', 'pre-rebase.sample')) or os.path.isfile(os.path.join(path, 'hooks', 'pre-rebase')))
+ assert (
+ # compatibility with git <1.6.0
+ os.path.isfile(os.path.join(path, 'hooks', 'pre-rebase'))
+ # for git >=1.6.0
+ or os.path.isfile(os.path.join(path, 'hooks', 'pre-rebase.sample'))
+ )
def test_init_environment():
tmp = maketemp()
diff --git a/gitosis/test/test_serve.py b/gitosis/test/test_serve.py
index 4b414c4..a71af76 100644
--- a/gitosis/test/test_serve.py
+++ b/gitosis/test/test_serve.py
@@ -42,7 +42,7 @@ def test_bad_space_noargs():
serve.serve,
cfg=cfg,
user='jdoe',
- command='git upload-pack',
+ command='git-upload-pack',
)
eq(str(e), 'Unknown command denied')
assert isinstance(e, serve.ServingError)
@@ -115,7 +115,7 @@ def test_bad_forbiddenCommand_read_space():
serve.serve,
cfg=cfg,
user='jdoe',
- command="git upload-pack 'foo'",
+ command="git-upload-pack 'foo'",
)
eq(str(e), 'Repository read access denied')
assert isinstance(e, serve.AccessDenied)
@@ -232,7 +232,31 @@ def test_simple_read_leading_slash():
)
eq(got, "git-upload-pack '%s/foo.git'" % tmp)
-def test_simple_write():
+def test_read_inits_if_needed():
+ # a clone of a non-existent repository (but where config
+ # authorizes you to do that) will create the repository on the fly
+ tmp = util.maketemp()
+ cfg = RawConfigParser()
+ cfg.add_section('gitosis')
+ repositories = os.path.join(tmp, 'repositories')
+ os.mkdir(repositories)
+ cfg.set('gitosis', 'repositories', repositories)
+ generated = os.path.join(tmp, 'generated')
+ os.mkdir(generated)
+ cfg.set('gitosis', 'generate-files-in', generated)
+ cfg.add_section('group foo')
+ cfg.set('group foo', 'members', 'jdoe')
+ cfg.set('group foo', 'readonly', 'foo')
+ got = serve.serve(
+ cfg=cfg,
+ user='jdoe',
+ command="git-upload-pack 'foo'",
+ )
+ eq(got, "git-upload-pack '%s/foo.git'" % repositories)
+ eq(os.listdir(repositories), ['foo.git'])
+ assert os.path.isfile(os.path.join(repositories, 'foo.git', 'HEAD'))
+
+def test_simple_write_dash():
tmp = util.maketemp()
repository.init(os.path.join(tmp, 'foo.git'))
cfg = RawConfigParser()