mirror of
https://github.com/python/cpython.git
synced 2024-12-01 05:45:40 +08:00
accept more invalid dates
when reading sums file, ignore files not in entries
This commit is contained in:
parent
c51237cd70
commit
097c55ad75
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user