[PATCH 01 of 11] record: abort on malformed patches instead of crashing
Mads Kiilerich
mads at kiilerich.com
Sun Apr 14 20:14:16 CDT 2013
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1365699813 -7200
# Node ID b462a1363e20c167775d252f31d44532b73a8193
# Parent 6891e361bec6831ada94b7c2b49950769aba7be9
record: abort on malformed patches instead of crashing
diff --git a/hgext/record.py b/hgext/record.py
--- a/hgext/record.py
+++ b/hgext/record.py
@@ -531,7 +531,11 @@ def dorecord(ui, repo, commitfunc, cmdsu
fp.seek(0)
# 1. filter patch, so we have intending-to apply subset of it
- chunks = filterpatch(ui, parsepatch(fp))
+ try:
+ chunks = filterpatch(ui, parsepatch(fp))
+ except patch.PatchError, err:
+ raise util.Abort(_('error parsing patch: %s') % err)
+
del fp
contenders = set()
diff --git a/tests/test-record.t b/tests/test-record.t
--- a/tests/test-record.t
+++ b/tests/test-record.t
@@ -1176,6 +1176,53 @@ Invalid patch
+That change will not be committed
+That is the second line
+That line has been added
+
+Malformed patch - error handling
+
+ $ cat > editor.sh << '__EOF__'
+ > sed -e '/^@/p' "$1" > tmp
+ > mv tmp "$1"
+ > __EOF__
+ $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
+ > y
+ > e
+ > EOF
+ diff --git a/editedfile b/editedfile
+ 1 hunks, 3 lines changed
+ examine changes to 'editedfile'? [Ynesfdaq?]
+ @@ -1,3 +1,3 @@
+ -This is the first line
+ -This change will be committed
+ -This is the third line
+ +This change will not be committed
+ +This is the second line
+ +This line has been added
+ record this change to 'editedfile'? [Ynesfdaq?]
+ abort: error parsing patch: unhandled transition: range -> range
+ [255]
+
+ $ cat > editor.sh << '__EOF__'
+ > sed -e '/^@/iother' "$1" > tmp
+ > mv tmp "$1"
+ > __EOF__
+ $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg record <<EOF
+ > y
+ > e
+ > EOF
+ diff --git a/editedfile b/editedfile
+ 1 hunks, 3 lines changed
+ examine changes to 'editedfile'? [Ynesfdaq?]
+ @@ -1,3 +1,3 @@
+ -This is the first line
+ -This change will be committed
+ -This is the third line
+ +This change will not be committed
+ +This is the second line
+ +This line has been added
+ record this change to 'editedfile'? [Ynesfdaq?]
+ abort: error parsing patch: unknown patch content: 'other\n'
+ [255]
+
$ hg up -C
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
More information about the Mercurial-devel
mailing list