[Pkg-bazaar-commits] ./bzr-builddeb/trunk r212: patches.py isn't used, and wasn't meant to be committed.

James Westby jw+debian at jameswestby.net
Thu May 15 13:29:38 UTC 2008


------------------------------------------------------------
revno: 212
committer: James Westby <jw+debian at jameswestby.net>
branch nick: trunk
timestamp: Wed 2008-03-05 16:31:08 +0000
message:
  patches.py isn't used, and wasn't meant to be committed.
removed:
  patches.py
-------------- next part --------------
=== removed file 'patches.py'
--- a/patches.py	2007-06-24 21:21:25 +0000
+++ b/patches.py	1970-01-01 00:00:00 +0000
@@ -1,418 +0,0 @@
-# Copyright (C) 2004 - 2006 Aaron Bentley, Canonical Ltd
-# <aaron.bentley at utoronto.ca>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-
-class PatchSyntax(Exception):
-    def __init__(self, msg):
-        Exception.__init__(self, msg)
-
-
-class MalformedPatchHeader(PatchSyntax):
-    def __init__(self, desc, line):
-        self.desc = desc
-        self.line = line
-        msg = "Malformed patch header.  %s\n%r" % (self.desc, self.line)
-        PatchSyntax.__init__(self, msg)
-
-
-class MalformedHunkHeader(PatchSyntax):
-    def __init__(self, desc, line):
-        self.desc = desc
-        self.line = line
-        msg = "Malformed hunk header.  %s\n%r" % (self.desc, self.line)
-        PatchSyntax.__init__(self, msg)
-
-
-class MalformedLine(PatchSyntax):
-    def __init__(self, desc, line):
-        self.desc = desc
-        self.line = line
-        msg = "Malformed line.  %s\n%s" % (self.desc, self.line)
-        PatchSyntax.__init__(self, msg)
-
-
-class PatchConflict(Exception):
-    def __init__(self, line_no, orig_line, patch_line):
-        orig = orig_line.rstrip('\n')
-        patch = str(patch_line).rstrip('\n')
-        msg = 'Text contents mismatch at line %d.  Original has "%s",'\
-            ' but patch says it should be "%s"' % (line_no, orig, patch)
-        Exception.__init__(self, msg)
-
-
-def get_patch_names(iter_lines):
-    try:
-        line = iter_lines.next()
-        if not line.startswith("--- "):
-            raise MalformedPatchHeader("No orig name", line)
-        else:
-            tab = line.find("\t")
-            orig_name = line[4:tab].rstrip("\n")
-    except StopIteration:
-        raise MalformedPatchHeader("No orig line", "")
-    try:
-        line = iter_lines.next()
-        if not line.startswith("+++ "):
-            raise PatchSyntax("No mod name")
-        else:
-            tab = line.find("\t")
-            mod_name = line[4:tab].rstrip("\n")
-    except StopIteration:
-        raise MalformedPatchHeader("No mod line", "")
-    return (orig_name, mod_name)
-
-
-def parse_range(textrange):
-    """Parse a patch range, handling the "1" special-case
-
-    :param textrange: The text to parse
-    :type textrange: str
-    :return: the position and range, as a tuple
-    :rtype: (int, int)
-    """
-    tmp = textrange.split(',')
-    if len(tmp) == 1:
-        pos = tmp[0]
-        range = "1"
-    else:
-        (pos, range) = tmp
-    pos = int(pos)
-    range = int(range)
-    return (pos, range)
-
- 
-def hunk_from_header(line):
-    if not line.startswith("@@") or not line.endswith("@@\n") \
-        or not len(line) > 4:
-        raise MalformedHunkHeader("Does not start and end with @@.", line)
-    try:
-        (orig, mod) = line[3:-4].split(" ")
-    except Exception, e:
-        raise MalformedHunkHeader(str(e), line)
-    if not orig.startswith('-') or not mod.startswith('+'):
-        raise MalformedHunkHeader("Positions don't start with + or -.", line)
-    try:
-        (orig_pos, orig_range) = parse_range(orig[1:])
-        (mod_pos, mod_range) = parse_range(mod[1:])
-    except Exception, e:
-        raise MalformedHunkHeader(str(e), line)
-    if mod_range < 0 or orig_range < 0:
-        raise MalformedHunkHeader("Hunk range is negative", line)
-    return Hunk(orig_pos, orig_range, mod_pos, mod_range)
-
-
-class HunkLine:
-    def __init__(self, contents):
-        self.contents = contents
-
-    def get_str(self, leadchar):
-        if self.contents == "\n" and leadchar == " " and False:
-            return "\n"
-        if not self.contents.endswith('\n'):
-            terminator = '\n' + NO_NL
-        else:
-            terminator = ''
-        return leadchar + self.contents + terminator
-
-
-class ContextLine(HunkLine):
-    def __init__(self, contents):
-        HunkLine.__init__(self, contents)
-
-    def __str__(self):
-        return self.get_str(" ")
-
-
-class InsertLine(HunkLine):
-    def __init__(self, contents):
-        HunkLine.__init__(self, contents)
-
-    def __str__(self):
-        return self.get_str("+")
-
-
-class RemoveLine(HunkLine):
-    def __init__(self, contents):
-        HunkLine.__init__(self, contents)
-
-    def __str__(self):
-        return self.get_str("-")
-
-NO_NL = '\\ No newline at end of file\n'
-__pychecker__="no-returnvalues"
-
-def parse_line(line):
-    if line.startswith("\n"):
-        return ContextLine(line)
-    elif line.startswith(" "):
-        return ContextLine(line[1:])
-    elif line.startswith("+"):
-        return InsertLine(line[1:])
-    elif line.startswith("-"):
-        return RemoveLine(line[1:])
-    elif line == NO_NL:
-        return NO_NL
-    else:
-        raise MalformedLine("Unknown line type", line)
-__pychecker__=""
-
-
-class Hunk:
-    def __init__(self, orig_pos, orig_range, mod_pos, mod_range):
-        self.orig_pos = orig_pos
-        self.orig_range = orig_range
-        self.mod_pos = mod_pos
-        self.mod_range = mod_range
-        self.lines = []
-
-    def get_header(self):
-        return "@@ -%s +%s @@\n" % (self.range_str(self.orig_pos, 
-                                                   self.orig_range),
-                                    self.range_str(self.mod_pos, 
-                                                   self.mod_range))
-
-    def range_str(self, pos, range):
-        """Return a file range, special-casing for 1-line files.
-
-        :param pos: The position in the file
-        :type pos: int
-        :range: The range in the file
-        :type range: int
-        :return: a string in the format 1,4 except when range == pos == 1
-        """
-        if range == 1:
-            return "%i" % pos
-        else:
-            return "%i,%i" % (pos, range)
-
-    def __str__(self):
-        lines = [self.get_header()]
-        for line in self.lines:
-            lines.append(str(line))
-        return "".join(lines)
-
-    def shift_to_mod(self, pos):
-        if pos < self.orig_pos-1:
-            return 0
-        elif pos > self.orig_pos+self.orig_range:
-            return self.mod_range - self.orig_range
-        else:
-            return self.shift_to_mod_lines(pos)
-
-    def shift_to_mod_lines(self, pos):
-        assert (pos >= self.orig_pos-1 and pos <= self.orig_pos+self.orig_range)
-        position = self.orig_pos-1
-        shift = 0
-        for line in self.lines:
-            if isinstance(line, InsertLine):
-                shift += 1
-            elif isinstance(line, RemoveLine):
-                if position == pos:
-                    return None
-                shift -= 1
-                position += 1
-            elif isinstance(line, ContextLine):
-                position += 1
-            if position > pos:
-                break
-        return shift
-
-
-def iter_hunks(iter_lines):
-    hunk = None
-    for line in iter_lines:
-        if line == "\n":
-            if hunk is not None:
-                yield hunk
-                hunk = None
-            continue
-        if hunk is not None:
-            yield hunk
-        hunk = hunk_from_header(line)
-        orig_size = 0
-        mod_size = 0
-        while orig_size < hunk.orig_range or mod_size < hunk.mod_range:
-            hunk_line = parse_line(iter_lines.next())
-            hunk.lines.append(hunk_line)
-            if isinstance(hunk_line, (RemoveLine, ContextLine)):
-                orig_size += 1
-            if isinstance(hunk_line, (InsertLine, ContextLine)):
-                mod_size += 1
-    if hunk is not None:
-        yield hunk
-
-
-class Patch:
-    def __init__(self, oldname, newname):
-        self.oldname = oldname
-        self.newname = newname
-        self.hunks = []
-
-    def __str__(self):
-        ret = self.get_header() 
-        ret += "".join([str(h) for h in self.hunks])
-        return ret
-
-    def get_header(self):
-        return "--- %s\n+++ %s\n" % (self.oldname, self.newname)
-
-    def stats_str(self):
-        """Return a string of patch statistics"""
-        removes = 0
-        inserts = 0
-        for hunk in self.hunks:
-            for line in hunk.lines:
-                if isinstance(line, InsertLine):
-                     inserts+=1;
-                elif isinstance(line, RemoveLine):
-                     removes+=1;
-        return "%i inserts, %i removes in %i hunks" % \
-            (inserts, removes, len(self.hunks))
-
-    def pos_in_mod(self, position):
-        newpos = position
-        for hunk in self.hunks:
-            shift = hunk.shift_to_mod(position)
-            if shift is None:
-                return None
-            newpos += shift
-        return newpos
-            
-    def iter_inserted(self):
-        """Iteraties through inserted lines
-        
-        :return: Pair of line number, line
-        :rtype: iterator of (int, InsertLine)
-        """
-        for hunk in self.hunks:
-            pos = hunk.mod_pos - 1;
-            for line in hunk.lines:
-                if isinstance(line, InsertLine):
-                    yield (pos, line)
-                    pos += 1
-                if isinstance(line, ContextLine):
-                    pos += 1
-
-
-def parse_patch(iter_lines):
-    (orig_name, mod_name) = get_patch_names(iter_lines)
-    patch = Patch(orig_name, mod_name)
-    for hunk in iter_hunks(iter_lines):
-        patch.hunks.append(hunk)
-    return patch
-
-
-def iter_file_patch(iter_lines):
-    saved_lines = []
-    orig_range = 0
-    for line in iter_lines:
-        if line.startswith('=== ') or line.startswith('*** '):
-            continue
-        if line.startswith('#'):
-            continue
-        if line.startswith('diff '):
-            continue
-        elif orig_range > 0:
-            if line.startswith('-') or line.startswith(' '):
-                orig_range -= 1
-        elif line.startswith('--- '):
-            if len(saved_lines) > 0:
-                yield saved_lines
-            saved_lines = []
-        elif line.startswith('@@'):
-            hunk = hunk_from_header(line)
-            orig_range = hunk.orig_range
-        saved_lines.append(line)
-    if len(saved_lines) > 0:
-        yield saved_lines
-
-
-def iter_lines_handle_nl(iter_lines):
-    """
-    Iterates through lines, ensuring that lines that originally had no
-    terminating \n are produced without one.  This transformation may be
-    applied at any point up until hunk line parsing, and is safe to apply
-    repeatedly.
-    """
-    last_line = None
-    for line in iter_lines:
-        if line == NO_NL:
-            assert last_line.endswith('\n')
-            last_line = last_line[:-1]
-            line = None
-        if last_line is not None:
-            yield last_line
-        last_line = line
-    if last_line is not None:
-        yield last_line
-
-
-def parse_patches(iter_lines):
-    iter_lines = iter_lines_handle_nl(iter_lines)
-    return [parse_patch(f.__iter__()) for f in iter_file_patch(iter_lines)]
-
-
-def difference_index(atext, btext):
-    """Find the indext of the first character that differs between two texts
-
-    :param atext: The first text
-    :type atext: str
-    :param btext: The second text
-    :type str: str
-    :return: The index, or None if there are no differences within the range
-    :rtype: int or NoneType
-    """
-    length = len(atext)
-    if len(btext) < length:
-        length = len(btext)
-    for i in range(length):
-        if atext[i] != btext[i]:
-            return i;
-    return None
-
-
-def iter_patched(orig_lines, patch_lines):
-    """Iterate through a series of lines with a patch applied.
-    This handles a single file, and does exact, not fuzzy patching.
-    """
-    if orig_lines is not None:
-        orig_lines = orig_lines.__iter__()
-    seen_patch = []
-    patch_lines = iter_lines_handle_nl(patch_lines.__iter__())
-    get_patch_names(patch_lines)
-    line_no = 1
-    for hunk in iter_hunks(patch_lines):
-        while line_no < hunk.orig_pos:
-            orig_line = orig_lines.next()
-            yield orig_line
-            line_no += 1
-        for hunk_line in hunk.lines:
-            seen_patch.append(str(hunk_line))
-            if isinstance(hunk_line, InsertLine):
-                yield hunk_line.contents
-            elif isinstance(hunk_line, (ContextLine, RemoveLine)):
-                orig_line = orig_lines.next()
-                if orig_line != hunk_line.contents:
-                    raise PatchConflict(line_no, orig_line, "".join(seen_patch))
-                if isinstance(hunk_line, ContextLine):
-                    yield orig_line
-                else:
-                    assert isinstance(hunk_line, RemoveLine)
-                line_no += 1
-    if orig_lines is not None:
-        for line in orig_lines:
-            yield line



More information about the Pkg-bazaar-commits mailing list