def init_admin_repository( git_dir, pubkey, user, ): repository.init( path=git_dir, template=resource_filename('gitosis.templates', 'admin') ) repository.init( path=git_dir, ) # can't rely on setuptools and all kinds of distro packaging to # have kept our templates executable, it seems os.chmod(os.path.join(git_dir, 'hooks', 'post-update'), 0755) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg_file = StringIO() print >>cfg_file, '[gitosis]' print >>cfg_file cfg = RawConfigParser() cfg.add_section('group gitosis-admin') cfg.set('group gitosis-admin', 'members', user) cfg.set('group gitosis-admin', 'writable', 'gitosis-admin') cfg.write(cfg_file) initial_commit( git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user, )
def init_admin_repository( git_dir, pubkey, user, ): repository.init( path=git_dir, template=resource_filename('gitosis.templates', 'admin') ) repository.init( path=git_dir, ) hook = os.path.join(git_dir, 'hooks', 'post-update') os.chmod(hook, 0755) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg_file = StringIO() print >>cfg_file, '[gitosis]' print >>cfg_file cfg = RawConfigParser() cfg.add_section('group gitosis-admin') cfg.set('group gitosis-admin', 'members', user) cfg.set('group gitosis-admin', 'writable', 'gitosis-admin') cfg.write(cfg_file) initial_commit( git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user, )
def init_admin_repository(git_dir, pubkey, user, config): """Create the initial gitosis-admin reposistory.""" repository.init( path=git_dir, template=resource_filename('gitosis.templates', 'admin') ) repository.init( path=git_dir, ) # Check that the config meets the min requirements if not config.has_section('gitosis'): config.add_section('gitosis') if not config.has_section('group gitosis-admin'): config.add_section('group gitosis-admin') if not config.has_option('group gitosis-admin', 'writable'): config.set('group gitosis-admin', 'writable', 'gitosis-admin') # Make sure the admin user is in the admin list, else they will lock themselves out! adminlist = config.get('group gitosis-admin', 'members', default=' ').split() if user not in adminlist: adminlist.append(user) config.set('group gitosis-admin', 'members', ' '.join(adminlist)) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg_file = StringIO() config.write(cfg_file) initial_commit( git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user, )
def init_admin_repository( git_dir, pubkey, user, ): repository.init( path=git_dir, template=resource_filename('gitosis.templates', 'admin') ) repository.init( path=git_dir, ) # hook = os.path.join(git_dir, 'hooks', 'post-update') # os.chmod(hook, 0755) log.info("Git dir: %s", git_dir) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg = RedisConfigParser() cfg.add_section('gitosis') cfg.add_section('group gitosis-admin') cfg.set('group gitosis-admin', 'members', user) cfg.set('group gitosis-admin', 'writable', 'gitosis-admin') initial_commit( git_dir=git_dir, cfg=cfg, pubkey=pubkey, user=user, )
def init_admin_repository( git_dir, pubkey, user, ): repository.init(path=git_dir, template=resource_filename('gitosis.templates', 'admin')) repository.init(path=git_dir, ) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg_file = StringIO() print >> cfg_file, '[gitosis]' print >> cfg_file cfg = RawConfigParser() cfg.add_section('group gitosis-admin') cfg.set('group gitosis-admin', 'members', user) cfg.set('group gitosis-admin', 'writable', 'gitosis-admin') cfg.write(cfg_file) initial_commit( git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user, )
def init_admin_repository( git_dir, pubkey, user, ): repository.init( path=git_dir, template=resource_filename('gitosis.templates', 'admin') ) repository.init( path=git_dir, ) if not repository.has_initial_commit(git_dir): log.info('Making initial commit...') cfg = GitoliteConfig() cfg.set_group_members('@gitosis-admin', [user]) cfg.set_repo('gitosis-admin', 'RW+', ['@gitosis-admin']) cfg_file = cfg.serialize() initial_commit( git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user, )
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_has_initial_commit_yes(): tmp = maketemp() repository.init(path=tmp) repository.fast_import( git_dir=tmp, commit_msg='fakecommit', committer='John Doe <*****@*****.**>', files=[], ) got = repository.has_initial_commit(git_dir=tmp) eq(got, True)
def init_admin_repository(git_dir, pubkey, user): repository.init(path=git_dir, template=resource_filename("gitosis.templates", "admin")) repository.init(path=git_dir) if not repository.has_initial_commit(git_dir): log.info("Making initial commit...") # ConfigParser does not guarantee order, so jump through hoops # to make sure [gitosis] is first cfg_file = StringIO() print >> cfg_file, "[gitosis]" print >> cfg_file cfg = RawConfigParser() cfg.add_section("group gitosis-admin") cfg.set("group gitosis-admin", "members", user) cfg.set("group gitosis-admin", "writable", "gitosis-admin") cfg.write(cfg_file) initial_commit(git_dir=git_dir, cfg=cfg_file.getvalue(), pubkey=pubkey, user=user)
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_has_initial_commit_no(): tmp = maketemp() repository.init(path=tmp) got = repository.has_initial_commit(git_dir=tmp) eq(got, False)