summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1995-04-27 18:07:07 (GMT)
committerGuido van Rossum <guido@python.org>1995-04-27 18:07:07 (GMT)
commit097c55ad75c82e8572591fa99ac3bab756ab33c3 (patch)
treec2a41af3658e5c1a74b7544abd6c474cb9bbabe9
parentc51237cd709eb613746b9b1cc92814973dbdddf2 (diff)
downloadcpython-097c55ad75c82e8572591fa99ac3bab756ab33c3.zip
cpython-097c55ad75c82e8572591fa99ac3bab756ab33c3.tar.gz
cpython-097c55ad75c82e8572591fa99ac3bab756ab33c3.tar.bz2
accept more invalid dates
when reading sums file, ignore files not in entries
-rwxr-xr-xDemo/pdist/rcvs.py224
1 files changed, 153 insertions, 71 deletions
diff --git a/Demo/pdist/rcvs.py b/Demo/pdist/rcvs.py
index eb43bb8..1c323e2 100755
--- a/Demo/pdist/rcvs.py
+++ b/Demo/pdist/rcvs.py
@@ -1,6 +1,8 @@
+#! /usr/local/bin/python
+
+"Remote CVS -- command line interface"
+
from cvslib import CVS, Entry
-import RCSProxy
-import client
import md5
import os
import string
@@ -15,6 +17,8 @@ def ignored(file):
for pat in ignored_patterns:
if fnmatch.fnmatch(file, pat): return 1
return 0
+def not_ignored(file):
+ return not ignored(file)
class PCVS(CVS):
@@ -32,51 +36,161 @@ class PCVS(CVS):
sum = self.proxy.sum((file, e.rev))
e.setsum(sum)
+ def prepare(self):
+ self.localfiles = filter(not_ignored, os.listdir(os.curdir))
+ self.localfiles.sort()
+
+ self.entryfiles = self.keys()
+
+ self.remotefiles = self.proxy.listfiles()
+
+ self.rcsfiles = self.entryfiles[:]
+ for file in self.remotefiles:
+ if file not in self.rcsfiles:
+ self.rcsfiles.append(file)
+ self.rcsfiles.sort()
+
+ self.localonlyfiles = []
+ for file in self.localfiles:
+ if file not in self.rcsfiles:
+ self.localonlyfiles.append(file)
+ self.localonlyfiles.sort()
+
+ self.allfiles = self.rcsfiles + self.localonlyfiles
+ self.allfiles.sort()
+
+ def preparedetails(self, file):
+ entry = file in self.entryfiles
+ if entry:
+ e = self.entries[file]
+ else:
+ e = Entry('/%s/0///' % file)
+ e.entry = entry
+ e.local = file in self.localfiles
+ e.remote = file in self.remotefiles
+ if e.local:
+ e.lsum = sumfile(file)
+ else:
+ e.lsum = None
+ if e.remote:
+ e.rrev = self.proxy.head(file)
+ if e.rrev == e.rev:
+ e.rsum = e.sum
+ else:
+ e.rsum = self.proxy.sum(file)
+ else:
+ e.rrev = '0'
+ e.rsum = None
+ return e
+
+ def report(self):
+ self.prepare()
+ for file in self.allfiles:
+ e = self.preparedetails(file)
+ if e.lsum == e.sum == e.rsum:
+ # All three exist and are equal
+ print '=', file
+ elif e.lsum == e.sum:
+ # Not modified locally, remote update pending
+ if e.lsum is None:
+ print 'N', file, '(new remote)'
+ else:
+ print 'U', file
+ elif e.sum == e.rsum:
+ # No remote update, modified locally
+ if e.rsum is None:
+ if e.new:
+ print 'A', file
+ else:
+ print '?', file
+ else:
+ if e.lsum is None:
+ print 'LOST', file
+ else:
+ print 'M', file
+ else:
+ # Conflict: remote update and locally modified
+ if e.lsum == e.rsum:
+ # Local and remote match!
+ print 'c', file
+ else:
+ print 'C', file
+
def fullcheck(self):
+ self.prepare()
ok = 1
- for file in self.keys():
- e = self.entries[file]
+ for file in self.allfiles:
+ if file not in self.entryfiles \
+ and file not in self.remotefiles:
+ continue
+ e = self.preparedetails(file)
if e.new:
- if self.proxy.isfile(file):
- print "%s: created by someone else!"
+ if e.rrev:
+ print "%s: created by someone else"%file
ok = 0
continue
- rrev = self.proxy.head(file)
- if rrev != e.rev:
+ if e.rrev != e.rev:
print "%s: out of date (%s vs. %s)" % \
(file, e.rev, rrev)
ok = 0
return ok
def update(self):
- for file in self.keys():
- e = self.entries[file]
- if e.new:
- print 'A', file
+ self.prepare()
+ for file in self.rcsfiles:
+ e = self.preparedetails(file)
+ if e.lsum == e.sum == e.rsum:
+ print '=', file
continue
- rrev = self.proxy.head(file)
- lsum = sumfile(file)
- if rrev == e.rev:
- if lsum == e.sum:
- print '=', file
- else:
- print 'M', file
+ if e.sum == e.rsum:
+ if e.rev != e.rrev:
+ print '%s: %s -> %s w/o change' % \
+ (file, e.rev, e.rrev)
+ e.rev = e.rrev
+ if e.lsum != e.sum:
+ if e.lsum is None:
+ print '%s: file was lost' % \
+ (file,)
+ self.get(e)
+ elif e.new:
+ print 'A', file
+ else:
+ print 'M', file
continue
- if e.sum != lsum:
- print "%s: conflict -- not updated" % file
+ if e.lsum == e.sum:
+ if e.rev == e.rrev:
+ print '%s: no new revision' % file
+ print 'U', file,
+ sys.stdout.flush()
+ self.get(e)
+ print
continue
- print "%s: getting ..." % file
- data = self.proxy.get(file)
- f = open(file, 'w')
- f.write(data)
- f.close()
- nsum = md5.new(data).digest()
- e.setsum(nsum)
- e.rev = rrev
- print 'U', file
+ if e.lsum == e.rsum:
+ print 'c', file
+ print e.__dict__
+ e.rev = e.rrev
+ e.sum = e.rsum
+ e.new = e.sum is None and e.lsum is not None
+ if e.sum:
+ e.mtime, e.ctime = os.stat(e.file)[-2:]
+ print e.__dict__
+ self.entries[file] = e
+ continue
+ print 'C', file, '(not resolved)'
self.writeentries()
self.writesums()
+ def get(self, e):
+ data = self.proxy.get(e.file)
+ f = open(e.file, 'w')
+ f.write(data)
+ f.close()
+ nsum = md5.new(data).digest()
+ e.setsum(nsum)
+ e.mtime, e.ctime = os.stat(e.file)[-2:]
+ e.new = 0
+ e.rev = e.rrev
+
def commit(self):
if not self.fullcheck():
print "correct above errors first"
@@ -102,6 +216,7 @@ class PCVS(CVS):
self.proxy.put(file, data, message)
e.rev = self.proxy.head(file)
e.setsum(self.proxy.sum(file))
+ e.new = 0
# XXX get it?
mtime, ctime = os.stat(file)[-2:]
e.mtime = mtime
@@ -109,45 +224,9 @@ class PCVS(CVS):
self.writeentries()
self.writesums()
- def report(self):
- keys = self.keys()
- files = os.listdir(os.curdir)
- allfiles = files
- for file in keys:
- if file not in allfiles:
- allfiles.append(file)
- allfiles.sort()
- for file in allfiles:
- if file not in keys:
- if not ignored(file):
- print '?', file
- continue
- if file not in files:
- print file, ': lost'
- continue
- e = self.entries[file]
- if not os.path.exists(file):
- print "%s: lost" % file
- continue
- if e.new:
- print 'A', file
- continue
- lsum = sumfile(file)
- rrev = self.proxy.head(file)
- if rrev == e.rev:
- if lsum == e.sum:
- print '=', file
- else:
- print 'M', file
- else:
- if lsum == e.sum:
- print 'U', file
- else:
- print 'C', file
-
def add(self, file):
if self.entries.has_key(file):
- print "%s: already known"
+ print "%s: already known" % file
else:
self.entries[file] = Entry('/%s/0/Initial %s//\n' %
(file, file))
@@ -158,10 +237,14 @@ def sumfile(file):
def test():
- proxy = RCSProxy.RCSProxyClient(('voorn.cwi.nl', 4127))
- proxy.cd('/ufs/guido/voorn/python-RCS/Demo/pdist')
+ import sys
+ import getopt
+ from rcsclient import openrcsclient
+
+ opts, args = getopt.getopt(sys.argv[1:], 'd:h:p:vq')
+ proxy = openrcsclient(opts)
x = PCVS(proxy)
- args = sys.argv[1:]
+
if args:
cmd = args[0]
files = args[1:]
@@ -186,7 +269,6 @@ def test():
print "Unknown command", cmd
else:
x.report()
- if sys.argv[1:]: x.writesums()
if __name__ == "__main__":
test()