2 # -*- coding: iso-8859-1 -*-
3 # vim: set ts=4 softtabstop=4 expandtab :
8 svncreate = 'sudo /usr/local/bin/svncreate'
17 # Para que tire errores más verborrágicos.
26 class FormError(Exception):
27 def __init__(self, value):
30 return """<div style="color: red">%s</div>""" % self.value
33 print "Content-Type: text/html"
38 <title>Creador de Repositorios Subversion</title>
41 <h1>Creador de Repositorios Subversion</h1>
52 if is_in(user, form.getlist('users')):
57 if form.getfirst('repos'):
58 repos = form.getfirst('repos')
60 if form.getfirst('desc'):
61 desc = form.getfirst('desc')
64 Nombre del repositorio: <input type="text" name="repos" value="%s"><br>
65 Descripción: <input type="text" name="desc" value="%s"><br>
66 Usuarios habilitados a escribir:
67 <select name="users" multiple>""" % (repos, desc)
68 for user in get_users('/etc/svn/passwd'):
69 print """<option%s>%s</option>""" % (selected(user), user)
72 <input type="submit" name="enviado" value="Crear"><br>
75 def print_repos(repos):
76 url = 'http://portal.mecon.ar/svn/%s/tronco/' % repos
77 print '<p>Puede hacer un checkout con:<br>'
78 print '<tt>svn co <a href="%s">%s</a> %s</tt></p>.\n' % (url, url, repos)
79 #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
80 print '<div style="text-align: center"><a href="./">Volver</a></div>'
87 users.append(line.strip().split(':')[0])
92 check_cond(form.has_key('repos'), 'No se especificó el nombre del repositorio.')
93 check_cond(form.has_key('desc'), 'No se especificó la descripción del repositorio.')
94 check_cond(form.has_key('users'), 'No se especificaron usuarios habilitados para escribir en el repositorio.')
95 check_cond(re.match('^[\w\d]+$', form['repos'].value),
96 'El nombre del repositorio no es válido (sólo puede tener caracteres alfanuméricos).')
98 def check_cond(cond, msg):
100 raise FormError(msg);
103 return str.replace("'", "\\'")
106 ################################### PROGRAMA PRINCIPAL ######################################
110 form = cgi.FieldStorage()
112 # Si nos llegó el formulario.
113 if form.has_key('enviado'):
116 repos = escape(form.getfirst('repos'))
117 desc = escape(form.getfirst('desc'))
119 usrs = escape(usrs.join(form.getlist('users')))
120 cmd = "%s '%s' '%s' '%s'" % (svncreate, repos, desc, usrs)
122 status = os.system(cmd)
125 raise FormError('Hubo un error al crear el repositorio (código de estado: %d).' % status)
126 print_repos(form.getfirst('repos'))