X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/misc/blobdiff_plain/02955332064a8b513cc6a6881eeb7bbbf8b02098..bba986ae8f13dd5e97952f38b2db9e7444df8772:/cdb-list diff --git a/cdb-list b/cdb-list index 368da62..ee85a14 100755 --- a/cdb-list +++ b/cdb-list @@ -1,15 +1,37 @@ -#! /usr/bin/perl - -use CDB_File; - -@ARGV >= 1 or die "usage: $0 CDB [INPUT ...]\n"; -$f = shift; -$c = CDB_File->new($f, "$f.new") or die "CDB_File->new: $!\n"; -while (<>) { - chomp; - next if m'^\s*(\#|$)'; - m'^\s*(.*\S|)\s*$'; - $c->insert($1, ""); -} -$c->finish() or die "CDB_File->finish: $!\n"; -exit 0; +#! /usr/bin/python + +from cdb import cdbmake +from sre import compile as r_compile, sub as r_sub +from sys import argv, stdin, stderr, exit + +ego = r_sub(r'^.*[/\\]', '', argv[0]) +def die(msg, prefix = True): + if prefix: msg ='%s: %s' % (ego, msg) + print >>stderr, msg + exit(1) + +def files(args): + if len(args) == 0: + yield stdin + else: + for a in args: + if a == '-': + yield stdin + else: + yield open(a, 'r') + +if len(argv) < 2: + die('usage: %s CDB [INPUT ...]' % ego, False) + +rx_comment = r_compile(r'^\s*(\#|$)') +rx_shave = r_compile(r'\s*(.*\S|)\s*$') + +cdb = cdbmake(argv[1], argv[1] + '.new') +for f in files(argv[2:]): + for line in f: + if len(line) and line[-1] == '\n': line = line[:-1] + if rx_comment.match(line): + continue + line = rx_shave.sub(r'\1', line) + cdb.add(line, '') +cdb.finish()