From d88e58ad2abad118724ad2b7283bd91c1a825616 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sat, 28 Sep 2013 16:34:22 +0200 Subject: [PATCH] Issue 3584: Let convert-ly -d reflect last effective rather than last applied rule --- Documentation/usage/updating.itely | 6 +++--- scripts/convert-ly.py | 20 +++++++++++++++----- 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): -- 2.39.2