summaryrefslogtreecommitdiff
path: root/git_crecord
diff options
context:
space:
mode:
authorAndrej Shadura <andrew@shadura.me>2018-07-15 11:24:30 +0200
committerAndrej Shadura <andrew@shadura.me>2018-07-15 11:24:30 +0200
commitc7d26ea2314a9a2942e6007d97f05c1a7c70210f (patch)
treebccb15df46246f7b6b553df12a87eec6fa9acb19 /git_crecord
parentf820def5950d9139e96a266ff0a2054b1b6b51b2 (diff)
crpatch: add reversehunks and unapplyhunks
Import reversehunks from Mercurial to produce a hunk with applying in an opposite direction, and unapplyhunks which produces a hunk keeping all applied changes and instead unapplying the rest.
Diffstat (limited to 'git_crecord')
-rw-r--r--git_crecord/crpatch.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/git_crecord/crpatch.py b/git_crecord/crpatch.py
index f96cc20..00626aa 100644
--- a/git_crecord/crpatch.py
+++ b/git_crecord/crpatch.py
@@ -511,6 +511,23 @@ class uihunk(patchnode):
fp.write(''.join(self.before + hunklinelist + self.after))
+ def reversehunks(self):
+ m = {'+': '-', '-': '+', '\\': '\\'}
+ hunk = ['%s%s' % (m[l.prettystr()[0:1]], l.prettystr()[1:]) for l in self.changedlines if l.applied]
+ return uihunk(self.header, self.fromline, self.toline, self.proc, self.before, hunk, self.after)
+
+ def unapplyhunks(self):
+ m = {'+': '-', '-': '+', '\\': '\\'}
+ hunklinelist = []
+ for changedline in self.changedlines:
+ changedlinestr = changedline.prettystr()
+ if not changedline.applied:
+ hunklinelist.append('%s%s' % (m[changedlinestr[0]], changedlinestr[1:]))
+ elif changedlinestr[0] == "+":
+ hunklinelist.append(" " + changedlinestr[1:])
+ return uihunk(self.header, self.fromline, self.toline, self.proc, self.before, hunklinelist, self.after)
+
+
pretty = write
def filename(self):