immerrr avatar immerrr committed 75eff35

hunk.getFromToLine(): fix for from-/tolen = 0, corresponding line start should be decremented in such cases

Comments (0)

Files changed (1)

crecord/crpatch.py

     def getFromToLine(self):
         # calculate the number of removed lines converted to context lines
         removedConvertedToContext = self.originalremoved - self.removed
-        delta = len(self.before) + len(self.after) + removedConvertedToContext
+
+        contextLen = (len(self.before) + len(self.after) +
+                      removedConvertedToContext)
         if self.after and self.after[-1] == '\\ No newline at end of file\n':
-            delta -= 1
-        fromlen = delta + self.removed
-        tolen = delta + self.added
+            contextLen -= 1
+        fromlen = contextLen + self.removed
+        tolen = contextLen + self.added
+
+        # Diffutils manual, section "2.2.2.2 Detailed Description of Unified
+        # Format": "An empty hunk is considered to end at the line that
+        # precedes the hunk."
+        #
+        # So, if either of hunks is empty, decrease its line start. --immerrr
+        fromline,toline = self.fromline, self.toline
+        if fromlen == 0:
+            fromline -= 1
+        if tolen == 0:
+            toline -= 1
+
         fromToLine = '@@ -%d,%d +%d,%d @@%s\n' % (
-            self.fromline, fromlen, self.toline, tolen,
+            fromline, fromlen, toline, tolen,
             self.proc and (' ' + self.proc))
         return fromToLine
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.