chiark / gitweb /
cdb: General drive to eliminate freecdb and libfile-cdb-perl.
[newsgate] / bin / mkcdb
index 7cea767514629a01c92fa8910af1c199a7598ff9..dc876ac7abfae8ea67cb9ca033e8346cd12751e1 100755 (executable)
--- a/bin/mkcdb
+++ b/bin/mkcdb
@@ -1,20 +1,29 @@
-#! /usr/bin/perl
+#! /usr/bin/python
 
-use CDB_File;
+from cdb import cdbmake
+from sre import sub as r_sub, compile as r_compile
+from sys import argv, stderr, exit
 
-@ARGV == 1 or die "usage: $0 GROUPFILE\n";
-$g = shift;
-open GROUPS, $g or die "$0: open($g): $!\n";
-$c = CDB_File->new("$g.cdb", "$g.new") or die "$0: cdbmake($g.cdb): $!\n";
-while (<GROUPS>) {
-  next if m'^\s*(\#|$)';
-  my @f = split;
-  @f == 3 or die "$0: bad info line $.\n";
-  my $l = join(" ", @f);
-  my ($tag, $group, $addr) = @f;
-  $group =~ tr/./-/;
-  $c->insert("t:$tag" => $l);
-  $c->insert("g:$group" => $l);
-}
-$c->finish() or die "$0: cdbfinish($g.cdb): $!\n";
-exit 0;
+ego = r_sub(r'^.*[/\\]', '', argv[0])
+def die(msg, tag = True):
+  if tag: msg = '%s: %s' % (ego, msg)
+  print >>stderr, msg
+  exit(1)
+if len(argv) != 2:
+  die('usage: %s GROUPFILE' % ego)
+
+rx_comment = r_compile(r'^\s*(\#|$)')
+group = argv[1]
+cdb = cdbmake(group + '.cdb', group + '.cdb.new')
+i = 0
+for line in open(group, 'r'):
+  i += 1
+  if rx_comment.match(line): continue
+  f = line.split()
+  if len(f) != 3: die('bad info line %d.' % i)
+  l = ' '.join(f)
+  tag, group, addr = f
+  group = group.replace('.', '-')
+  cdb.add('t:%s' % tag, l)
+  cdb.add('g:%s' % group, l)
+cdb.finish()