Added some more machinery -- still not finished
diff --git a/Demo/pdist/rcvs.py b/Demo/pdist/rcvs.py
index 9f9d8bd..fe8651c 100755
--- a/Demo/pdist/rcvs.py
+++ b/Demo/pdist/rcvs.py
@@ -12,16 +12,64 @@
 
 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
+	def action(self):
+		"""Return a code indicating the update status of this file.
+
+		The possible return values are:
 		
+		'=' -- everything's fine
+		'0' -- file doesn't exist anywhere
+		'?' -- exists locally only
+		'A' -- new locally
+		'R' -- deleted locally
+		'U' -- changed remotely, no changes locally
+		'M' -- changed locally, no changes remotely
+		'C' -- conflict: changed locally as well as remotely
+		       (includes cases where the file has been added
+		       or removed locally and remotely)
+		"""
+		if not self.eseen:
+			pass
+		return '?'
+
+	def update(self):
+		code = self.action()
+		print code, self.file
+		if code == 'U':
+			self.get()
+		elif code == 'C':
+			print "%s: conflict resolution not yet implemented" % \
+			      self.file
+
+	def commit(self, message = ""):
+		code = self.action()
+		if code in ('A', 'M'):
+			self.put(message)
+		elif code == 'R':
+			print "%s: committing removes not yet implemented" % \
+			      self.file
+		elif code == 'C':
+			print "%s: conflict resolution not yet implemented" % \
+			      self.file
+
+	def commitcheck(self):
+		return self.action() != 'C'
+
+	def put(self, message = ""):
+		print "%s: put not yet implemented" % self.file
+	
+	def get(self):
+		data = self.proxy.get(self.file)
+		f = open(self.file, 'w')
+		f.write(data)
+		f.close()
+		self.eseen = 1
+		self.esum = self.rsum
+		self.emtime, self.ectime = os.stat(self.file)[-2:]
+		self.erev = self.rrev
+		self.enew = 0
+		self.edeleted = 0
+		# XXX anything else?
 
 
 class RCVS(CVS):
@@ -38,6 +86,18 @@
 				return e.eseen or e.rseen
 			files[:] = filter(ok, self.entries.keys())
 			files.sort()
+			if not files:
+				print "no files to be processed"
+				return 1
+			else:
+				return None
+		else:
+			sts = None
+			for file in files:
+				if not self.entries.has_key(file):
+					print "%s: nothing known" % file
+					sts = 1
+			return sts
 
 
 class rcvs(CommandFrameWork):
@@ -64,19 +124,35 @@
 		self.cvs.getremotefiles(self.proxy)
 
 	def default(self):
+		files = []
+		if self.cvs.checkfiles(files):
+			return 1
 		self.cvs.report()
 
 	def do_update(self, opts, files):
-		self.cvs.checkfiles(files)
-		if not files:
-			print "no files"
-			return
+		"""update [file] ..."""
+		if self.cvs.checkfiles(files):
+			return 1
 		for file in files:
 			if not self.cvs.entries.has_key(file):
 				print "%s: not found" % file
 			else:
 				self.cvs.entries[file].update()
 
+	def do_commit(self, opts, files):
+		"""commit [file] ..."""
+		if self.cvs.checkfiles(files):
+			return 1
+		sts = 0
+		for file in files:
+			if not self.entries[file].commitcheck():
+				sts = 1
+		if sts:
+			return sts
+		message = raw_input("One-liner: ")
+		for file in files:
+			self.entries[file].commit(message)
+
 
 def main():
 	rcvs().run()