#! /usr/bin/env python """ Syntax: svn-share.py working-copy-1 ... working-copy-n Also removes .pyc files, just because it can be nicely done at the same time. """ import os, sys, sha, stat seen = {} def parse(path): textpath = path + '/.svn/text-base' if os.path.isdir(textpath): for name in os.listdir(textpath): fullname = os.path.join(textpath, name) f = open(fullname, 'rb') data = f.read() f.close() if data: digest = sha.sha(data).digest() del data if digest not in seen: seen[digest] = fullname elif not os.path.samefile(seen[digest], fullname): print 'E', seen[digest] print 'W', fullname try: os.link(seen[digest], fullname + '~') except OSError, e: print e else: os.rename(fullname + '~', fullname) for name in os.listdir(path): if name != '.svn': fullname = os.path.join(path, name) st = os.lstat(fullname) if stat.S_ISDIR(st.st_mode): parse(fullname) elif name.endswith('.pyc') and stat.S_ISREG(st.st_mode): try: os.unlink(fullname) except OSError: pass if len(sys.argv) <= 1: print >> sys.stderr, __doc__ sys.exit(2) for rootpath in sys.argv[1:]: parse(rootpath)