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_init_templates(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') templatedir = os.path.join( os.path.dirname(__file__), 'mocktemplates', ) repository.init(path, template=templatedir) repository.init(path) 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 ( # 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_templates(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') templatedir = os.path.join( os.path.dirname(__file__), 'mocktemplates', ) # for reproducibility os.umask(0o022) repository.init(path, template=templatedir) repository.init(path) got = readFile(os.path.join(path, 'no-confusion')) eq(got, 'i should show up\n') check_mode( os.path.join(path, 'hooks', 'post-update'), 0o755, 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 ( # 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_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_init_exist_git(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') repository.init(path) repository.init(path) check_mode(path, 0o750, is_dir=True) check_bare(path)
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_init_exist_git(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') repository.init(path) repository.init(path) check_mode(path, 0750, is_dir=True) check_bare(path)
def test_init_default_templates(): tmp = maketemp() path = os.path.join(tmp, "repo.git") repository.init(path) hook_path = os.path.join(path, "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_init_exist_dir(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') mkdir(path, 0o710) check_mode(path, 0o710, is_dir=True) repository.init(path) # my weird access mode is preserved check_mode(path, 0o710, is_dir=True) check_bare(path)
def test_init_exist_dir(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') mkdir(path, 0710) check_mode(path, 0710, is_dir=True) repository.init(path) # my weird access mode is preserved check_mode(path, 0710, is_dir=True) check_bare(path)
def test_init_admin_repository(): tmp = maketemp() admin_repository = os.path.join(tmp, 'admin.git') pubkey = ( 'ssh-somealgo ' +'0123456789ABCDEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= fakeuser@fakehost') user = '******' cfg = GitosisRawConfigParser() init.init_admin_repository( git_dir=admin_repository, pubkey=pubkey, user=user, config=cfg, ) eq(os.listdir(tmp), ['admin.git']) hook = os.path.join( tmp, 'admin.git', 'hooks', 'post-update', ) util.check_mode(hook, 0755, is_file=True) got = util.readFile(hook).splitlines() assert 'gitosis-run-hook post-update' in got export_dir = os.path.join(tmp, 'export') repository.export(git_dir=admin_repository, path=export_dir) eq(sorted(os.listdir(export_dir)), sorted(['gitosis.conf', 'keydir'])) eq(os.listdir(os.path.join(export_dir, 'keydir')), ['jdoe.pub']) got = util.readFile( os.path.join(export_dir, 'keydir', 'jdoe.pub')) eq(got, pubkey) # the only thing guaranteed of initial config file ordering is # that [gitosis] is first got = util.readFile(os.path.join(export_dir, 'gitosis.conf')) # We can't gaurentee this anymore got = got.splitlines()[0] eq(got, '[gitosis]') cfg.read(os.path.join(export_dir, 'gitosis.conf')) eq(sorted(cfg.sections()), sorted([ 'gitosis', 'group gitosis-admin', ])) eq(cfg.items('gitosis'), []) eq(sorted(cfg.items('group gitosis-admin')), sorted([ ('writable', 'gitosis-admin'), ('members', 'jdoe'), ]))
def test_init_templates(): tmp = maketemp() path = os.path.join(tmp, "repo.git") templatedir = os.path.join(os.path.dirname(__file__), "mocktemplates") os.umask(0022) repository.init(path, template=templatedir) repository.init(path) 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")
def test_init_admin_repository(): tmp = maketemp() admin_repository = os.path.join(tmp, 'admin.git') pubkey = ('ssh-somealgo ' + '0123456789ABCDEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= fakeuser@fakehost') user = '******' init.init_admin_repository( git_dir=admin_repository, pubkey=pubkey, user=user, ) eq(os.listdir(tmp), ['admin.git']) hook = os.path.join( tmp, 'admin.git', 'hooks', 'post-update', ) util.check_mode(hook, 0o755, is_file=True) got = util.readFile(hook).splitlines() assert 'gitosis-run-hook post-update' in got export_dir = os.path.join(tmp, 'export') repository.export(git_dir=admin_repository, path=export_dir) eq(sorted(os.listdir(export_dir)), sorted(['gitosis.conf', 'keydir'])) eq(os.listdir(os.path.join(export_dir, 'keydir')), ['jdoe.pub']) got = util.readFile(os.path.join(export_dir, 'keydir', 'jdoe.pub')) eq(got, pubkey) # the only thing guaranteed of initial config file ordering is # that [gitosis] is first got = util.readFile(os.path.join(export_dir, 'gitosis.conf')) got = got.splitlines()[0] eq(got, '[gitosis]') cfg = RawConfigParser() cfg.read(os.path.join(export_dir, 'gitosis.conf')) eq(sorted(cfg.sections()), sorted([ 'gitosis', 'group gitosis-admin', ])) eq(cfg.items('gitosis'), []) eq(sorted(cfg.items('group gitosis-admin')), sorted([ ('writable', 'gitosis-admin'), ('members', 'jdoe'), ]))
def test_init_templates(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') templatedir = os.path.join( os.path.dirname(__file__), 'mocktemplates', ) repository.init(path, template=templatedir) repository.init(path) 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')
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_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_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_init_simple(): tmp = maketemp() path = os.path.join(tmp, "repo.git") repository.init(path) check_mode(path, 0750, is_dir=True) check_bare(path)
def test_init_custom_perm(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') repository.init(path, mode=0711) check_mode(path, 0711, is_dir=True) check_bare(path)