+++ /dev/null
-AuthName "Creador de Repositorios Subversion"
-AuthType Basic
-AuthUserFile /etc/svn/passwd
-AuthGroupFile /etc/svn/group
-#Require valid-user
-Require group desarrolladores
<h1>SAPO</h1>
<h2>Systema de Administración de Portal y Otros</h2>
<ul>
- <li><a href="/svn_new/">Creador de Repositorios Subversion</a></li>
+ <li><a href="sapo.py">Creador de Repositorios Subversion</a></li>
<li><a href="/cgi-bin/viewcvs.cgi">Visualizador de repositorios</a></li>
</ul>
</body>
+++ /dev/null
-<!-- vim:set ts=4 softtabstop=4 expandtab: -->
-<html>
- <head>
- <title>Creador de Repositorios Subversion</title>
- </head>
- <body>
- <h1>Creador de Repositorios Subversion</h1>
-<? // vim:set ts=4 softtabstop=4 expandtab:
-
-// $Id$
-
-// Configuración
-$svncreate = 'sudo /usr/local/bin/svncreate';
-
-ini_set('implicit_flush', true);
-
-$users = array();
-$f = fopen('/etc/svn/passwd', 'r');
-while (($s = fgets($f, 4096)) !== false) {
- list($users[], $pass) = split(':', $s);
-}
-fclose($f);
-
-if (@$_REQUEST['enviado']) {
-
- if (!$_REQUEST['repos']) {
- die('No se especificó el nombre del repositorio.');
- }
- if (!$_REQUEST['desc']) {
- die('No se especificó la descripción del repositorio.');
- }
- if (!$_REQUEST['users']) {
- die('No se especificaron usuarios habilitados para escribir en el repositorio.');
- }
- if (!preg_match('/^[\w\d]+$/', $_REQUEST['repos'])) {
- die('El nombre del repositorio no es válido (sólo puede tener caracteres alfanuméricos).');
- }
- // Chequear usuarios que existan.
- //if (!$_REQUEST['users']) {
- // error('No se especificaron usuarios habilitados para escribir en el repositorio.');
- //}
-
- echo '<PRE>';
- $retval = 0;
- echo system(
- //echo(
- sprintf(
- "%s %s %s %s",
- $svncreate,
- escapeshellarg($_REQUEST['repos']),
- escapeshellarg($_REQUEST['desc']),
- escapeshellarg(join(' ', $_REQUEST['users']))
- ),
- $retval
- );
- if ($retval) {
- echo "Hubo un error: $retval";
- }
- echo "\n";
- $url = sprintf('http://portal.mecon.ar/svn/%s/tronco/', $_REQUEST['repos']);
- printf('Puede hacer un checkout con: svn co <A href="%s">%s</A> %s.%s', $url, $url, $_REQUEST['repos'], "\n");
- printf("Alternativamente puede hacer un checkout con: svn co svn+ssh://portal.mecon.ar/var/lib/svn/%s si tiene acceso via ssh.\n", $_REQUEST['repos']);
- printf('<A href="%s">Volver</A>', $_SERVER['PHP_SELF']);
- echo '</PRE>';
-
-} else {
-
-?>
- <form>
- Nombre del repositorio: <input type="text" name="repos" value="<?= @$_REQUEST['repos'] ?>"><br>
- Descripción: <input type="text" name="desc" value="<?= @$_REQUEST['desc'] ?>"><br>
- Usuarios habilitados a escribir:
- <select name="users[]" multiple>
- <? foreach ($users as $user) { ?>
- <option><?= $user ?></option>
- <? } ?>
- </select><br>
- <input type="submit" name="enviado" value="Crear"><br>
- </form>
-<? } ?>
- </body>
-</html>
# Config.
-svncreate = 'sudo /usr/local/bin/svncreate'
+svncreate = './svncreate'
import sys
import os
# Para que tire errores más verborrágicos.
cgitb.enable()
-def is_in(elem, lst):
- for e in lst:
- if elem == e:
- return True
- return False
-
class FormError(Exception):
def __init__(self, value):
self.value = value
"""
def print_form(form):
- def selected(user):
- if is_in(user, form.getlist('users')):
- return ' selected'
- return ''
-
repos = ''
if form.getfirst('repos'):
repos = form.getfirst('repos')
- desc = ''
- if form.getfirst('desc'):
- desc = form.getfirst('desc')
print """\
+ <p>
<form method="POST">
- Nombre del repositorio: <input type="text" name="repos" value="%s"><br>
- Descripción: <input type="text" name="desc" value="%s"><br>
- Usuarios habilitados a escribir:
- <select name="users" multiple>""" % (repos, desc)
- for user in get_users('/etc/svn/passwd'):
- print """<option%s>%s</option>""" % (selected(user), user)
- print """\
- </select><br>
- <input type="submit" name="enviado" value="Crear"><br>
- </form>"""
+ Nombre del repositorio: <input type="text" name="repos" value="%s">
+ <input type="submit" name="enviado" value="Crear">
+ </form>
+ </p>""" % repos
def print_repos(repos):
url = 'http://portal.mecon.ar/svn/%s/tronco/' % repos
#print 'Alternativamente puede hacer un checkout con: svn co svn+ssh://portal.mecon.ar/var/lib/svn/%s si tiene acceso via ssh.\n' % repos
print '<div style="text-align: center"><a href="./">Volver</a></div>'
-def get_users(file):
- users = []
- f = open(file, 'r')
- lines = f.readlines()
- for line in lines:
- users.append(line.strip().split(':')[0])
- f.close()
- return users
-
def check_form(form):
check_cond(form.has_key('repos'), 'No se especificó el nombre del repositorio.')
- check_cond(form.has_key('desc'), 'No se especificó la descripción del repositorio.')
- check_cond(form.has_key('users'), 'No se especificaron usuarios habilitados para escribir en el repositorio.')
check_cond(re.match('^[\w\d]+$', form['repos'].value),
'El nombre del repositorio no es válido (sólo puede tener caracteres alfanuméricos).')
check_form(form)
print '<pre>'
repos = escape(form.getfirst('repos'))
- desc = escape(form.getfirst('desc'))
- usrs = ' '
- usrs = escape(usrs.join(form.getlist('users')))
- cmd = "%s '%s' '%s' '%s'" % (svncreate, repos, desc, usrs)
+ cmd = "%s '%s'" % (svncreate, repos)
sys.stdout.flush()
status = os.system(cmd)
print '</pre>'
# $Id$
repos_root=/var/lib/svn
-repos_www=/svn
-template=/etc/svn/template.conf
sistema_base=sistema
repos=$1
-desc=$2
-users=$3
if [ -r $repos_root/$repos ]; then
echo "ERROR: El repositorio $repos ya existe."
exit 1
fi
echo "Creando repositorio en $repos_root/$repos..."
-#svnadmin create $repos_root/$repos
cp -a $repos_root/$sistema_base $repos_root/$repos
echo "Corrigiendo permisos de $repos_root/$repos..."
chown -R .src $repos_root/$repos
chmod -R g=u $repos_root/$repos
-echo "Agregando repositorio $repos al Apache2 en $repos_www..."
-sed -e "s|{REPOS}|$repos|" -e "s/{DESC}/$desc/" \
- -e "s|{REPOS_ROOT}|$repos_root/$repos|" \
- -e "s|{REPOS_WWW}|$repos_www/$repos|" \
- $template >> /etc/svn/apache.conf
-
-echo "Agregando grupo $repos con los usuarios $users..."
-echo "$repos: $users" >> /etc/svn/group
-
-echo "Reiniciando Apache2..."
-/etc/init.d/apache2 reload
-
echo "Finalizado."
+++ /dev/null
-
-# {REPOS} - {DESC}
-<Location {REPOS_WWW}>
-
- SVNReposName "{DESC}"
-
- <LimitExcept GET PROPFIND OPTIONS REPORT>
- Require group {REPOS}
- </LimitExcept>
-
-</Location>