Пример #1
0
def setCommitEmailHook(reponame, enable):
    prepare(reponame)

    reposdir = repository.directory('git', reponame)
    hook_dir = reposdir + 'hooks' + 'post-receive.d'
    mkdirs(hook_dir)
    hook_dest = hook_dir + '001-commit-email.hook'

    if enable:
        variables = {
            'submin_lib_dir': options.lib_path(),
            'base_url': options.url_path('base_url_submin'),
            'http_vhost': options.http_vhost(),
            'hook_version': HOOK_VERSIONS['commit-email'],
        }
        hook = evaluate('plugins/vcs/git/post-receive', variables)
        try:
            os.unlink(hook_dest)
        except OSError as e:
            if e.errno != errno.ENOENT:
                raise

        try:
            with file(hook_dest, 'w') as f:
                f.write(hook)

            os.chmod(hook_dest, 0o755)
        except OSError as e:
            raise repository.PermissionError("Enabling hook failed: %s" %
                                             (str(e), ))
        try:
            cfg = repository.directory('git', reponame) + 'config'
            email = options.value(
                'commit_email_from',
                'Please configure commit_email_from <*****@*****.**>')

            set_git_config(cfg, 'multimailhook.emailmaxlines', '2000')
            prefix = '[%s]' % reponame
            set_git_config(cfg, 'multimailhook.emailprefix', prefix)
            set_git_config(cfg, 'multimailhook.envelopesender', email)
        except SetGitConfigError as e:
            raise repository.PermissionError(
                "Enabling hook succeeded, but configuring it failed: %s" %
                (str(e)))
    else:
        try:
            os.unlink(hook_dest)
        except OSError as e:
            if e.errno != errno.ENOENT:
                raise repository.PermissionError("Removing hook failed: %s" %
                                                 (str(e), ))
Пример #2
0
def setTracSyncHook(reponame, enable):
    prepare(reponame)

    hook_dir = repository.directory('git', reponame) + 'hooks'
    hook = hook_dir + 'post-receive.d' + '002-trac-sync.hook'

    try:
        os.unlink(hook)
    except OSError as e:
        if e.errno != errno.ENOENT:
            raise repository.PermissionError(
                "Removing trac-sync hook failed: %s" % (str(e), ))

    if not enable:
        return

    variables = {
        'submin_env': str(options.env_path()),
        'repository': reponame,
        'hook_version': HOOK_VERSIONS['trac-sync'],
    }
    contents = evaluate('plugins/vcs/git/trac-sync', variables)
    with file(hook, 'w') as f:
        f.writelines(contents)

    os.chmod(hook, 0o755)