chiark / gitweb /
cdb: Remove dependency on freecdb and libfile-cdb-perl.
[misc] / cdb-list
index 368da625e6ffbdaab930e9763808b1d1a364ec2d..ee85a1483617b24632a96e0811a43a8c4e667fb9 100755 (executable)
--- 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()