summaryrefslogtreecommitdiffstats
path: root/Demo/pdist/rcvs.py
blob: 9f9d8bd1b37458771bf22fbf42b1284d52f9e9f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#! /usr/local/bin/python

"""Remote CVS -- command line interface"""

from cvslib import CVS, File
import md5
import os
import string
import sys
from cmdfw import CommandFrameWork


class MyFile(File):

	def update(self):
		print self.file, '...'
		if self.lsum == self.esum == self.rsum:
			print '=', self.file
			return
		if self.lsum and not self.erev and not self.rrev:
			print '?', self.file
			return
		print 'X', self.file
		


class RCVS(CVS):

	FileClass = MyFile

	def __init__(self):
		CVS.__init__(self)

	def checkfiles(self, files):
		if not files:
			def ok(file, self=self):
				e = self.entries[file]
				return e.eseen or e.rseen
			files[:] = filter(ok, self.entries.keys())
			files.sort()


class rcvs(CommandFrameWork):

	GlobalFlags = 'd:h:p:qv'
	UsageMessage = \
  "usage: rcvs [-d directory] [-h host] [-p port] [-q] [-v] subcommand arg ..."

	def __init__(self):
		"""Constructor."""
		CommandFrameWork.__init__(self)
		self.proxy = None
		self.cvs = RCVS()

	def options(self, opts):
		self.opts = opts

	def ready(self):
		import rcsclient
		self.proxy = rcsclient.openrcsclient(self.opts)
		self.cvs.setproxy(self.proxy)
		self.cvs.getentries()
		self.cvs.getlocalfiles()
		self.cvs.getremotefiles(self.proxy)

	def default(self):
		self.cvs.report()

	def do_update(self, opts, files):
		self.cvs.checkfiles(files)
		if not files:
			print "no files"
			return
		for file in files:
			if not self.cvs.entries.has_key(file):
				print "%s: not found" % file
			else:
				self.cvs.entries[file].update()


def main():
	rcvs().run()


if __name__ == "__main__":
	main()