<commit_before>#! /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()

<commit_msg>Added some more machinery -- still not finished<commit_after>#! /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 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):

	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()
			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):

	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):
		files = []
		if self.cvs.checkfiles(files):
			return 1
		self.cvs.report()

	def do_update(self, opts, files):
		"""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)


{'fraction_non_alphanumeric': 0.138, 'fraction_numerical': 0.0028, 'mean_word_length': 3.082448979591837, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '65515', 'n_tokens_mistral': 2024, 'n_tokens_neox': 1755, 'n_words': 507}