def test_push_inits_no_stdout_spam(): # git init has a tendency to spew to stdout, and that confuses # e.g. a git push 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', 'writable', 'foo') old_stdout = os.dup(1) try: new_stdout = os.tmpfile() os.dup2(new_stdout.fileno(), 1) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) finally: os.dup2(old_stdout, 1) os.close(old_stdout) new_stdout.seek(0) got = new_stdout.read() new_stdout.close() eq(got, '') eq(os.listdir(repositories), ['foo.git']) assert os.path.isfile(os.path.join(repositories, 'foo.git', 'HEAD'))
def test_push_inits_sets_description(): 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', 'writable', 'foo') cfg.add_section('repo foo') cfg.set('repo foo', 'description', 'foodesc') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) path = os.path.join(repositories, 'foo.git', 'description') assert os.path.exists(path) got = util.readFile(path) eq(got, 'foodesc\n')
def test_push_inits_no_stdout_spam(): # git init has a tendency to spew to stdout, and that confuses # e.g. a git push 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", "writable", "foo") old_stdout = os.dup(1) try: new_stdout = os.tmpfile() os.dup2(new_stdout.fileno(), 1) serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo'") finally: os.dup2(old_stdout, 1) os.close(old_stdout) new_stdout.seek(0) got = new_stdout.read() new_stdout.close() eq(got, "") eq(os.listdir(repositories), ["foo.git"]) assert os.path.isfile(os.path.join(repositories, "foo.git", "HEAD"))
def test_push_inits_updates_projects_list(): 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', 'writable', 'foo') cfg.add_section('repo foo') cfg.set('repo foo', 'gitweb', 'yes') os.mkdir(os.path.join(repositories, 'gitosis-admin.git')) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq( sorted(os.listdir(repositories)), sorted(['foo.git', 'gitosis-admin.git']), ) path = os.path.join(generated, 'projects.list') assert os.path.exists(path) got = util.readFile(path) eq(got, 'foo.git\n')
def test_push_inits_if_needed(): # a push to a non-existent repository (but where config authorizes # you to do that) will create the repository on the fly tmp = util.maketemp() repositories = path.join(tmp, 'repositories') os.mkdir(repositories) generated = path.join(tmp, 'generated') os.mkdir(generated) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', repositories) cfg.set('gitosis', 'generate-files-in', generated) cfg.add_section('group foo') cfg.set('group foo', 'members', 'jdoe') cfg.set('group foo', 'writable', 'foo') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) assert path.isfile(path.join(repositories, 'foo.git', 'HEAD'))
def test_push_inits_subdir_parent_exists(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = path.join(tmp, 'repositories') os.mkdir(repositories) foo = path.join(repositories, 'foo') # silly mode on purpose; not to be touched os.mkdir(foo, 0751) cfg.set('gitosis', 'repositories', repositories) generated = 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', 'writable', 'foo/bar') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo/bar.git'", ) eq(os.listdir(repositories), ['foo']) util.check_mode(foo, 0751, is_dir=True) eq(os.listdir(foo), ['bar.git']) assert path.isfile(path.join(repositories, 'foo', 'bar.git', 'HEAD'))
def test_push_inits_no_stdout_spam(): # git init has a tendency to spew to stdout, and that confuses # e.g. a git push tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = path.join(tmp, 'repositories') os.mkdir(repositories) cfg.set('gitosis', 'repositories', repositories) generated = 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', 'writable', 'foo') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') old_stdout = os.dup(1) try: new_stdout = os.tmpfile() os.dup2(new_stdout.fileno(), 1) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) finally: os.dup2(old_stdout, 1) os.close(old_stdout) new_stdout.seek(0) got = new_stdout.read() new_stdout.close() eq(got, '') eq(os.listdir(repositories), ['foo.git']) assert path.isfile(path.join(repositories, 'foo.git', 'HEAD'))
def test_push_inits_sets_export_ok(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = path.join(tmp, 'repositories') os.mkdir(repositories) cfg.set('gitosis', 'repositories', repositories) generated = 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', 'writable', 'foo') cfg.add_section('repo foo') cfg.set('repo foo', 'daemon', 'yes') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) export = path.join(repositories, 'foo.git', 'git-daemon-export-ok') assert path.exists(export)
def test_push_inits_default_templates(): 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', 'writable', 'foo') os.umask(0022) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) hook_path = os.path.join(tmp, 'repositories', 'foo.git', 'hooks', 'post-receive') check_mode( hook_path, 0755, is_file=True, ) got = readFile(hook_path) eq(got, '#!/bin/sh\nset -e\ngit-update-server-info\ngitosis-run-hook update-mirrors')
def test_push_inits_subdir_parent_exists(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = os.path.join(tmp, 'repositories') os.mkdir(repositories) foo = os.path.join(repositories, 'foo') # silly mode on purpose; not to be touched os.mkdir(foo, 0o751) 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', 'writable', 'foo/bar') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo/bar.git'", ) eq(os.listdir(repositories), ['foo']) util.check_mode(foo, 0o751, is_dir=True) eq(os.listdir(foo), ['bar.git']) assert os.path.isfile(os.path.join(repositories, 'foo', 'bar.git', 'HEAD'))
def test_typo_writeable(): tmp = util.maketemp() repository.init(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') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') log = logging.getLogger('gitosis.serve') buf = StringIO() handler = logging.StreamHandler(buf) log.addHandler(handler) try: got = serve.serve( cfg=cfg, user='******', 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", )
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='******', 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", )
def test_push_inits_if_needed_existsWithExtension(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section("gitosis") repositories = os.path.join(tmp, "repositories") os.mkdir(repositories) cfg.set("gitosis", "repositories", repositories) cfg.add_section("group foo") cfg.set("group foo", "members", "jdoe") cfg.set("group foo", "writable", "foo") os.mkdir(os.path.join(repositories, "foo.git")) serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo'") eq(os.listdir(repositories), ["foo.git"]) # it should *not* have HEAD here as we just mkdirred it and didn't # create it properly, and the mock repo didn't have anything in # it.. having HEAD implies serve ran git init, which is supposed # to be unnecessary here eq(os.listdir(os.path.join(repositories, "foo.git")), [])
def test_push_inits_if_needed_haveExtension(): # a push to 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", "writable", "foo") serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo.git'") eq(os.listdir(repositories), ["foo.git"]) assert os.path.isfile(os.path.join(repositories, "foo.git", "HEAD"))
def test_push_inits_sets_export_ok(): 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", "writable", "foo") cfg.add_section("repo foo") cfg.set("repo foo", "daemon", "yes") serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo'") eq(os.listdir(repositories), ["foo.git"]) path = os.path.join(repositories, "foo.git", "git-daemon-export-ok") assert os.path.exists(path)
def test_push_inits_subdir_parent_missing(): 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", "writable", "foo/bar") serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo/bar.git'") eq(os.listdir(repositories), ["foo"]) foo = os.path.join(repositories, "foo") util.check_mode(foo, 0750, is_dir=True) eq(os.listdir(foo), ["bar.git"]) assert os.path.isfile(os.path.join(repositories, "foo", "bar.git", "HEAD"))
def test_simple_write_space(): 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", "writable", "foo") got = serve.serve(cfg=cfg, user="******", command="git receive-pack 'foo'") eq(got, "git receive-pack '%s/foo.git'" % tmp)
def test_simple_read_archive(): 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", "readonly", "foo") got = serve.serve(cfg=cfg, user="******", command="git upload-archive 'foo'") eq(got, "git upload-archive '%s/foo.git'" % tmp)
def test_push_inits_if_needed_existsWithExtension(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = os.path.join(tmp, 'repositories') os.mkdir(repositories) cfg.set('gitosis', 'repositories', repositories) cfg.add_section('group foo') cfg.set('group foo', 'members', 'jdoe') cfg.set('group foo', 'writable', 'foo') os.mkdir(os.path.join(repositories, 'foo.git')) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) # it should *not* have HEAD here as we just mkdirred it and didn't # create it properly, and the mock repo didn't have anything in # it.. having HEAD implies serve ran git init, which is supposed # to be unnecessary here eq(os.listdir(os.path.join(repositories, 'foo.git')), [])
def test_push_inits_if_needed_haveExtension(): # a push to 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', 'writable', 'foo') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo.git'", ) eq(os.listdir(repositories), ['foo.git']) assert os.path.isfile(os.path.join(repositories, 'foo.git', 'HEAD'))
def test_push_inits_templates(): tmp = util.maketemp() templatedir = os.path.join( os.path.dirname(__file__), 'mocktemplates', ) cfg = RawConfigParser() cfg.add_section('gitosis') repositories = os.path.join(tmp, 'repositories') os.mkdir(repositories) cfg.set('gitosis', 'repositories', repositories) cfg.set('gitosis', 'init-template', templatedir) 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', 'writable', 'foo') os.umask(0022) serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) path = os.path.join(repositories, 'foo.git') assert os.path.isfile(os.path.join(path, 'HEAD')) got = readFile(os.path.join(path, 'no-confusion')) eq(got, 'i should show up\n') check_mode( os.path.join(path, 'hooks', 'post-update'), 0755, is_file=True, ) 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')) or os.path.isfile(os.path.join(path, 'hooks', 'pre-rebase.sample')))
def test_push_inits_updates_projects_list(): 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", "writable", "foo") cfg.add_section("repo foo") cfg.set("repo foo", "gitweb", "yes") os.mkdir(os.path.join(repositories, "gitosis-admin.git")) serve.serve(cfg=cfg, user="******", command="git-receive-pack 'foo'") eq(sorted(os.listdir(repositories)), sorted(["foo.git", "gitosis-admin.git"])) path = os.path.join(generated, "projects.list") assert os.path.exists(path) got = util.readFile(path) eq(got, "foo.git\n")
def test_push_inits_subdir_parent_missing(): 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', 'writable', 'foo/bar') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo/bar.git'", ) eq(os.listdir(repositories), ['foo']) foo = os.path.join(repositories, 'foo') util.check_mode(foo, 0755, is_dir=True) eq(os.listdir(foo), ['bar.git']) assert os.path.isfile(os.path.join(repositories, 'foo', 'bar.git', 'HEAD'))
def test_simple_read_leading_slash(): 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', 'readonly', 'foo') got = serve.serve( cfg=cfg, user='******', command="git-upload-pack '/foo'", ) eq(got, "git-upload-pack '%s/foo.git'" % tmp)
def test_simple_write_space(): 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', 'writable', 'foo') got = serve.serve( cfg=cfg, user='******', command="git receive-pack 'foo'", ) eq(got, "git receive-pack '%s/foo.git'" % tmp)
def test_simple_read_archive(): 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', 'readonly', 'foo') got = serve.serve( cfg=cfg, user='******', command="git upload-archive 'foo'", ) eq(got, "git upload-archive '%s/foo.git'" % tmp)
def test_push_inits_if_needed_existsWithExtension(): tmp = util.maketemp() cfg = RawConfigParser() cfg.add_section('gitosis') repositories = path.join(tmp, 'repositories') os.mkdir(repositories) cfg.set('gitosis', 'repositories', repositories) cfg.add_section('group foo') cfg.set('group foo', 'members', 'jdoe') cfg.set('group foo', 'writable', 'foo') os.mkdir(path.join(repositories, 'foo.git')) cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') serve.serve( cfg=cfg, user='******', command="git-receive-pack 'foo'", ) eq(os.listdir(repositories), ['foo.git']) # it should *not* have HEAD here as we just mkdirred it and didn't # create it properly, and the mock repo didn't have anything in # it.. having HEAD implies serve ran git init, which is supposed # to be unnecessary here eq(os.listdir(path.join(repositories, 'foo.git')), [])
def test_absolute(): # as the only convenient way to use non-standard SSH ports with # git is via the ssh://user@host:port/path syntax, and that syntax # forces absolute urls, just force convert absolute paths to # relative paths; you'll never really want absolute paths via # gitosis, anyway. 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", "readonly", "foo") got = serve.serve(cfg=cfg, user="******", command="git-upload-pack '/foo'") eq(got, "git-upload-pack '%s/foo.git'" % tmp)
def test_simple_read_space(): tmp = util.maketemp() repository.init(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', 'readonly', 'foo') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') got = serve.serve( cfg=cfg, user='******', command="git upload-pack 'foo'", ) eq(got, "git upload-pack '%s/foo.git'" % tmp)
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="******", 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_absolute(): # as the only convenient way to use non-standard SSH ports with # git is via the ssh://user@host:port/path syntax, and that syntax # forces absolute urls, just force convert absolute paths to # relative paths; you'll never really want absolute paths via # gitosis, anyway. 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', 'readonly', 'foo') got = serve.serve( cfg=cfg, user='******', 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="******", 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')
def test_absolute(): # as the only convenient way to use non-standard SSH ports with # git is via the ssh://user@host:port/path syntax, and that syntax # forces absolute urls, just force convert absolute paths to # relative paths; you'll never really want absolute paths via # gitosis, anyway. tmp = util.maketemp() repository.init(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', 'readonly', 'foo') cfg.add_section('rsp') cfg.set('rsp', 'haveAccessURL', 'example.org') got = serve.serve( cfg=cfg, user='******', command="git-upload-pack '/foo'", ) eq(got, "git-upload-pack '%s/foo.git'" % tmp)
def test_read_inits_if_needed_with_init_permission(): # 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', 'init', 'foo') got = serve.serve( cfg=cfg, user='******', 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_cvsserver(): 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', 'writable', 'foo') cfg.add_section('user jdoe') cfg.set('user jdoe', 'name', 'John Doe') cfg.set('user jdoe', 'email', '*****@*****.**') got = serve.serve( cfg=cfg, user='******', command="cvs '/foo' server", ) eq(got, "cvs server") base = os.environ['GIT_CVSSERVER_BASE_PATH'] eq(base, tmp) eq(os.environ['GIT_CVSSERVER_ROOTS'], os.path.join(base, 'foo.git')) eq(os.environ['GIT_AUTHOR_NAME'], 'John Doe') eq(os.environ['GIT_AUTHOR_EMAIL'], '*****@*****.**')
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='******', 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'))