changeset 13789:7e5031180c0f

transplant: fix crash if filter script munges log file This fixes an UnboundLocalError crash if the filter script removes the 'User' or 'Date' lines from the log file.
author Luke Plant <L.Plant.98@cantab.net>
date Mon, 28 Mar 2011 21:17:32 +0100
parents 307c72686eb0
children c0ed76b5056d
files hgext/transplant.py tests/test-transplant.t
diffstat 2 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/transplant.py	Mon Mar 28 11:18:56 2011 -0500
+++ b/hgext/transplant.py	Mon Mar 28 21:17:32 2011 +0100
@@ -346,6 +346,8 @@
         message = []
         node = revlog.nullid
         inmsg = False
+        user = None
+        date = None
         for line in fp.read().splitlines():
             if inmsg:
                 message.append(line)
@@ -360,6 +362,8 @@
             elif not line.startswith('# '):
                 inmsg = True
                 message.append(line)
+        if None in (user, date):
+            raise util.Abort(_("filter produced garbled log file"))
         return (node, user, date, '\n'.join(message), parents)
 
     def log(self, user, date, message, p1, p2, merge=False):
--- a/tests/test-transplant.t	Mon Mar 28 11:18:56 2011 -0500
+++ b/tests/test-transplant.t	Mon Mar 28 21:17:32 2011 +0100
@@ -363,6 +363,19 @@
   Transplant from rev 17ab29e464c6ca53e329470efe2a9918ac617a6f
   $ cd ..
 
+test transplant with filter handles invalid changelog
+
+  $ hg init filter-invalid-log
+  $ cd filter-invalid-log
+  $ cat <<'EOF' >test-filter-invalid-log
+  > #!/bin/sh
+  > echo "" > $1
+  > EOF
+  $ chmod +x test-filter-invalid-log
+  $ hg transplant -s ../t --filter ./test-filter-invalid-log 0
+  filtering * (glob)
+  abort: filter failed
+  [255]
 
 test with a win32ext like setup (differing EOLs)