help_summary = (
_ ('''Update LilyPond input to newer version. By default, update from the
version taken from the \\version command, to the current LilyPond version.''')
++ "\n"
++ _ ("If FILE is `-', read from standard input.")
++ "\n\n"
+ _ ("Examples:")
+ '''
$ convert-ly -e old.ly
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 = ()
+ last_conversion = None
+ last_change = None
errors = 0
try:
- if not conv_list:
- last_conversion = to_version
for x in conv_list:
if x != conv_list[-1]:
ly.progress (tup_to_str (x[0]), newline = False)
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")
+ _ ("Stopping at last successful rule"))
errors += 1
- return (last_conversion, str, errors)
+ return (last_conversion, last_change, str, errors)
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.force_current_version and last == to_version:
- last = str_to_tuple (program_version)
-
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)
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):
elif not global_options.skip_version_add:
result = newversion + '\n' + result
- ly.progress ('\n')
-
- if global_options.edit:
- try:
- os.remove(infile_name + '~')
- except:
- pass
- os.rename (infile_name, infile_name + '~')
- outfile = open (infile_name, 'w')
- else:
- outfile = sys.stdout
+ ly.progress ('\n')
+ if global_options.edit:
+ try:
+ os.remove (infile_name + '~')
+ except:
+ pass
+ os.rename (infile_name, infile_name + '~')
+ outfile = open (infile_name, 'w')
+ else:
+ outfile = sys.stdout
- outfile.write (result)
-
+ outfile.write (result)
+
sys.stderr.flush ()
return errors
errors = 0
for f in files:
- if f == '-':
- continue
f = f.decode (sys.stdin.encoding or "utf-8")
- if not os.path.isfile (f):
+ if f == '-':
+ f = ''
+ elif not os.path.isfile (f):
ly.error (_ (u"%s: Unable to open file") % f)
errors += 1
continue