~jdahlin-deactivatedaccount/bzrcvsserve/main

« back to all changes in this revision

Viewing changes to cvsserver.py

  • Committer: jdahlin at com
  • Date: 2006-09-10 02:36:35 UTC
  • Revision ID: jdahlin@async.com.br-20060910023635-c965ca93e1b2a005
Implement diff

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
from bzrlib.branch import Branch
23
23
from bzrlib.delta import compare_trees
 
24
from bzrlib.diff import internal_diff
24
25
from bzrlib.log import find_touching_revisions
25
26
from bzrlib.workingtree import WorkingTree
26
27
 
70
71
        self.arguments = []
71
72
        self.entries = {}
72
73
        self.unchanged = []
 
74
        self.modified = {}
73
75
        self.options = None
74
76
        self.root = None
75
77
        self.gzip = None
80
82
    def _response(self, msg):
81
83
        msg = str(msg)
82
84
        msg += '\n'
83
 
        self._log('S: %r' % msg)
 
85
        self._log('S: %r' % (msg,))
84
86
        self._write(msg)
85
87
 
86
88
    def _write(self, msg):
99
101
        return data
100
102
 
101
103
    def _msg(self, msg):
102
 
        self._response("M %s" % (msg))
 
104
        self._response("M %s" % (msg,))
103
105
 
104
106
    # Private
105
107
 
245
247
 
246
248
        tree = WorkingTree.open_containing(self.directory)[0]
247
249
        directory = self.directory[len(self.root)+1:]
 
250
        orig = filename
248
251
        filename = os.path.join(directory, filename)
249
 
        if cat(tree.branch, filename) != data:
 
252
        old = cat(tree.branch, filename)
 
253
        if old != data:
250
254
            self._msg("M %s" % (filename,))
 
255
        self.modified[filename] = (os.path.join(self.root, filename),
 
256
                                   old, data)
251
257
 
252
258
    def cmd_Unchanged(self, line):
253
259
        self.unchanged.append(line)
306
312
    def cmd_gzip_file_contents(self, line):
307
313
        self.gzip = int(line)
308
314
 
 
315
    def cmd_diff(self, line):
 
316
        class Dummy(object):
 
317
            def __init__(self, cvs):
 
318
                self.cvs = cvs
 
319
            def write(self, data):
 
320
                self.cvs._msg(data[:-1])
 
321
        dummy = Dummy(self)
 
322
 
 
323
        for name, (full, old, new) in self.modified.iteritems():
 
324
            self._msg("Index: %s" % name)
 
325
            self._msg("=" * 67)
 
326
            self._msg("RCS file: %s,v" % full)
 
327
            oldlines = [line + '\n' for line in old.split('\n')][:-1]
 
328
            newlines = [line + '\n' for line in new.split('\n')][:-1]
 
329
            internal_diff(name, oldlines,
 
330
                          name, newlines,
 
331
                          dummy)
 
332
 
 
333
        self._response('ok')
 
334
 
309
335
    # Public API
310
336
 
311
337
    def serve(self):