[PATCH] cvsps: cvs log loop uses lookahead to avoid misleading text

David Champion dgc at uchicago.edu
Sun Jan 4 01:45:09 CST 2009


# HG changeset patch
# User David Champion <dgc at uchicago.edu>
# Date 1231054992 21600
# Node ID 3023648e50bf3ab853eca67ea9e2eee91d046d00
# Parent  016a7319e76ba15474a89199657c5aa39bd3b339
cvsps: cvs log loop uses lookahead to avoid misleading text

Changes cvsps.py's cvs log reader to use a one-line lookahead, so
that possibly misleading log messages can be disambiguated.  In
particular I have past committers who used cvs log's 28-character
row of hyphens within commit messages; this throws cvsps and disrupts
conversion.  The only alternative in this case is to edit the cvs
,v file by hand, which bloodies mercurial's "don't change history"
principle.

diff -r 016a7319e76b -r 3023648e50bf hgext/convert/cvsps.py
--- a/hgext/convert/cvsps.py	Wed Dec 31 18:00:35 2008 -0600
+++ b/hgext/convert/cvsps.py	Sun Jan 04 01:43:12 2009 -0600
@@ -191,7 +191,13 @@
     ui.note(_("running %s\n") % (' '.join(cmd)))
     ui.debug(_("prefix=%r directory=%r root=%r\n") % (prefix, directory, root))
 
-    for line in util.popen(' '.join(cmd)):
+    pfp = util.popen(' '.join(cmd))
+    peek = pfp.readline()
+    while True:
+        line = peek
+        if line == '':
+            break
+        peek = pfp.readline()
         if line.endswith('\n'):
             line = line[:-1]
         #ui.debug('state=%d line=%r\n' % (state, line))
@@ -312,7 +318,7 @@
                 e.branches = [tuple([int(y) for y in x.strip().split('.')])
                                 for x in m.group(1).split(';')]
                 state = 8
-            elif re_31.match(line):
+            elif re_31.match(line) and re_50.match(peek):
                 state = 5
                 store = True
             elif re_32.match(line):


More information about the Mercurial-devel mailing list