From 9e4ef171d9e8a2f17205496cf0444db62edbd0f1 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Wed, 30 Dec 2009 17:10:03 -0500 Subject: [PATCH 1/1] Add a 'bup' wrapper program. We're going to use that with some subcommands, git-style. --- .gitignore | 7 +++---- Makefile | 23 +++++++++++++--------- bup.py | 37 ++++++++++++++++++++++++++++++++++++ hashjoin.sh => cmd-join.sh | 0 hashsplit.py => cmd-split.py | 0 5 files changed, 54 insertions(+), 13 deletions(-) create mode 100755 bup.py rename hashjoin.sh => cmd-join.sh (100%) rename hashsplit.py => cmd-split.py (100%) diff --git a/.gitignore b/.gitignore index 208c127..54cec6f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ -hsplit -hjoin -hashsplit -hashjoin +bup +bup-split +bup-join datagen *.o *.so diff --git a/Makefile b/Makefile index a26c421..1707560 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CFLAGS=-Wall -g -O2 -Werror -I/usr/include/python2.5 -g -fwrapv -fPIC default: all -all: hashsplit hashjoin datagen hashsplit.so +all: bup-split bup-join bup datagen hashsplit.so datagen: datagen.o @@ -10,24 +10,28 @@ hashsplit.so: hashsplitmodule.o $(CC) -shared -Wl,-Bsymbolic-functions -o $@ $< test: all - ./hashsplit.py tags1 - ./hashsplit.py tags2 + ./bup split tags1 + ./bup split tags2 diff -u tags1 tags2 || true wc -c testfile1 testfile2 wc -l tags1 tags2 - ./hashjoin out1 - ./hashjoin out2 + ./bup join out1 + ./bup join out2 diff -u testfile1 out1 diff -u testfile2 out2 %: %.o gcc -o $@ $< $(LDFLAGS) $(LIBS) -%: %.py +bup: bup.py rm -f $@ ln -s $^ $@ -%: %.sh +bup-%: cmd-%.py + rm -f $@ + ln -s $^ $@ + +bup-%: cmd-%.sh rm -f $@ ln -s $^ $@ @@ -35,5 +39,6 @@ test: all gcc -c -o $@ $^ $(CPPFLAGS) $(CFLAGS) clean: - rm -f *.o *.so *~ hashsplit hashjoin hsplit hjoin datagen *.pyc \ - out[12] tags[12] .*~ + rm -f *.o *.so *~ .*~ *.pyc \ + bup bup-split bup-join datagen \ + out[12] tags[12] diff --git a/bup.py b/bup.py new file mode 100755 index 0000000..d15cc48 --- /dev/null +++ b/bup.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +import sys, os + +argv = sys.argv +exe = argv[0] +exepath = os.path.split(exe)[0] or '.' + +def log(s): + sys.stderr.write(s) + +def usage(): + log('Usage: %s \n\n' % exe) + log('Available subcommands:\n') + for c in os.listdir(exepath): + if c.startswith('bup-') and c.find('.') < 0: + log('\t%s\n' % c[4:]) + exit(99) + + +if len(argv) < 2 or not argv[1] or argv[1][0] == '-': + usage() + +subcmd = argv[1] +if subcmd == 'help': + usage() + +subpath = os.path.join(exepath, 'bup-%s' % subcmd) + +if not os.path.exists(subpath): + log('%s: unknown command "%s"\n' % (exe, subcmd)) + usage() + +try: + os.execv(subpath, [subpath] + argv[2:]) +except OSError, e: + log('%s: %s\n' % (subpath, e)) + exit(98) diff --git a/hashjoin.sh b/cmd-join.sh similarity index 100% rename from hashjoin.sh rename to cmd-join.sh diff --git a/hashsplit.py b/cmd-split.py similarity index 100% rename from hashsplit.py rename to cmd-split.py -- 2.39.2