/
mkconfig.py
 1 #!/usr/bin/env python
 2 
 3 """
 4 A darcsweb configuration generator
 5 ----------------------------------
 6 
 7 This is a small utility that generates configuration files for darcsweb, in
 8 case you're lazy and/or have many repositories.
 9 
10 It receives four parameters: the base URL for your repositories, the base
11 description, the encoding and the directory to get the repositories from.
12 It replaces the string "NAME" with the name of the directory that holds the
13 repository, so you can specify urls and descriptions with the name in them.
14 
15 Then, it generates an appropiate configuration for each repository in the
16 directory. It outputs the configuration to stdout, so you can redirect it to
17 config.py. For example:
18 
19 $ mkconf.py "http://example.com/darcs/NAME" "Repo for NAME" latin1 \\
20 	~/devel/repos/ >> config.py
21 
22 Remember that you still need to do the base configuration by hand. You can do
23 that by copying the sample included with darcsweb.
24 """
25 
26 
27 import sys
28 import os
29 import string
30 import urllib
31 
32 
33 def help():
34 	print "Error: wrong parameter count"
35 	print __doc__
36 
37 def filter_class(s):
38 	"Filter s so the new string can be used as a class name."
39 	allowed = string.ascii_letters + string.digits + '_'
40 	l = [c for c in s if c in allowed]
41 	return string.join(l, "")
42 
43 def filter_url(s):
44 	"Filter s so the new string can be used in a raw url."
45 	return urllib.quote_plus(s, ':/')
46 
47 
48 # check parameters
49 if len(sys.argv) != 5:
50 	help()
51 	sys.exit(0)
52 
53 myself, baseurl, basedesc, baseencoding, basepath = sys.argv
54 
55 dirs = os.listdir(basepath)
56 for d in dirs:
57 	path = basepath + '/' + d
58 	if not os.path.isdir(path + '/_darcs'):
59 		# not a repo, skip
60 		continue
61 	s = \
62 """
63 class %(classname)s:
64 	reponame = '%(name)s'
65 	repodesc = '%(desc)s'
66 	repodir = '%(dir)s'
67 	repourl = '%(url)s'
68 	repoencoding = '%(encoding)s'
69 """ % {
70 		'classname': filter_class(d),
71 		'name': d,
72 		'desc': basedesc.replace('NAME', d),
73 		'dir': os.path.abspath(basepath + '/' + d),
74 		'url': filter_url(baseurl.replace('NAME', d)),
75 		'encoding': baseencoding,
76 	}
77 	print s