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_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_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_export_simple(): tmp = maketemp() git_dir = os.path.join(tmp, 'repo.git') repository.init(path=git_dir) repository.fast_import( git_dir=git_dir, committer='John Doe <*****@*****.**>', commit_msg="""\ Reverse the polarity of the neutron flow. Frobitz the quux and eschew obfuscation. """, files=[ ('foo', 'content'), ('bar/quux', 'another'), ], ) export = os.path.join(tmp, 'export') repository.export(git_dir=git_dir, path=export) eq(sorted(os.listdir(export)), sorted(['foo', 'bar'])) eq(readFile(os.path.join(export, 'foo')), 'content') eq(os.listdir(os.path.join(export, 'bar')), ['quux']) eq(readFile(os.path.join(export, 'bar', 'quux')), 'another') child = subprocess.Popen( args=[ 'git', '--git-dir=%s' % git_dir, 'cat-file', 'commit', 'HEAD', ], cwd=git_dir, stdout=subprocess.PIPE, close_fds=True, ) got = child.stdout.read().splitlines() returncode = child.wait() if returncode != 0: raise RuntimeError('git exit status %d' % returncode) eq(got[0].split(None, 1)[0], 'tree') eq(got[1].rsplit(None, 2)[0], 'author John Doe <*****@*****.**>') eq(got[2].rsplit(None, 2)[0], 'committer John Doe <*****@*****.**>') eq(got[3], '') eq(got[4], 'Reverse the polarity of the neutron flow.') eq(got[5], '') eq(got[6], 'Frobitz the quux and eschew obfuscation.') eq(got[7:], [])
def test_init_environment(): tmp = maketemp() path = os.path.join(tmp, "repo.git") mockbindir = os.path.join(tmp, "mockbin") os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, "git") writeFile( mockgit, """\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" """, ) os.chmod(mockgit, 0755) magic_cookie = "%d" % random.randint(1, 100000) good_path = os.environ["PATH"] try: os.environ["PATH"] = "%s:%s" % (mockbindir, good_path) os.environ["GITOSIS_UNITTEST_COOKIE"] = magic_cookie repository.init(path) finally: os.environ["PATH"] = good_path os.environ.pop("GITOSIS_UNITTEST_COOKIE", None) eq(sorted(os.listdir(tmp)), sorted(["mockbin", "cookie", "repo.git"])) got = readFile(os.path.join(tmp, "cookie")) eq(got, magic_cookie)
def test_simple(self): tmp = maketemp() authorized_keys = path.join(tmp, 'authorized_keys') with open(authorized_keys, 'w') as f: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="PATH=/opt/local/bin /foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %s baz''' % KEY_2) keydir = path.join(tmp, 'one') mkdir(keydir) # okay so we write the key into a file in keyir with open(path.join(keydir, 'jdoe.pub'), 'w') as f: f.write(KEY_1 + '\n') ssh.writeAuthorizedKeys(authorized_keys, keydir) got = readFile(authorized_keys) eq(got, '''\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="PATH=/opt/local/bin gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %s''' % KEY_1)
def test_has_initial_commit_environment(): tmp = maketemp() git_dir = os.path.join(tmp, "repo.git") mockbindir = os.path.join(tmp, "mockbin") os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, "git") writeFile( mockgit, """\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" """, ) os.chmod(mockgit, 0755) repository.init(path=tmp) repository.fast_import(git_dir=tmp, commit_msg="fakecommit", committer="John Doe <*****@*****.**>", files=[]) magic_cookie = "%d" % random.randint(1, 100000) good_path = os.environ["PATH"] try: os.environ["PATH"] = "%s:%s" % (mockbindir, good_path) os.environ["GITOSIS_UNITTEST_COOKIE"] = magic_cookie got = repository.has_initial_commit(git_dir=tmp) finally: os.environ["PATH"] = good_path os.environ.pop("GITOSIS_UNITTEST_COOKIE", None) eq(got, True) got = readFile(os.path.join(tmp, "cookie")) eq(got, magic_cookie)
def test_push_inits_sets_description(): 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', 'description', 'foodesc') 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']) description = path.join(repositories, 'foo.git', 'description') assert path.exists(description) got = util.readFile(description) eq(got, 'foodesc')
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_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_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_simple(self): tmp = maketemp() path = os.path.join(tmp, 'authorized_keys') f = file(path, 'w') try: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz ''' % dict(key_2=KEY_2)) finally: f.close() keydir = os.path.join(tmp, 'one') mkdir(keydir) writeFile(os.path.join(keydir, 'jdoe.pub'), KEY_1 + '\n') ssh.writeAuthorizedKeys(path=path, keydir=keydir) got = readFile(path) eq( got, '''\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s ''' % dict(key_1=KEY_1))
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_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 exported(path,cont): assert os.path.isdir(path) p = htaccess.htaccess_path(path) if cont == None: assert not os.path.exists(p) else: assert os.path.exists(p) rcont = readFile(p) eq(rcont, cont)
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_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_description_not_set(): tmp = maketemp() path = os.path.join(tmp, "foo.git") mkdir(path) writeFile(os.path.join(path, "description"), "i was here first\n") cfg = RawConfigParser() cfg.add_section("gitosis") cfg.set("gitosis", "repositories", tmp) cfg.add_section("repo foo") gitweb.set_descriptions(config=cfg) got = readFile(os.path.join(path, "description")) eq(got, "i was here first\n")
def test_description_none(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'description', 'foodesc') gitweb.set_descriptions(config=cfg, ) got = readFile(os.path.join(path, 'description')) eq(got, 'foodesc\n')
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_description_default(): tmp = maketemp() path = os.path.join(tmp, "foo.git") mkdir(path) writeFile(os.path.join(path, "description"), "Unnamed repository; edit this file to name it for gitweb.\n") cfg = RawConfigParser() cfg.add_section("gitosis") cfg.set("gitosis", "repositories", tmp) cfg.add_section("repo foo") cfg.set("repo foo", "description", "foodesc") gitweb.set_descriptions(config=cfg) got = readFile(os.path.join(path, "description")) eq(got, "foodesc\n")
def test_projectsList_path(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'gitweb', 'yes') projects_list = os.path.join(tmp, 'projects.list') gitweb.write_project_list(cfg, projects_list) got = readFile(projects_list) eq(got, 'foo.git')
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_export_simple(): tmp = maketemp() git_dir = os.path.join(tmp, "repo.git") repository.init(path=git_dir) repository.fast_import( git_dir=git_dir, committer="John Doe <*****@*****.**>", commit_msg="""\ Reverse the polarity of the neutron flow. Frobitz the quux and eschew obfuscation. """, files=[("foo", "content"), ("bar/quux", "another")], ) export = os.path.join(tmp, "export") repository.export(git_dir=git_dir, path=export) eq(sorted(os.listdir(export)), sorted(["foo", "bar"])) eq(readFile(os.path.join(export, "foo")), "content") eq(os.listdir(os.path.join(export, "bar")), ["quux"]) eq(readFile(os.path.join(export, "bar", "quux")), "another") child = subprocess.Popen( args=["git", "--git-dir=%s" % git_dir, "cat-file", "commit", "HEAD"], cwd=git_dir, stdout=subprocess.PIPE, close_fds=True, ) got = child.stdout.read().splitlines() returncode = child.wait() if returncode != 0: raise RuntimeError("git exit status %d" % returncode) eq(got[0].split(None, 1)[0], "tree") eq(got[1].rsplit(None, 2)[0], "author John Doe <*****@*****.**>") eq(got[2].rsplit(None, 2)[0], "committer John Doe <*****@*****.**>") eq(got[3], "") eq(got[4], "Reverse the polarity of the neutron flow.") eq(got[5], "") eq(got[6], "Frobitz the quux and eschew obfuscation.") eq(got[7:], [])
def test_description_none(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'description', 'foodesc') gitweb.set_descriptions( config=cfg, ) got = readFile(os.path.join(path, 'description')) eq(got, 'foodesc\n')
def test_export_environment(): tmp = maketemp() git_dir = os.path.join(tmp, 'repo.git') mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile( mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s\n' "$GITOSIS_UNITTEST_COOKIE" >>"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0o755) repository.init(path=git_dir) repository.fast_import( git_dir=git_dir, committer='John Doe <*****@*****.**>', commit_msg="""\ Reverse the polarity of the neutron flow. Frobitz the quux and eschew obfuscation. """, files=[ ('foo', 'content'), ('bar/quux', 'another'), ], ) export = os.path.join(tmp, 'export') magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie repository.export(git_dir=git_dir, path=export) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) got = readFile(os.path.join(tmp, 'cookie')) eq( got, # export runs git twice '%s\n%s\n' % (magic_cookie, magic_cookie), )
def test_projectsList_path(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'gitweb', 'yes') projects_list = os.path.join(tmp, 'projects.list') gitweb.generate_project_list(config=cfg, path=projects_list) got = readFile(projects_list) eq(got, '''\ foo.git ''')
def test_export_environment(): tmp = maketemp() git_dir = os.path.join(tmp, "repo.git") mockbindir = os.path.join(tmp, "mockbin") os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, "git") writeFile( mockgit, """\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s\n' "$GITOSIS_UNITTEST_COOKIE" >>"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" """, ) os.chmod(mockgit, 0755) repository.init(path=git_dir) repository.fast_import( git_dir=git_dir, committer="John Doe <*****@*****.**>", commit_msg="""\ Reverse the polarity of the neutron flow. Frobitz the quux and eschew obfuscation. """, files=[("foo", "content"), ("bar/quux", "another")], ) export = os.path.join(tmp, "export") magic_cookie = "%d" % random.randint(1, 100000) good_path = os.environ["PATH"] try: os.environ["PATH"] = "%s:%s" % (mockbindir, good_path) os.environ["GITOSIS_UNITTEST_COOKIE"] = magic_cookie repository.export(git_dir=git_dir, path=export) finally: os.environ["PATH"] = good_path os.environ.pop("GITOSIS_UNITTEST_COOKIE", None) got = readFile(os.path.join(tmp, "cookie")) eq( got, # export runs git twice "%s\n%s\n" % (magic_cookie, magic_cookie), )
def test_export_environment(): tmp = maketemp() git_dir = os.path.join(tmp, 'repo.git') mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile(mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s\n' "$GITOSIS_UNITTEST_COOKIE" >>"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0755) repository.init(path=git_dir) repository.fast_import( git_dir=git_dir, committer='John Doe <*****@*****.**>', commit_msg="""\ Reverse the polarity of the neutron flow. Frobitz the quux and eschew obfuscation. """, files=[ ('foo', 'content'), ('bar/quux', 'another'), ], ) export = os.path.join(tmp, 'export') magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie repository.export(git_dir=git_dir, path=export) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) got = readFile(os.path.join(tmp, 'cookie')) eq( got, # export runs git twice '%s\n%s\n' % (magic_cookie, magic_cookie), )
def test_description_default(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) writeFile( os.path.join(path, 'description'), 'Unnamed repository; edit this file to name it for gitweb.\n', ) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'description', 'foodesc') gitweb.set_descriptions(config=cfg, ) got = readFile(os.path.join(path, 'description')) eq(got, 'foodesc\n')
def test_fast_import_environment(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') repository.init(path=path) mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile( mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0o755) magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie repository.fast_import( git_dir=path, commit_msg='foo initial bar', committer='Mr. Unit Test <*****@*****.**>', files=[ ('foo', 'bar\n'), ], ) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) eq( sorted(os.listdir(tmp)), sorted([ 'mockbin', 'cookie', 'repo.git', ]), ) got = readFile(os.path.join(tmp, 'cookie')) eq(got, magic_cookie)
def test_fast_import_environment(): tmp = maketemp() path = os.path.join(tmp, 'repo.git') repository.init(path=path) mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile(mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0755) magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie repository.fast_import( git_dir=path, commit_msg='foo initial bar', committer='Mr. Unit Test <*****@*****.**>', files=[ ('foo', 'bar\n'), ], ) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) eq( sorted(os.listdir(tmp)), sorted([ 'mockbin', 'cookie', 'repo.git', ]), ) got = readFile(os.path.join(tmp, 'cookie')) eq(got, magic_cookie)
def test_description_default(): tmp = maketemp() path = os.path.join(tmp, 'foo.git') mkdir(path) writeFile( os.path.join(path, 'description'), 'Unnamed repository; edit this file to name it for gitweb.\n', ) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', tmp) cfg.add_section('repo foo') cfg.set('repo foo', 'description', 'foodesc') gitweb.set_descriptions( config=cfg, ) got = readFile(os.path.join(path, 'description')) eq(got, 'foodesc\n')
def test_projectsList_path(): tmp = maketemp() path = os.path.join(tmp, "foo.git") mkdir(path) cfg = RawConfigParser() cfg.add_section("gitosis") cfg.set("gitosis", "repositories", tmp) cfg.add_section("repo foo") cfg.set("repo foo", "gitweb", "yes") projects_list = os.path.join(tmp, "projects.list") gitweb.generate_project_list(config=cfg, path=projects_list) got = readFile(projects_list) eq( got, """\ foo.git """, )
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_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_has_initial_commit_environment(): tmp = maketemp() git_dir = os.path.join(tmp, 'repo.git') mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile( mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0o755) repository.init(path=tmp) repository.fast_import( git_dir=tmp, commit_msg='fakecommit', committer='John Doe <*****@*****.**>', files=[], ) magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie got = repository.has_initial_commit(git_dir=tmp) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) eq(got, True) got = readFile(os.path.join(tmp, 'cookie')) eq(got, magic_cookie)
def test_has_initial_commit_environment(): tmp = maketemp() git_dir = os.path.join(tmp, 'repo.git') mockbindir = os.path.join(tmp, 'mockbin') os.mkdir(mockbindir) mockgit = os.path.join(mockbindir, 'git') writeFile(mockgit, '''\ #!/bin/sh set -e # git wrapper for gitosis unit tests printf '%s' "$GITOSIS_UNITTEST_COOKIE" >"$(dirname "$0")/../cookie" # strip away my special PATH insert so system git will be found PATH="${PATH#*:}" exec git "$@" ''') os.chmod(mockgit, 0755) repository.init(path=tmp) repository.fast_import( git_dir=tmp, commit_msg='fakecommit', committer='John Doe <*****@*****.**>', files=[], ) magic_cookie = '%d' % random.randint(1, 100000) good_path = os.environ['PATH'] try: os.environ['PATH'] = '%s:%s' % (mockbindir, good_path) os.environ['GITOSIS_UNITTEST_COOKIE'] = magic_cookie got = repository.has_initial_commit(git_dir=tmp) finally: os.environ['PATH'] = good_path os.environ.pop('GITOSIS_UNITTEST_COOKIE', None) eq(got, True) got = readFile(os.path.join(tmp, 'cookie')) eq(got, magic_cookie)
def test_simple(self): tmp = maketemp() path = os.path.join(tmp, "authorized_keys") f = file(path, "w") try: f.write( """\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz """ % dict(key_2=KEY_2) ) finally: f.close() keydir = os.path.join(tmp, "one") mkdir(keydir) writeFile(os.path.join(keydir, "jdoe.pub"), KEY_1 + "\n") ssh.writeAuthorizedKeys(path=path, keydir=keydir) got = readFile(path) eq( got, """\ # foo bar baz ### autogenerated by gitosis, DO NOT EDIT command="gitosis-serve jdoe",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s """ % dict(key_1=KEY_1), )
def test_simple(self): tmp = maketemp() path = os.path.join(tmp, 'authorized_keys') f = file(path, 'w') try: f.write('''\ # foo bar ### autogenerated by gitosis, DO NOT EDIT command="/foo/bar/baz/gitosis-serve wsmith",no-port-forwarding,\ no-X11-forwarding,no-agent-forwarding,no-pty %(key_2)s baz ''' % dict(key_2=KEY_2)) finally: f.close() keydir = os.path.join(tmp, 'one') mkdir(keydir) writeFile(os.path.join(keydir, 'jdoe.pub'), KEY_1+'\n') ssh.writeAuthorizedKeys( path=path, keydir=keydir) got = readFile(path) eq(got, '''# foo\nbar\nbaz\n### autogenerated by gitosis, DO NOT EDIT\ncommand="gitosis-serve jdoe",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %(key_1)s\n''' % dict(key_1=KEY_1))
def test_post_update_simple(): tmp = maketemp() repos = os.path.join(tmp, 'repositories') os.mkdir(repos) admin_repository = os.path.join(repos, 'gitosis-admin.git') pubkey = ( 'ssh-somealgo ' +'0123456789ABCDEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= fakeuser@fakehost') user = '******' init.init_admin_repository( git_dir=admin_repository, pubkey=pubkey, user=user, ) repository.init(path=os.path.join(repos, 'forweb.git')) repository.init(path=os.path.join(repos, 'fordaemon.git')) repository.fast_import( git_dir=admin_repository, committer='John Doe <*****@*****.**>', commit_msg="""\ stuff """, parent='refs/heads/master^0', files=[ ('gitosis.conf', """\ [gitosis] [group gitosis-admin] members = theadmin writable = gitosis-admin [repo fordaemon] daemon = yes [repo forweb] gitweb = yes owner = John Doe description = blah blah """), ('keydir/jdoe.pub', 'ssh-somealgo ' +'0123456789ABCDEFBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' +'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' +'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' +'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB= [email protected]'), ], ) cfg = RawConfigParser() cfg.add_section('gitosis') cfg.set('gitosis', 'repositories', repos) generated = os.path.join(tmp, 'generated') os.mkdir(generated) cfg.set('gitosis', 'generate-files-in', generated) ssh = os.path.join(tmp, 'ssh') os.mkdir(ssh) cfg.set( 'gitosis', 'ssh-authorized-keys-path', os.path.join(ssh, 'authorized_keys'), ) run_hook.post_update( cfg=cfg, git_dir=admin_repository, ) got = readFile(os.path.join(repos, 'forweb.git', 'description')) eq(got, 'blah blah\n') got = os.listdir(generated) eq(got, ['projects.list']) got = readFile(os.path.join(generated, 'projects.list')) eq( got, """\ forweb.git John+Doe """, ) got = os.listdir(os.path.join(repos, 'fordaemon.git')) assert 'git-daemon-export-ok' in got, \ "git-daemon-export-ok not created: %r" % got got = os.listdir(ssh) eq(got, ['authorized_keys']) got = readFile(os.path.join(ssh, 'authorized_keys')).splitlines(True) assert 'command="gitosis-serve jdoe",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-somealgo 0123456789ABCDEFBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB= [email protected]\n' in got, \ "SSH authorized_keys line for jdoe not found: %r" % got