chiark / gitweb /
Build system overhaul.
[misc] / cdb-assign.in
CommitLineData
b2ffb9b7 1#! @PYTHON@
bba986ae
MW
2
3from cdb import cdbmake
4from sre import compile as r_compile, sub as r_sub
5from sys import argv, stdin, stderr, exit
6
7ego = r_sub(r'^.*[/\\]', '', argv[0])
8def die(msg, prefix = True):
841e5aca 9 if prefix: msg ='%s: %s' % (ego, msg)
bba986ae
MW
10 print >>stderr, msg
11 exit(1)
12
13def files(args):
14 if len(args) == 0:
15 yield stdin
16 else:
17 for a in args:
18 if a == '-':
841e5aca 19 yield stdin
bba986ae 20 else:
841e5aca 21 yield open(a, 'r')
bba986ae
MW
22
23if len(argv) < 2:
24 die('usage: %s CDB [INPUT ...]' % ego, False)
25
26rx_comment = r_compile(r'^\s*(\#|$)')
27rx_split = r_compile(r'^\s*([-\w]+)\s*=\s*(.*\S|)\s*$')
28
29cdb = cdbmake(argv[1], argv[1] + '.new')
30for f in files(argv[2:]):
31 for line in f:
32 if len(line) and line[-1] == '\n': line = line[:-1]
33 if rx_comment.match(line):
34 continue
35 m = rx_split.match(line)
36 if not m:
37 die("bad assignment: `%s'" % line)
38 k, v = m.groups([1, 2])
39 cdb.add(k, v)
40cdb.finish()