aboutsummaryrefslogtreecommitdiffstats
path: root/modules/subversion
diff options
context:
space:
mode:
Diffstat (limited to 'modules/subversion')
-rw-r--r--modules/subversion/manifests/client.pp2
-rw-r--r--modules/subversion/manifests/hook.pp2
-rw-r--r--modules/subversion/manifests/init.pp21
-rw-r--r--modules/subversion/manifests/mirror.pp2
-rw-r--r--modules/subversion/manifests/mirror_repository.pp8
-rw-r--r--modules/subversion/manifests/pre_commit_link.pp2
-rw-r--r--modules/subversion/manifests/repository.pp80
-rw-r--r--modules/subversion/manifests/snapshot.pp8
-rw-r--r--modules/subversion/templates/ciabot_svn.py398
-rwxr-xr-xmodules/subversion/templates/ciabot_svn.sh125
-rw-r--r--modules/subversion/templates/converted_to_git16
-rw-r--r--modules/subversion/templates/hook_commit.sh5
-rw-r--r--modules/subversion/templates/hook_irker4
-rw-r--r--modules/subversion/templates/hook_sendmail.pl12
-rw-r--r--modules/subversion/templates/irker.conf7
-rw-r--r--modules/subversion/templates/no_binary2
-rw-r--r--modules/subversion/templates/restricted_to_user2
-rw-r--r--modules/subversion/templates/xinetd1
18 files changed, 107 insertions, 590 deletions
diff --git a/modules/subversion/manifests/client.pp b/modules/subversion/manifests/client.pp
index a2aa42ee..083a58da 100644
--- a/modules/subversion/manifests/client.pp
+++ b/modules/subversion/manifests/client.pp
@@ -2,7 +2,7 @@ class subversion::client {
# svn spam log with
# Oct 26 13:30:01 valstar svn: No worthy mechs found
# without it,
- # http://mail-index.netbsd.org/pkgsrc-users/2008/11/23/msg008706.html
+ # https://mail-index.netbsd.org/pkgsrc-users/2008/11/23/msg008706.html
#
$sasl2_package = $::architecture ? {
x86_64 => 'lib64sasl2-plug-anonymous',
diff --git a/modules/subversion/manifests/hook.pp b/modules/subversion/manifests/hook.pp
index 08b626ad..a29ae22d 100644
--- a/modules/subversion/manifests/hook.pp
+++ b/modules/subversion/manifests/hook.pp
@@ -2,7 +2,7 @@ define subversion::hook($content, $type) {
$array = split($name,'\|')
$repo = $array[0]
$script = $array[1]
- file { "$repo/hooks/$type.d/$script":
+ file { "${repo}/hooks/${type}.d/${script}":
content => $content,
mode => '0755',
}
diff --git a/modules/subversion/manifests/init.pp b/modules/subversion/manifests/init.pp
index 01b06a62..9f009b5e 100644
--- a/modules/subversion/manifests/init.pp
+++ b/modules/subversion/manifests/init.pp
@@ -20,41 +20,46 @@ class subversion {
package { ['perl-SVN-Notify-Config', 'perl-SVN-Notify-Mirror']: }
$local_dir = '/usr/local/share/subversion/'
- $local_dirs = ["$local_dir/pre-commit.d", "$local_dir/post-commit.d"]
+ $local_dirs = ["${local_dir}/pre-commit.d", "${local_dir}/post-commit.d"]
file { [$local_dir,$local_dirs]:
ensure => directory,
}
# workaround the lack of umask command in puppet < 2.7
- mga-common::local_script { 'create_svn_repo.sh':
+ mga_common::local_script { 'create_svn_repo.sh':
content => template('subversion/create_svn_repo.sh')
}
- file { "$local_dir/pre-commit.d/no_binary":
+ file { "${local_dir}/pre-commit.d/no_binary":
mode => '0755',
content => template('subversion/no_binary')
}
- file { "$local_dir/pre-commit.d/no_root_commit":
+ file { "${local_dir}/pre-commit.d/no_root_commit":
mode => '0755',
content => template('subversion/no_root_commit')
}
- file { "$local_dir/pre-commit.d/no_empty_message":
+ file { "${local_dir}/pre-commit.d/no_empty_message":
mode => '0755',
content => template('subversion/no_empty_message')
}
- file { "$local_dir/pre-commit.d/single_word_commit":
+ file { "${local_dir}/pre-commit.d/single_word_commit":
mode => '0755',
content => template('subversion/single_word_commit')
}
- file { "$local_dir/pre-revprop-change":
+ file { "${local_dir}/pre-revprop-change":
mode => '0755',
content => template('subversion/pre-revprop-change')
}
+ file { "${local_dir}/pre-commit.d/converted_to_git":
+ mode => '0755',
+ content => template('subversion/converted_to_git')
+ }
+
# TODO : add check for
# - ym perl -MYAML -e 'YAML::LoadFile("-");'
# - tt ( do not seem to be possible, but this would be great )
@@ -65,7 +70,7 @@ class subversion {
# - openldap , like named
define syntax_check($regexp_ext,$check_cmd) {
- file { "$local_dir/pre-commit.d/$name":
+ file { "${subversion::server::local_dir}/pre-commit.d/${name}":
mode => '0755',
content => template('subversion/syntax_check.sh')
}
diff --git a/modules/subversion/manifests/mirror.pp b/modules/subversion/manifests/mirror.pp
index 27741752..2285ecb2 100644
--- a/modules/subversion/manifests/mirror.pp
+++ b/modules/subversion/manifests/mirror.pp
@@ -1,6 +1,6 @@
class subversion::mirror {
include subversion::tools
- mga-common::local_script { 'create_svn_mirror.sh':
+ mga_common::local_script { 'create_svn_mirror.sh':
content => template('subversion/create_svn_mirror.sh')
}
}
diff --git a/modules/subversion/manifests/mirror_repository.pp b/modules/subversion/manifests/mirror_repository.pp
index cf41ea63..1e0fabd3 100644
--- a/modules/subversion/manifests/mirror_repository.pp
+++ b/modules/subversion/manifests/mirror_repository.pp
@@ -2,14 +2,14 @@ define subversion::mirror_repository( $source,
$refresh = '*/5') {
include subversion::mirror
- exec { "/usr/local/bin/create_svn_mirror.sh $name $source":
+ exec { "/usr/local/bin/create_svn_mirror.sh ${name} ${source}":
creates => $name,
require => Package['subversion-tools']
}
- cron { "update $name":
- command => "/usr/bin/svnsync synchronize -q file://$name",
+ cron { "update ${name}":
+ command => "/usr/bin/svnsync synchronize -q file://${name}",
minute => $refresh,
- require => Exec["/usr/local/bin/create_svn_mirror.sh $name $source"],
+ require => Exec["/usr/local/bin/create_svn_mirror.sh ${name} ${source}"],
}
}
diff --git a/modules/subversion/manifests/pre_commit_link.pp b/modules/subversion/manifests/pre_commit_link.pp
index a9b543a7..fa3c2b2c 100644
--- a/modules/subversion/manifests/pre_commit_link.pp
+++ b/modules/subversion/manifests/pre_commit_link.pp
@@ -2,7 +2,7 @@ define subversion::pre_commit_link() {
$scriptname = regsubst($name,'^.*/', '')
file { $name:
ensure => 'link',
- target => "/usr/local/share/subversion/pre-commit.d/$scriptname",
+ target => "/usr/local/share/subversion/pre-commit.d/${scriptname}",
mode => '0755',
}
}
diff --git a/modules/subversion/manifests/repository.pp b/modules/subversion/manifests/repository.pp
index 7f2f8356..b223e6ae 100644
--- a/modules/subversion/manifests/repository.pp
+++ b/modules/subversion/manifests/repository.pp
@@ -2,10 +2,10 @@
# group : group that have commit access on the svn
# public : boolean if the svn is readable by anybody or not
# commit_mail : array of people who will receive mail after each commit
-# cia_post : send commits to cia.vc
-# cia_module : name of the module to send to cia.vc
-# cia_ignore_author : a regexp to ignore commits from some authors
-# no_binary : do not accept files with common binary extensions
+# irker_conf : hash containing irker config values. See man irkerhook
+# for possible values in irker.conf.
+# irkerhook_path : path to irkerhook.py script
+# no_binary : do not accept files with common binary extensions
# on this repository
# restricted_to_user : restrict commits to select user
# syntax_check : array of pre-commit script with syntax check to add
@@ -16,115 +16,117 @@
define subversion::repository($group = 'svn',
$public = true,
$commit_mail = '',
+ $irker_conf = undef,
+ $irkerhook_path = '/usr/lib/irker/irkerhook.py',
$i18n_mail = '',
- $cia_post = true,
- $cia_module = 'default',
- $cia_ignore_author = '',
$no_binary = false,
$restricted_to_user = false,
$syntax_check = '',
$extract_dir = '') {
# check permissions
- # http://svnbook.red-bean.com/nightly/fr/svn.serverconfig.multimethod.html
+ # https://svnbook.red-bean.com/nightly/fr/svn.serverconfig.multimethod.html
# $name ==> directory of the repo
include subversion::server
# TODO set umask -> requires puppet 2.7.0
- # unfortunatly, umask is required
- # http://projects.puppetlabs.com/issues/4424
- exec { "/usr/local/bin/create_svn_repo.sh $name":
+ # unfortunately, umask is required
+ # https://projects.puppetlabs.com/issues/4424
+ exec { "/usr/local/bin/create_svn_repo.sh ${name}":
user => 'root',
group => $group,
- creates => "$name/hooks",
+ creates => "${name}/hooks",
require => Package['subversion-tools'],
}
file { $name:
+ ensure => directory,
group => $group,
owner => 'root',
mode => $public ? {
- true => 644,
- false => 640,
+ true => '0644',
+ false => '0640',
},
- ensure => directory
}
- file { ["$name/hooks/pre-commit","$name/hooks/post-commit"]:
+ file { ["${name}/hooks/pre-commit","${name}/hooks/post-commit"]:
mode => '0755',
content => template('subversion/hook_commit.sh'),
- require => Exec["/usr/local/bin/create_svn_repo.sh $name"],
+ require => Exec["/usr/local/bin/create_svn_repo.sh ${name}"],
}
- file { ["$name/hooks/post-commit.d", "$name/hooks/pre-commit.d"]:
+ file { ["${name}/hooks/post-commit.d", "${name}/hooks/pre-commit.d"]:
ensure => directory,
- require => File["$name/hooks/pre-commit"],
+ require => File["${name}/hooks/pre-commit"],
}
- file { "$name/hooks/pre-revprop-change":
- ensure => "$subversion::server::local_dir/pre-revprop-change",
+ file { "${name}/hooks/pre-revprop-change":
+ ensure => "${subversion::server::local_dir}/pre-revprop-change",
mode => '0755',
- require => File["$name/hooks/pre-commit"],
+ require => File["${name}/hooks/pre-commit"],
}
if $restricted_to_user {
- subversion::hook::pre_commit { "$name|restricted_to_user":
+ subversion::hook::pre_commit { "${name}|restricted_to_user":
content => template('subversion/restricted_to_user'),
}
} else {
- file { "$name/hooks/pre-commit.d/restricted_to_user":
+ file { "${name}/hooks/pre-commit.d/restricted_to_user":
ensure => absent,
}
}
if $commit_mail {
- subversion::hook::post_commit { "$name|send_mail":
+ subversion::hook::post_commit { "${name}|send_mail":
content => template('subversion/hook_sendmail.pl'),
require => Package['perl-SVN-Notify-Config'],
}
} else {
- file { "$name/hooks/post-commit.d/send_mail":
+ file { "${name}/hooks/post-commit.d/send_mail":
ensure => absent,
}
}
- if $cia_post {
- subversion::hook::post_commit { "$name|cia.vc":
- content => template('subversion/ciabot_svn.sh'),
+ if $irker_conf {
+ subversion::hook::post_commit { "${name}|irker":
+ content => template('subversion/hook_irker'),
+ }
+ file { "${name}/irker.conf":
+ content => template('subversion/irker.conf'),
}
} else {
- file { "$name/hooks/post-commit.d/cia.vc":
+ file { "${name}/hooks/post-commit.d/irker":
ensure => absent,
}
}
if $no_binary {
- pre_commit_link { "$name/hooks/pre-commit.d/no_binary": }
+ pre_commit_link { "${name}/hooks/pre-commit.d/no_binary": }
} else {
- file { "$name/hooks/pre-commit.d/no_binary":
+ file { "${name}/hooks/pre-commit.d/no_binary":
ensure => absent,
}
}
if $extract_dir {
- subversion::hook::post_commit {"$name|extract_dir":
+ subversion::hook::post_commit {"${name}|extract_dir":
content => template('subversion/hook_extract.pl'),
require => [Package['perl-SVN-Notify-Mirror']],
}
} else {
- file { "$name/hooks/post-commit.d/extract_dir":
+ file { "${name}/hooks/post-commit.d/extract_dir":
ensure => absent,
}
}
- pre_commit_link { "$name/hooks/pre-commit.d/no_empty_message": }
+ pre_commit_link { "${name}/hooks/pre-commit.d/no_empty_message": }
+
+ pre_commit_link { "${name}/hooks/pre-commit.d/no_root_commit": }
- pre_commit_link { "$name/hooks/pre-commit.d/no_root_commit": }
+ pre_commit_link { "${name}/hooks/pre-commit.d/converted_to_git": }
if $syntax_check {
- $syntax_check_array = regsubst($syntax_check,'^',"$name/hooks/pre-commit.d/")
+ $syntax_check_array = regsubst($syntax_check,'^',"${name}/hooks/pre-commit.d/")
pre_commit_link { $syntax_check_array: }
}
}
-
-
diff --git a/modules/subversion/manifests/snapshot.pp b/modules/subversion/manifests/snapshot.pp
index 179f1ef1..00e66dde 100644
--- a/modules/subversion/manifests/snapshot.pp
+++ b/modules/subversion/manifests/snapshot.pp
@@ -4,18 +4,18 @@ define subversion::snapshot($source,
include subversion::client
- exec { "/usr/bin/svn co $source $name":
+ exec { "/usr/bin/svn co ${source} ${name}":
creates => $name,
user => $user,
require => Package['subversion'],
}
if ($refresh != '0') {
- cron { "update $name":
- command => "cd $name && /usr/bin/svn update -q",
+ cron { "update ${name}":
+ command => "cd ${name} && /usr/bin/svn update -q",
user => $user,
minute => $refresh,
- require => Exec["/usr/bin/svn co $source $name"],
+ require => Exec["/usr/bin/svn co ${source} ${name}"],
}
}
}
diff --git a/modules/subversion/templates/ciabot_svn.py b/modules/subversion/templates/ciabot_svn.py
deleted file mode 100644
index ab7828b4..00000000
--- a/modules/subversion/templates/ciabot_svn.py
+++ /dev/null
@@ -1,398 +0,0 @@
-#!/usr/bin/env python
-#
-# This is a CIA client script for Subversion repositories, written in python.
-# It generates commit messages using CIA's XML format, and can deliver them
-# using either XML-RPC or email. See below for usage and cuztomization
-# information.
-#
-# --------------------------------------------------------------------------
-#
-# Copyright (c) 2004-2007, Micah Dowty
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# --------------------------------------------------------------------------
-#
-# This script is cleaner and much more featureful than the shell
-# script version, but won't work on systems without Python.
-#
-# To use the CIA bot in your Subversion repository...
-#
-# 1. Customize the parameters below
-#
-# 2. This script should be called from your repository's post-commit
-# hook with the repository and revision as arguments. For example,
-# you could copy this script into your repository's "hooks" directory
-# and add something like the following to the "post-commit" script,
-# also in the repository's "hooks" directory:
-#
-# REPOS="$1"
-# REV="$2"
-# $REPOS/hooks/ciabot_svn.py "$REPOS" "$REV" &
-#
-# Or, if you have multiple project hosted, you can add each
-# project's name to the commandline in that project's post-commit
-# hook:
-#
-# $REPOS/hooks/ciabot_svn.py "$REPOS" "$REV" "ProjectName" &
-#
-############# There are some parameters for this script that you can customize:
-
-class config:
- # Replace this with your project's name, or always provide a project
- # name on the commandline.
- #
- # NOTE: This shouldn't be a long description of your project. Ideally
- # it is a short identifier with no spaces, punctuation, or
- # unnecessary capitalization. This will be used in URLs related
- # to your project, as an internal identifier, and in IRC messages.
- # If you want a longer name shown for your project on the web
- # interface, please use the "title" metadata key rather than
- # putting that here.
- #
- project = "Mageia"
-
- # Subversion's normal directory hierarchy is powerful enough that
- # it doesn't have special methods of specifying modules, tags, or
- # branches like CVS does. Most projects do use a naming
- # convention though that works similarly to CVS's modules, tags,
- # and branches.
- #
- # This is a list of regular expressions that are tested against
- # paths in the order specified. If a regex matches, the 'branch'
- # and 'module' groups are stored and the matching section of the
- # path is removed.
- #
- # Several common directory structure styles are below as defaults.
- # Uncomment the ones you're using, or add your own regexes.
- # Whitespace in the each regex are ignored.
-
- pathRegexes = [
- # r"^ trunk/ (?P<module>[^/]+)/ ",
- # r"^ (branches|tags)/ (?P<branch>[^/]+)/ ",
- # r"^ (branches|tags)/ (?P<module>[^/]+)/ (?P<branch>[^/]+)/ ",
- ]
-
- # If your repository is accessible over the web, put its base URL here
- # and 'uri' attributes will be given to all <file> elements. This means
- # that in CIA's online message viewer, each file in the tree will link
- # directly to the file in your repository.
- repositoryURI = None
-
- # If your repository is accessible over the web via a tool like ViewVC
- # that allows viewing information about a full revision, put a format string
- # for its URL here. You can specify various substitution keys in the Python
- # syntax: "%(project)s" is replaced by the project name, and likewise
- # "%(revision)s" and "%(author)s" are replaced by the revision / author.
- # The resulting URI is added to the data sent to CIA. After this, in CIA's
- # online message viewer, the commit will link directly to the corresponding
- # revision page.
- revisionURI = None
- # Example (works for ViewVC as used by SourceForge.net):
- #revisionURI = "https://svn.sourceforge.net/viewcvs.cgi/%(project)s?view=rev&rev=%(revision)s"
-
- # This can be the http:// URI of the CIA server to deliver commits over
- # XML-RPC, or it can be an email address to deliver using SMTP. The
- # default here should work for most people. If you need to use e-mail
- # instead, you can replace this with "cia@cia.navi.cx"
- server = "http://cia.navi.cx"
-
- # The SMTP server to use, only used if the CIA server above is an
- # email address.
- smtpServer = "localhost"
-
- # The 'from' address to use. If you're delivering commits via email, set
- # this to the address you would normally send email from on this host.
- fromAddress = "cia-user@localhost"
-
- # When nonzero, print the message to stdout instead of delivering it to CIA.
- debug = 0
-
-
-############# Normally the rest of this won't need modification
-
-import sys, os, re, urllib, getopt
-
-class File:
- """A file in a Subversion repository. According to our current
- configuration, this may have a module, branch, and URI in addition
- to a path."""
-
- # Map svn's status letters to our action names
- actionMap = {
- 'U': 'modify',
- 'A': 'add',
- 'D': 'remove',
- }
-
- def __init__(self, fullPath, status=None):
- self.fullPath = fullPath
- self.path = fullPath
- self.action = self.actionMap.get(status)
-
- def getURI(self, repo):
- """Get the URI of this file, given the repository's URI. This
- encodes the full path and joins it to the given URI."""
- quotedPath = urllib.quote(self.fullPath)
- if quotedPath[0] == '/':
- quotedPath = quotedPath[1:]
- if repo[-1] != '/':
- repo = repo + '/'
- return repo + quotedPath
-
- def makeTag(self, config):
- """Return an XML tag for this file, using the given config"""
- attrs = {}
-
- if config.repositoryURI is not None:
- attrs['uri'] = self.getURI(config.repositoryURI)
-
- if self.action:
- attrs['action'] = self.action
-
- attrString = ''.join([' %s="%s"' % (key, escapeToXml(value,1))
- for key, value in attrs.items()])
- return "<file%s>%s</file>" % (attrString, escapeToXml(self.path))
-
-
-class SvnClient:
- """A CIA client for Subversion repositories. Uses svnlook to
- gather information"""
- name = 'Python Subversion client for CIA'
- version = '1.20'
-
- def __init__(self, repository, revision, config):
- self.repository = repository
- self.revision = revision
- self.config = config
-
- def deliver(self, message):
- if config.debug:
- print message
- else:
- server = self.config.server
- if server.startswith('http:') or server.startswith('https:'):
- # Deliver over XML-RPC
- import xmlrpclib
- xmlrpclib.ServerProxy(server).hub.deliver(message)
- else:
- # Deliver over email
- import smtplib
- smtp = smtplib.SMTP(self.config.smtpServer)
- smtp.sendmail(self.config.fromAddress, server,
- "From: %s\r\nTo: %s\r\n"
- "Subject: DeliverXML\r\n\r\n%s" %
- (self.config.fromAddress, server, message))
-
- def main(self):
- self.collectData()
- self.deliver("<message>" +
- self.makeGeneratorTag() +
- self.makeSourceTag() +
- self.makeBodyTag() +
- "</message>")
-
- def makeAttrTags(self, *names):
- """Given zero or more attribute names, generate XML elements for
- those attributes only if they exist and are non-None.
- """
- s = ''
- for name in names:
- if hasattr(self, name):
- v = getattr(self, name)
- if v is not None:
- # Recent Pythons don't need this, but Python 2.1
- # at least can't convert other types directly
- # to Unicode. We have to take an intermediate step.
- if type(v) not in (type(''), type(u'')):
- v = str(v)
-
- s += "<%s>%s</%s>" % (name, escapeToXml(v), name)
- return s
-
- def makeGeneratorTag(self):
- return "<generator>%s</generator>" % self.makeAttrTags(
- 'name',
- 'version',
- )
-
- def makeSourceTag(self):
- return "<source>%s</source>" % self.makeAttrTags(
- 'project',
- 'module',
- 'branch',
- )
-
- def makeBodyTag(self):
- return "<body><commit>%s%s</commit></body>" % (
- self.makeAttrTags(
- 'revision',
- 'author',
- 'log',
- 'diffLines',
- 'url',
- ),
- self.makeFileTags(),
- )
-
- def makeFileTags(self):
- """Return XML tags for our file list"""
- return "<files>%s</files>" % ''.join([file.makeTag(self.config)
- for file in self.files])
-
- def svnlook(self, command):
- """Run the given svnlook command on our current repository and
- revision, returning all output"""
- # We have to set LC_ALL to force svnlook to give us UTF-8 output,
- # then we explicitly slurp that into a unicode object.
- return unicode(os.popen(
- 'LC_ALL="en_US.UTF-8" svnlook %s -r "%s" "%s"' %
- (command, self.revision, self.repository)).read(),
- 'utf-8', 'replace')
-
- def collectData(self):
- self.author = self.svnlook('author').strip()
- self.project = self.config.project
- self.log = self.svnlook('log')
- self.diffLines = len(self.svnlook('diff').split('\n'))
- self.files = self.collectFiles()
- if self.config.revisionURI is not None:
- self.url = self.config.revisionURI % self.__dict__
- else:
- self.url = None
-
- def collectFiles(self):
- # Extract all the files from the output of 'svnlook changed'
- files = []
- for line in self.svnlook('changed').split('\n'):
- path = line[2:].strip()
- if path:
- status = line[0]
- files.append(File(path, status))
-
- # Try each of our several regexes. To be applied, the same
- # regex must mach every file under consideration and they must
- # all return the same results. If we find one matching regex,
- # or we try all regexes without a match, we're done.
- matchDict = None
- for regex in self.config.pathRegexes:
- matchDict = matchAgainstFiles(regex, files)
- if matchDict is not None:
- self.__dict__.update(matchDict)
- break
-
- return files
-
-
-def matchAgainstFiles(regex, files):
- """Try matching a regex against all File objects in the provided list.
- If the regex returns the same matches for every file, the matches
- are returned in a dict and the matched portions are filtered out.
- If not, returns None.
- """
- prevMatchDict = None
- compiled = re.compile(regex, re.VERBOSE)
- for f in files:
-
- match = compiled.match(f.fullPath)
- if not match:
- # Give up, it must match every file
- return None
-
- matchDict = match.groupdict()
- if prevMatchDict is not None and prevMatchDict != matchDict:
- # Give up, we got conflicting matches
- return None
-
- prevMatchDict = matchDict
-
- # If we got this far, the regex matched every file with
- # the same results. Now filter the matched portion out of
- # each file and store the matches we found.
- for f in files:
- f.path = compiled.sub('', f.fullPath)
- return prevMatchDict
-
-
-def escapeToXml(text, isAttrib=0):
- text = unicode(text)
- text = text.replace("&", "&amp;")
- text = text.replace("<", "&lt;")
- text = text.replace(">", "&gt;")
- if isAttrib == 1:
- text = text.replace("'", "&apos;")
- text = text.replace("\"", "&quot;")
- return text
-
-
-def usage():
- """Print a short usage description of this script and exit"""
- sys.stderr.write("Usage: %s [OPTIONS] REPOS-PATH REVISION [PROJECTNAME]\n" %
- sys.argv[0])
-
-
-def version():
- """Print out the version of this script"""
- sys.stderr.write("%s %s\n" % (sys.argv[0], SvnClient.version))
-
-
-def main():
- try:
- options = [ "version" ]
- for key in config.__dict__:
- if not key.startswith("_"):
- options.append(key + "=");
- opts, args = getopt.getopt(sys.argv[1:], "", options)
- except getopt.GetoptError:
- usage()
- sys.exit(2)
-
- for o, a in opts:
- if o == "--version":
- version()
- sys.exit()
- else:
- # Everything else maps straight to a config key. Just have
- # to remove the "--" prefix from the option name.
- config.__dict__[o[2:]] = a
-
- # Print a usage message when not enough parameters are provided.
- if not len(args) in (2,3):
- sys.stderr.write("%s: incorrect number of arguments\n" % sys.argv[0])
- usage();
- sys.exit(2);
-
- # If a project name was provided, override the default project name.
- if len(args) == 3:
- config.project = args[2]
-
- # Go do the real work.
- SvnClient(args[0], args[1], config).main()
-
-
-if __name__ == "__main__":
- main()
-
-### The End ###
diff --git a/modules/subversion/templates/ciabot_svn.sh b/modules/subversion/templates/ciabot_svn.sh
deleted file mode 100755
index 63aa77a8..00000000
--- a/modules/subversion/templates/ciabot_svn.sh
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/bin/sh
-#
-# This is a CIA bot client script for Subversion repositories,
-# delivering via email. See below for usage and customization information.
-#
-# --------------------------------------------------------------------------
-#
-# Copyright (c) 2004-2005, Micah Dowty
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-# * The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# --------------------------------------------------------------------------
-#
-# See http://cia.vc for more information on what the CIA bot
-# is and how it works, and links to other client scripts.
-#
-# To use the CIA bot in your Subversion repository...
-#
-# 1. Customize the parameters below, specifically the ones under
-# the "Project information" section
-#
-# 2. This script should be called from your repository's post-commit
-# hook with the repository and revision as arguments. For example,
-# you could copy this script into your repository's "hooks" directory
-# and add something like the following to the "post-commit" script,
-# also in the repository's "hooks" directory:
-#
-# REPOS="$1"
-# REV="$2"
-# $REPOS/hooks/ciabot_svn.sh "$REPOS" "$REV"&
-#
-# ------ There are some parameters for this script that you can customize:
-
-# Project information
-#
-# NOTE: This shouldn't be a long description of your project. Ideally
-# it is a short identifier with no spaces, punctuation, or
-# unnecessary capitalization. This will be used in URLs related
-# to your project, as an internal identifier, and in IRC messages.
-# If you want a longer name shown for your project on the web
-# interface, please use the "title" metadata key rather than
-# putting that here.
-#
-project_name="Mageia"
-module_name="<%= cia_module %>"
-return_address="root@<%= domain %>"
-ignore_author="<%= cia_ignore_author %>"
-
-# System
-sendmail_command="/usr/sbin/sendmail -t"
-
-############# Below this line you shouldn't have to change anything
-
-# Script arguments
-REPOS="$1"
-REV="$2"
-
-# The email address CIA lives at
-cia_address="cia@cia.vc"
-
-author=`svnlook author -r "$REV" "$REPOS" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g'`
-if test -n "$ignore_author" && echo "$author" | grep -q "$ignore_author"
-then
- exit 0
-fi
-log=`svnlook log -r "$REV" "$REPOS" | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g'`
-diff_lines=`svnlook diff -r "$REV" "$REPOS" | wc -l`
-for file in `svnlook changed -r "$REV" "$REPOS" | cut -c 3- | sed 's/\&/\&amp;/g;s/</\&lt;/g;s/>/\&gt;/g'`; do
- files="$files<file>$file</file>"
-done
-
-url="http://svnweb.<%= domain%>/${REPOS/\/svn\//}?view=revision&amp;revision=$REV"
-
-# Send an email with the final XML message
-(cat <<EOF
-From: $return_address
-To: $cia_address
-Subject: DeliverXML
-
-<message>
- <generator>
- <name>Subversion CIA Bot client shell script</name>
- <version>1.1</version>
- </generator>
- <source>
- <project>$project_name</project>
- <module>$module_name</module>
- </source>
- <body>
- <commit>
- <revision>$REV</revision>
- <author>$author</author>
- <files>$files</files>
- <log>$log</log>
- <url>$url</url>
- <diffLines>$diff_lines</diffLines>
- </commit>
- </body>
-</message>
-EOF
-) | $sendmail_command
-
-### The End ###
diff --git a/modules/subversion/templates/converted_to_git b/modules/subversion/templates/converted_to_git
new file mode 100644
index 00000000..8f137506
--- /dev/null
+++ b/modules/subversion/templates/converted_to_git
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+REPOS="$1"
+TXN="$2"
+
+if [ ! -f "$REPOS/conf/git.conf" ]; then
+ exit 0
+fi
+
+REGEX=$(cat "$REPOS/conf/git.conf" | grep -v "^#" | grep -v "^ *$" | xargs | sed 's/ /|/g')
+
+if (svnlook dirs-changed -t $TXN "$REPOS" | grep -qE "^($REGEX)"); then
+ echo "The subversion path you have attempted to commit to has been converted to git." >&2
+ echo "Please see: https://wiki.mageia.org/en/Git_Migration" >&2
+ exit 1
+fi
diff --git a/modules/subversion/templates/hook_commit.sh b/modules/subversion/templates/hook_commit.sh
index ec7ea1cb..2b1b6ff3 100644
--- a/modules/subversion/templates/hook_commit.sh
+++ b/modules/subversion/templates/hook_commit.sh
@@ -9,9 +9,9 @@ author=$(svnlook author -t "$TXN" "$REP")
# We will be able to remove it when updating to a better send mail hook
if [ "$author" = 'schedbot' ]; then
- LIST= `ls $0.d/* | grep -v send_mail`
+ LIST=`ls -1 $0.d/* | grep -v send_mail`
else
- LIST=`ls $0.d/*`
+ LIST=`ls -1 $0.d/*`
fi
for script in $LIST; do
@@ -25,4 +25,3 @@ for script in $LIST; do
$script $@ || exit 1
done
-
diff --git a/modules/subversion/templates/hook_irker b/modules/subversion/templates/hook_irker
new file mode 100644
index 00000000..8fd7a874
--- /dev/null
+++ b/modules/subversion/templates/hook_irker
@@ -0,0 +1,4 @@
+#!/bin/sh
+REPO=$1
+REV=$2
+<%= irkerhook_path %> --repository=$REPO $REV
diff --git a/modules/subversion/templates/hook_sendmail.pl b/modules/subversion/templates/hook_sendmail.pl
index aab1db5a..cf3be6a4 100644
--- a/modules/subversion/templates/hook_sendmail.pl
+++ b/modules/subversion/templates/hook_sendmail.pl
@@ -7,7 +7,11 @@
alternative: HTML::ColorDiff
with-diff: 1
max_diff_length: 20000
- from: root@<%= domain %>
+ ticket_map:
+ '(\bmga#(\d+)\b)': 'https://bugs.mageia.org/show_bug.cgi?id=%s'
+ revision-url: "https://svnweb.mageia.org/packages/?revision=%s&view=revision"
+ subject_cx: 1
+ from: subversion_noreply@ml.<%= @domain %>
to:
<%- commit_mail.each do |mail| -%>
- <%= mail %>
@@ -19,6 +23,10 @@
alternative: HTML::ColorDiff
with-diff: 1
max_diff_length: 20000
- from: root@<%= domain %>
+ ticket_map:
+ '(\bmga#(\d+)\b)': 'https://bugs.mageia.org/show_bug.cgi?id=%s'
+ revision-url: "https://svnweb.mageia.org/packages/?revision=%s&view=revision"
+ subject_cx: 1
+ from: subversion_noreply@ml.<%= @domain %>
to: <%= i18n_mail %>
<%- end -%>
diff --git a/modules/subversion/templates/irker.conf b/modules/subversion/templates/irker.conf
new file mode 100644
index 00000000..d037a120
--- /dev/null
+++ b/modules/subversion/templates/irker.conf
@@ -0,0 +1,7 @@
+<%-
+ content = ''
+ @irker_conf.keys.sort.each {|key|
+ content += key + ' = ' + @irker_conf[key] + "\n"
+ }
+-%>
+<%= content %>
diff --git a/modules/subversion/templates/no_binary b/modules/subversion/templates/no_binary
index a7f2eb94..284642e5 100644
--- a/modules/subversion/templates/no_binary
+++ b/modules/subversion/templates/no_binary
@@ -3,7 +3,7 @@
REP="$1"
TXN="$2"
-# Filter some binary files based on common filename extentions.
+# Filter some binary files based on common filename extensions.
# It does not fully prevent commit of binary files, this script is only
# here to avoid simple mistakes
if svnlook changed -t "$TXN" "$REP" | grep -qi '\.\(gz\|bz2\|xz\|lzma\|Z\|7z\|tar\|tgz\|zip\|jpg\|gif\|png\|ogg\|mp3\|wav\|rar\|pdf\)$'
diff --git a/modules/subversion/templates/restricted_to_user b/modules/subversion/templates/restricted_to_user
index 5c70132e..98297627 100644
--- a/modules/subversion/templates/restricted_to_user
+++ b/modules/subversion/templates/restricted_to_user
@@ -6,7 +6,7 @@ TXN="$2"
author=$(svnlook author -t "$TXN" "$REP")
if [ "$author" != '<%= restricted_to_user %>' ]; then
- echo "this repository is restrected to user <%= restricted_to_user %>" >&2
+ echo "this repository is restricted to user <%= restricted_to_user %>" >&2
exit 1
fi
diff --git a/modules/subversion/templates/xinetd b/modules/subversion/templates/xinetd
index 87827ec2..0919ae60 100644
--- a/modules/subversion/templates/xinetd
+++ b/modules/subversion/templates/xinetd
@@ -12,4 +12,3 @@ service svnserve
server_args = -i -r <%= svn_base_path %>
flags = IPv6
}
-