accept more invalid dates

when reading sums file, ignore files not in entries
This commit is contained in:
Guido van Rossum 1995-04-27 18:07:07 +00:00
parent c51237cd70
commit 097c55ad75

View File

@ -1,6 +1,8 @@
#! /usr/local/bin/python
"Remote CVS -- command line interface"
from cvslib import CVS, Entry from cvslib import CVS, Entry
import RCSProxy
import client
import md5 import md5
import os import os
import string import string
@ -15,6 +17,8 @@ def ignored(file):
for pat in ignored_patterns: for pat in ignored_patterns:
if fnmatch.fnmatch(file, pat): return 1 if fnmatch.fnmatch(file, pat): return 1
return 0 return 0
def not_ignored(file):
return not ignored(file)
class PCVS(CVS): class PCVS(CVS):
@ -32,51 +36,161 @@ class PCVS(CVS):
sum = self.proxy.sum((file, e.rev)) sum = self.proxy.sum((file, e.rev))
e.setsum(sum) e.setsum(sum)
def fullcheck(self): def prepare(self):
ok = 1 self.localfiles = filter(not_ignored, os.listdir(os.curdir))
for file in self.keys(): 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] 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.allfiles:
if file not in self.entryfiles \
and file not in self.remotefiles:
continue
e = self.preparedetails(file)
if e.new: if e.new:
if self.proxy.isfile(file): if e.rrev:
print "%s: created by someone else!" print "%s: created by someone else"%file
ok = 0 ok = 0
continue continue
rrev = self.proxy.head(file) if e.rrev != e.rev:
if rrev != e.rev:
print "%s: out of date (%s vs. %s)" % \ print "%s: out of date (%s vs. %s)" % \
(file, e.rev, rrev) (file, e.rev, rrev)
ok = 0 ok = 0
return ok return ok
def update(self): def update(self):
for file in self.keys(): self.prepare()
e = self.entries[file] for file in self.rcsfiles:
if e.new: e = self.preparedetails(file)
print 'A', file if e.lsum == e.sum == e.rsum:
print '=', file
continue continue
rrev = self.proxy.head(file) if e.sum == e.rsum:
lsum = sumfile(file) if e.rev != e.rrev:
if rrev == e.rev: print '%s: %s -> %s w/o change' % \
if lsum == e.sum: (file, e.rev, e.rrev)
print '=', file e.rev = e.rrev
else: if e.lsum != e.sum:
print 'M', file 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 continue
if e.sum != lsum: if e.lsum == e.sum:
print "%s: conflict -- not updated" % file if e.rev == e.rrev:
print '%s: no new revision' % file
print 'U', file,
sys.stdout.flush()
self.get(e)
print
continue continue
print "%s: getting ..." % file if e.lsum == e.rsum:
data = self.proxy.get(file) print 'c', file
f = open(file, 'w') print e.__dict__
f.write(data) e.rev = e.rrev
f.close() e.sum = e.rsum
nsum = md5.new(data).digest() e.new = e.sum is None and e.lsum is not None
e.setsum(nsum) if e.sum:
e.rev = rrev e.mtime, e.ctime = os.stat(e.file)[-2:]
print 'U', file print e.__dict__
self.entries[file] = e
continue
print 'C', file, '(not resolved)'
self.writeentries() self.writeentries()
self.writesums() 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): def commit(self):
if not self.fullcheck(): if not self.fullcheck():
print "correct above errors first" print "correct above errors first"
@ -102,6 +216,7 @@ class PCVS(CVS):
self.proxy.put(file, data, message) self.proxy.put(file, data, message)
e.rev = self.proxy.head(file) e.rev = self.proxy.head(file)
e.setsum(self.proxy.sum(file)) e.setsum(self.proxy.sum(file))
e.new = 0
# XXX get it? # XXX get it?
mtime, ctime = os.stat(file)[-2:] mtime, ctime = os.stat(file)[-2:]
e.mtime = mtime e.mtime = mtime
@ -109,45 +224,9 @@ class PCVS(CVS):
self.writeentries() self.writeentries()
self.writesums() 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): def add(self, file):
if self.entries.has_key(file): if self.entries.has_key(file):
print "%s: already known" print "%s: already known" % file
else: else:
self.entries[file] = Entry('/%s/0/Initial %s//\n' % self.entries[file] = Entry('/%s/0/Initial %s//\n' %
(file, file)) (file, file))
@ -158,10 +237,14 @@ def sumfile(file):
def test(): def test():
proxy = RCSProxy.RCSProxyClient(('voorn.cwi.nl', 4127)) import sys
proxy.cd('/ufs/guido/voorn/python-RCS/Demo/pdist') import getopt
from rcsclient import openrcsclient
opts, args = getopt.getopt(sys.argv[1:], 'd:h:p:vq')
proxy = openrcsclient(opts)
x = PCVS(proxy) x = PCVS(proxy)
args = sys.argv[1:]
if args: if args:
cmd = args[0] cmd = args[0]
files = args[1:] files = args[1:]
@ -186,7 +269,6 @@ def test():
print "Unknown command", cmd print "Unknown command", cmd
else: else:
x.report() x.report()
if sys.argv[1:]: x.writesums()
if __name__ == "__main__": if __name__ == "__main__":
test() test()