]> git.llucax.com Git - mecon/scripts.git/blob - subversion/sapo/sapo.py
Se actualiza SAPO para que no use grupos. No se necesita mas sudo para svncreate.
[mecon/scripts.git] / subversion / sapo / sapo.py
1 #!/usr/bin/env python
2 # -*- coding: iso-8859-1 -*-
3 # vim: set ts=4 softtabstop=4 expandtab :
4 # $Id$
5
6 # Config.
7
8 svncreate = './svncreate'
9
10 import sys
11 import os
12 import re
13 import string
14 import cgi
15 import cgitb
16
17 # Para que tire errores más verborrágicos.
18 cgitb.enable()
19
20 class FormError(Exception):
21     def __init__(self, value):
22         self.value = value
23     def __str__(self):
24         return """<div style="color: red">%s</div>""" % self.value
25
26 def print_header():
27     print "Content-Type: text/html"
28     print
29     print """\
30 <html>
31     <head>
32         <title>Creador de Repositorios Subversion</title>
33     </head>
34     <body>
35         <h1>Creador de Repositorios Subversion</h1>
36 """
37
38 def print_footer():
39     print """\
40     </body>
41 </html>
42 """
43
44 def print_form(form):
45     repos = ''
46     if form.getfirst('repos'):
47         repos = form.getfirst('repos')
48     print """\
49         <p>
50         <form method="POST">
51             Nombre del repositorio: <input type="text" name="repos" value="%s">
52             <input type="submit" name="enviado" value="Crear">
53         </form>
54         </p>""" % repos
55
56 def print_repos(repos):
57     url = 'http://portal.mecon.ar/svn/%s/tronco/' % repos
58     print '<p>Puede hacer un checkout con:<br>'
59     print '<tt>svn co <a href="%s">%s</a> %s</tt></p>.\n' % (url, url, repos)
60     #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
61     print '<div style="text-align: center"><a href="./">Volver</a></div>'
62
63 def check_form(form):
64     check_cond(form.has_key('repos'), 'No se especificó el nombre del repositorio.')
65     check_cond(re.match('^[\w\d]+$', form['repos'].value),
66         'El nombre del repositorio no es válido (sólo puede tener caracteres alfanuméricos).')
67
68 def check_cond(cond, msg):
69     if (not cond):
70         raise FormError(msg);
71
72 def escape(str):
73     return str.replace("'", "\\'")
74
75
76 ################################### PROGRAMA PRINCIPAL ######################################
77
78 print_header()
79
80 form = cgi.FieldStorage()
81 try:
82     # Si nos llegó el formulario.
83     if form.has_key('enviado'):
84         check_form(form)
85         print '<pre>'
86         repos = escape(form.getfirst('repos'))
87         cmd = "%s '%s'" % (svncreate, repos)
88         sys.stdout.flush()
89         status = os.system(cmd)
90         print '</pre>'
91         if status:
92             raise FormError('Hubo un error al crear el repositorio (código de estado: %d).' % status)
93         print_repos(form.getfirst('repos'))
94     else:
95         print_form(form)
96 except FormError, e:
97     print e
98     print_form(form)
99
100 print_footer()
101
102