summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kastrup <dak@gnu.org>2013-09-28 16:34:22 +0200
committerDavid Kastrup <dak@gnu.org>2013-10-04 11:17:53 +0200
commitd88e58ad2abad118724ad2b7283bd91c1a825616 (patch)
tree584a9ac3c1fcebb2d63f1709ae441dd814804017
parentfe281ec28f6e6f2ee67fdc2239646589ff830fde (diff)
Issue 3584: Let convert-ly -d reflect last effective rather than last applied rule
-rw-r--r--Documentation/usage/updating.itely6
-rw-r--r--scripts/convert-ly.py20
2 files changed, 18 insertions, 8 deletions
diff --git a/Documentation/usage/updating.itely b/Documentation/usage/updating.itely
index 6d8e73216b..98d3fe16db 100644
--- a/Documentation/usage/updating.itely
+++ b/Documentation/usage/updating.itely
@@ -150,9 +150,9 @@ The following options can be given:
@table @code
@item -d,--diff-version-update
increase the @code{\version} string only if the file has actually
-been changed. Without this option (or when any conversion has
-changed the file), the version header reflects the last considered
-conversion rule.
+been changed. In that case, the version header will correspond to
+the version after the last actual change. Without that option,
+the version will reflect the last @emph{attempted} conversion.
@item -e,--edit
Apply the conversions direct to the input file, modifying it
diff --git a/scripts/convert-ly.py b/scripts/convert-ly.py
index 7acd2e29da..f330431542 100644
--- a/scripts/convert-ly.py
+++ b/scripts/convert-ly.py
@@ -182,13 +182,15 @@ def show_rules (file, from_version, to_version):
def do_conversion (str, from_version, to_version):
"""Apply conversions from FROM_VERSION to TO_VERSION. Return
-tuple (LAST,STR), with the last successful conversion and the resulting
-string."""
+tuple (LAST,LASTCHANGED,STR,ERRORS), with the last applied conversion,
+the last conversion resulting in a change, the resulting
+string and the number of errors."""
conv_list = get_conversions (from_version, to_version)
ly.progress (_ ("Applying conversion: "), newline = False)
last_conversion = None
+ last_change = None
errors = 0
try:
for x in conv_list:
@@ -197,8 +199,11 @@ string."""
ly.progress (', ', newline = False)
else:
ly.progress (tup_to_str (x[0]))
- str = x[1] (str)
+ newstr = x[1] (str)
last_conversion = x[0]
+ if (newstr != str):
+ last_change = last_conversion
+ str = newstr
except convertrules.FatalConversionError:
ly.error (_ ("Error while converting")
@@ -206,7 +211,7 @@ string."""
+ _ ("Stopping at last successful rule"))
errors += 1
- return (last_conversion, str, errors)
+ return (last_conversion, last_change, str, errors)
@@ -259,13 +264,16 @@ def do_one_file (infile_name):
raise InvalidVersion (".".join ([str(n) for n in from_version]))
- (last, result, errors) = do_conversion (input, from_version, to_version)
+ (last, last_change, result, errors) = \
+ do_conversion (input, from_version, to_version)
if global_options.force_current_version and \
(last is None or last == to_version):
last = str_to_tuple (program_version)
if last:
if global_options.diff_version_update:
+ # Note that last_change can be set even if the result is
+ # the same if two conversion rules cancelled out
if result == input:
# check the y in x.y.z (minor version number)
previous_stable = (last[0], 2*(last[1]/2), 0)
@@ -276,6 +284,8 @@ def do_one_file (infile_name):
else:
# make no (actual) change to the version number
last = from_version
+ else:
+ last = last_change
newversion = r'\version "%s"' % tup_to_str (last)
if lilypond_version_re.search (result):