Den fre 15 dec. 2023 kl 10:45 skrev <gst...@apache.org>: > Author: gstein > Date: Fri Dec 15 09:44:03 2023 > New Revision: 1914679 > > URL: http://svn.apache.org/viewvc?rev=1914679&view=rev > Log: > class DifflibDiffContent does not work, and maybe never did. There is > no .next() method on the unified_diff() result object. While it would > be possible to use the next() function, it is better to just remove > this entirely and require the host OS to have a diff executable (not a > hard requirement). >
I don't completely understand the technical details, but the Swig bindings ([1], lines 201 and below) use svn.diff.file_diff_2 to create a diff. Would it make sense to use this instead of a hard requirement on a diff executable? Kind regards, Daniel [1] subversion/bindings/swig/python/svn/fs.py > > * tools/hook-scripts/mailer/mailer.py: > (DiffGenerator.__getitem__): remove OSError exception, as the diff > executable must be present. > (class DifflibDiffContent): removed. > > Modified: > subversion/trunk/tools/hook-scripts/mailer/mailer.py > > Modified: subversion/trunk/tools/hook-scripts/mailer/mailer.py > URL: > http://svn.apache.org/viewvc/subversion/trunk/tools/hook-scripts/mailer/mailer.py?rev=1914679&r1=1914678&r2=1914679&view=diff > > ============================================================================== > --- subversion/trunk/tools/hook-scripts/mailer/mailer.py (original) > +++ subversion/trunk/tools/hook-scripts/mailer/mailer.py Fri Dec 15 > 09:44:03 2023 > @@ -1016,17 +1016,13 @@ class DiffGenerator: > if binary: > content = src_fname = dst_fname = None > else: > - src_fname, dst_fname = diff.get_files() > - try: > + src_fname, dst_fname = diff.get_files() > content = DiffContent(self.cfg.get_diff_cmd(self.group, { > 'label_from' : label1, > 'label_to' : label2, > 'from' : src_fname, > 'to' : dst_fname, > })) > - except OSError: > - # diff command does not exist, try difflib.unified_diff() > - content = DifflibDiffContent(label1, label2, src_fname, > dst_fname) > > # return a data item for this diff > return _data( > @@ -1101,36 +1097,6 @@ class DiffContent: > raise IndexError > > line, ltype, self.seen_change = _classify_diff_line(line, > self.seen_change) > - return _data( > - raw=line, > - text=line[1:-1], # remove indicator and newline > - type=ltype, > - ) > - > - > -class DifflibDiffContent(): > - "This is a generator-like object returning annotated lines of a diff." > - > - def __init__(self, label_from, label_to, from_file, to_file): > - import difflib > - self.seen_change = False > - fromlines = open(from_file, 'U').readlines() > - tolines = open(to_file, 'U').readlines() > - self.diff = difflib.unified_diff(fromlines, tolines, > - label_from, label_to) > - > - def __nonzero__(self): > - # we always have some items > - return True > - > - def __getitem__(self, idx): > - > - try: > - line = self.diff.next() > - except StopIteration: > - raise IndexError > - > - line, ltype, self.seen_change = _classify_diff_line(line, > self.seen_change) > return _data( > raw=line, > text=line[1:-1], # remove indicator and newline > > >