#! /usr/bin/python2.7 "Remote RCS -- command line interface" import sys import os import getopt import string import md5 import tempfile from rcsclient import openrcsclient def main(): sys.stdout = sys.stderr try: opts, rest = getopt.getopt(sys.argv[1:], 'h:p:d:qvL') if not rest: cmd = 'head' else: cmd, rest = rest[0], rest[1:] if not commands.has_key(cmd): raise getopt.error, "unknown command" coptset, func = commands[cmd] copts, files = getopt.getopt(rest, coptset) except getopt.error, msg: print msg print "usage: rrcs [options] command [options] [file] ..." print "where command can be:" print " ci|put # checkin the given files" print " co|get # checkout" print " info # print header info" print " head # print revision of head branch" print " list # list filename if valid" print " log # print full log" print " diff # diff rcs file and work file" print "if no files are given, all remote rcs files are assumed" sys.exit(2) x = openrcsclient(opts) if not files: files = x.listfiles() for fn in files: try: func(x, copts, fn) except (IOError, os.error), msg: print "%s: %s" % (fn, msg) def checkin(x, copts, fn): f = open(fn) data = f.read() f.close() new = not x.isvalid(fn) if not new and same(x, copts, fn, data): print "%s: unchanged since last checkin" % fn return print "Checking in", fn, "..." message = asklogmessage(new) messages = x.put(fn, data, message) if messages: print messages def checkout(x, copts, fn): data = x.get(fn) f = open(fn, 'w') f.write(data) f.close() def lock(x, copts, fn): x.lock(fn) def unlock(x, copts, fn): x.unlock(fn) def info(x, copts, fn): dict = x.info(fn) keys = dict.keys() keys.sort() for key in keys: print key + ':', dict[key] print '='*70 def head(x, copts, fn): head = x.head(fn) print fn, head def list(x, copts, fn): if x.isvalid(fn): print fn def log(x, copts, fn): flags = '' for o, a in copts: flags = flags + ' ' + o + a flags = flags[1:] messages = x.log(fn, flags) print messages def diff(x, copts, fn): if same(x, copts, fn): return flags = '' for o, a in copts: flags = flags + ' ' + o + a flags = flags[1:] data = x.get(fn) tf = tempfile.NamedTemporaryFile() tf.write(data) tf.flush() print 'diff %s -r%s %s' % (flags, x.head(fn), fn) sts = os.system('diff %s %s %s' % (flags, tf.name, fn)) if sts: print '='*70 def same(x, copts, fn, data = None): if data is None: f = open(fn) data = f.read() f.close() lsum = md5.new(data).digest() rsum = x.sum(fn) return lsum == rsum def asklogmessage(new): if new: print "enter description,", else: print "enter log message,", print "terminate with single '.' or end of file:" if new: print "NOTE: This is NOT the log message!" message = "" while 1: sys.stderr.write(">> ") sys.stderr.flush() line = sys.stdin.readline() if not line or line == '.\n': break message = message + line return message def remove(fn): try: os.unlink(fn) except os.error: pass commands = { 'ci': ('', checkin), 'put': ('', checkin), 'co': ('', checkout), 'get': ('', checkout), 'info': ('', info), 'head': ('', head), 'list': ('', list), 'lock': ('', lock), 'unlock': ('', unlock), 'log': ('bhLRtd:l:r:s:w:V:', log), 'diff': ('c', diff), } if __name__ == '__main__': main()
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
FSProxy.py | File | 7.64 KB | 0644 |
|
FSProxy.pyc | File | 12.5 KB | 0644 |
|
FSProxy.pyo | File | 12.5 KB | 0644 |
|
RCSProxy.py | File | 4.61 KB | 0755 |
|
RCSProxy.pyc | File | 7.57 KB | 0644 |
|
RCSProxy.pyo | File | 7.57 KB | 0644 |
|
README | File | 4.16 KB | 0644 |
|
client.py | File | 4.6 KB | 0644 |
|
client.pyc | File | 6.57 KB | 0644 |
|
client.pyo | File | 6.57 KB | 0644 |
|
cmdfw.py | File | 4.53 KB | 0644 |
|
cmdfw.pyc | File | 5.12 KB | 0644 |
|
cmdfw.pyo | File | 5.12 KB | 0644 |
|
cmptree.py | File | 5.64 KB | 0644 |
|
cmptree.pyc | File | 5.98 KB | 0644 |
|
cmptree.pyo | File | 5.98 KB | 0644 |
|
cvslib.py | File | 9.94 KB | 0644 |
|
cvslib.pyc | File | 12.83 KB | 0644 |
|
cvslib.pyo | File | 12.83 KB | 0644 |
|
cvslock.py | File | 6.61 KB | 0644 |
|
cvslock.pyc | File | 8.36 KB | 0644 |
|
cvslock.pyo | File | 8.36 KB | 0644 |
|
mac.py | File | 352 B | 0644 |
|
mac.pyc | File | 598 B | 0644 |
|
mac.pyo | File | 598 B | 0644 |
|
makechangelog.py | File | 2.92 KB | 0755 |
|
makechangelog.pyc | File | 3.05 KB | 0644 |
|
makechangelog.pyo | File | 3.05 KB | 0644 |
|
rcsbump | File | 745 B | 0755 |
|
rcsclient.py | File | 1.76 KB | 0644 |
|
rcsclient.pyc | File | 2.05 KB | 0644 |
|
rcsclient.pyo | File | 2.05 KB | 0644 |
|
rcslib.py | File | 10.08 KB | 0644 |
|
rcslib.pyc | File | 11.28 KB | 0644 |
|
rcslib.pyo | File | 11.28 KB | 0644 |
|
rcvs | File | 117 B | 0755 |
|
rcvs.py | File | 13.32 KB | 0755 |
|
rcvs.pyc | File | 14.08 KB | 0644 |
|
rcvs.pyo | File | 14.08 KB | 0644 |
|
rrcs | File | 117 B | 0755 |
|
rrcs.py | File | 3.9 KB | 0755 |
|
rrcs.pyc | File | 5.5 KB | 0644 |
|
rrcs.pyo | File | 5.5 KB | 0644 |
|
security.py | File | 1.07 KB | 0644 |
|
security.pyc | File | 1.64 KB | 0644 |
|
security.pyo | File | 1.64 KB | 0644 |
|
server.py | File | 4.47 KB | 0644 |
|
server.pyc | File | 5.83 KB | 0644 |
|
server.pyo | File | 5.83 KB | 0644 |
|
sumtree.py | File | 518 B | 0644 |
|
sumtree.pyc | File | 903 B | 0644 |
|
sumtree.pyo | File | 903 B | 0644 |
|