]> git.donarmstrong.com Git - lilypond.git/commitdiff
Makelsr: handle file moves and deletions and tag changes in local update
authorJohn Mandereau <john.mandereau@gmail.com>
Wed, 18 Jul 2012 21:47:54 +0000 (23:47 +0200)
committerJohn Mandereau <john.mandereau@gmail.com>
Wed, 18 Jul 2012 21:47:54 +0000 (23:47 +0200)
scripts/auxiliar/makelsr.py

index 24dd0d900f2c12f5cca630571fd2cf676e8a43bd..01dd903e8c8c3ab65b93e44f95beecf1055ceb3f 100755 (executable)
@@ -35,13 +35,14 @@ LY_HEADER_LSR = '''%% DO NOT EDIT this file manually; it is automatically
 %% This file is in the public domain.
 '''
 
+new_lys_marker = "%% generated from %s" % new_lys
 LY_HEADER_NEW = '''%% DO NOT EDIT this file manually; it is automatically
-%% generated from %s
+%s
 %% Make any changes in Documentation/snippets/new/
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-''' % new_lys
+''' % new_lys_marker
 
 options_parser = optparse.OptionParser (
     description = "makelsr - update snippets directory from LSR",
@@ -149,7 +150,6 @@ def exit_with_usage (n=0):
     options_parser.print_help (sys.stderr)
     sys.exit (n)
 
-tags=[]
 if len (args):
     in_dir = args[0]
     if not (os.path.isdir (in_dir)):
@@ -158,10 +158,12 @@ if len (args):
     if len (args) > 1:
         exit_with_usage (2)
     tags = os.listdir (in_dir)
-    ## Make sure all users get the same ordering of tags
-    tags.sort()
 else:
-    in_dir = '.'
+    in_dir = ''
+    tags = [os.path.splitext (os.path.basename (f))[0]
+            for f in glob.glob (os.path.join (lys_from_lsr, '*.snippet-list'))]
+## Make sure all users get the same ordering of tags
+tags.sort ()
 
 if options.convert_ly == "LY_PATH/convert-ly":
     convert_ly = os.path.join (options.bin_path, "convert-ly")
@@ -211,7 +213,7 @@ def add_tags (ly_code, tags):
     return begin_header_re.sub ('\\g<0>\n  lsrtags = "' + tags + '"\n',
                                 ly_code, 1)
 
-# for snippets from input/new, add message for earliest working version
+# for snippets from Documentation/snippets/new, add message for earliest working version
 def add_version (ly_code):
     return '''%% Note: this file works from version ''' + \
         ly_new_version_re.search (ly_code).group (1) + '\n'
@@ -291,34 +293,42 @@ def read_source (src):
         if m:
             file_tags = [tag.strip() for tag in m.group (1). split(',')]
             s[basename] = (src, file_tags)
-            [l[tag].add (basename) for tag in file_tags if tag in tags]
+            for tag in file_tags:
+                if tag in tags:
+                    l[tag].add (basename)
+                else:
+                    l[tag] = set ((basename,))
         else:
             notags_files.append (f)
     return s, l
 
 
-def dump_file_list (file, file_list, update=False):
-    if update:
-        old_list = set (open (file, 'r').read ().splitlines ())
-        old_list.update (file_list)
-        new_list = list (old_list)
-    else:
-        new_list = file_list
+def dump_file_list (file, file_list):
+    new_list = file_list
     f = open (file, 'w')
     f.write ('\n'.join (sorted (new_list)) + '\n')
 
-## clean out existing lys and generated files - but only when we're
-## completely recreating them from the tarball.  Otherwise
-## tags will be empty and so we can use this to skip this step
-
-if len(tags) > 0:
+## clean out existing lys and generated files - but when we're
+## not recreating all of them from the tarball don't delete
+## snippets that came from LSR.
+if in_dir:
     map (os.remove, glob.glob (os.path.join (lys_from_lsr, '*.ly')) +
         glob.glob (os.path.join (lys_from_lsr, '*.snippet-list')))
+else:
+    map (os.remove, glob.glob (os.path.join (lys_from_lsr, '*.snippet-list')))
+    for f in glob.glob (os.path.join (lys_from_lsr, '*.ly')):
+        if new_lys_marker in open (f).read ():
+            os.remove (f)
+
+if in_dir:
+    # read LSR source where tags are defined by subdirs
+    snippets, tag_lists = read_source_with_dirs (in_dir)
+else:
+    snippets, tag_lists = read_source (lys_from_lsr)
+    # in local update we're only interested in retrieving tags
+    snippets = {}
 
-# read LSR source where tags are defined by subdirs
-snippets, tag_lists = read_source_with_dirs (in_dir)
-
-# read input/new where tags are directly defined
+# read Documentation/snippets/new where tags are directly defined
 s, l = read_source (new_lys)
 snippets.update (s)
 for t in tags:
@@ -328,7 +338,7 @@ for (name, (srcdir, file_tags)) in snippets.items ():
     copy_ly (srcdir, name, file_tags)
 for (tag, file_set) in tag_lists.items ():
     dump_file_list (os.path.join (lys_from_lsr, tag + '.snippet-list'),
-                    file_set, update=not(in_dir))
+                    file_set)
 if unconverted:
     sys.stderr.write ('These files could not be converted successfully by convert-ly:\n')
     sys.stderr.write ('\n'.join (unconverted) + '\n\n')