]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/update-lily.py
* GNUmakefile.in: config.h message fix.
[lilypond.git] / scripts / update-lily.py
index e1a51d4a3c5a21d0aa8ae2813286956bb2ed6283..224601e3edd779e513843fb280100146db7df806 100644 (file)
@@ -1,11 +1,14 @@
 #!@PYTHON@
-#
 # update-lily.py -- lilypond autobuilder
 # 
 # source file of the GNU LilyPond music typesetter
 #
 # download and rebuild latest lilypond or from specified url
 #
+# To show latest version do:
+#
+#     update-lily --command='echo "Latest is: %n-%v"'
+#
 
 
 '''
@@ -14,9 +17,7 @@ TODO:
     * use urllib iso ftplib
 
     * more flexible build/ftp/patches/releases paths
-
     
-    show only: --command='echo "latest is: %n-%v"'
 '''
 
 import ftplib
@@ -26,6 +27,7 @@ import re
 import operator
 import os
 import tempfile
+import shutil
 import stat
 import string
 import sys
@@ -50,12 +52,12 @@ url = 'ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/lilypond-*.tar.gz'
 build_root = os.path.join (os.environ ['HOME'], 'usr', 'src')
 release_dir = build_root + '/releases'
 patch_dir = build_root + '/patches'
+symlink_name = ''
 
-
-
+localedir = '@localedir@'
 try:
        import gettext
-       gettext.bindtextdomain ('lilypond', '@localedir@')
+       gettext.bindtextdomain ('lilypond', localedir)
        gettext.textdomain ('lilypond')
        _ = gettext.gettext
 except:
@@ -111,7 +113,7 @@ except:
                return s
 
 if program_version == '@' + 'TOPLEVEL_VERSION' + '@':
-       program_version = '1.5.17'
+       program_version = '1.7.0'
 
 def identify ():
        sys.stdout.write ('%s (GNU LilyPond) %s\n' % (program_name, program_version))
@@ -283,12 +285,13 @@ tar xzf %r/%t &&
 rm -f building &&
 ln -s %n-%v building &&
 cd %n-%v &&
-./configure --prefix=$HOME/usr && make all web
+./configure --prefix=$(pwd) && make all web
 ) >> %n-%v/log.txt 2>&1 &&
-rm -f %n &&
-ln -s %n-%v %n
+rm -f %s &&
+ln -s %n-%v %s
 '''
 
+### URL lib
 
 def list_file (user, passwd, host, dir, file):
        match = []
@@ -328,31 +331,6 @@ def list_url (url):
        s = "list_%s ('%s', '%s', '%s', '%s', '%s')" % split_url (url)
        return eval (s)
 
-def version_tuple_to_str (t):
-       if t[3]:
-               my = '.%s%d' % (t[3], t[4])
-       else:
-               my = ''
-       return ('%d.%d.%d' % t[0:3]) + my
-
-def version_str_to_tuple (s):
-       t = string.split (s, '.')
-       if len (t) >= 4:
-               my_name = t[3][:-1]
-               my_number = string.atoi (t[3][-1])
-       else:
-               my_name = None
-               my_number = None
-       return (string.atoi (t[0]), string.atoi (t[1]), string.atoi (t[2]),
-               my_name, my_number)
-
-def split_package (p):
-       m = re.match ('(.*)-([0-9]*.*).tar.gz', p)
-       return (m.group (1), version_str_to_tuple (m.group (2)))
-
-def join_package (t):
-       return t[0] + '-' + version_tuple_to_str (t[1])
-
 def copy_file (user, passwd, host, dir, file):
        os.system ('cp %s/%s .' % (dir, file))
 
@@ -385,14 +363,87 @@ def copy_ftp (user, passwd, host, dir, file):
                ftp.close ()
        return list
        
-
-
 def copy_url (url, dir):
        os.chdir (dir)
        s = "copy_%s ('%s', '%s', '%s', '%s', '%s')" % split_url (url)
        eval (s)
 
+### End URL lib
 
+def version_tuple_to_str (t):
+       if t[3]:
+               my = '.%s%d' % (t[3], t[4])
+       else:
+               my = ''
+       return ('%d.%d.%d' % t[0:3]) + my
+
+def version_str_to_tuple (s):
+       t = string.split (s, '.')
+       if len (t) >= 4:
+               my_name = t[3][:-1]
+               my_number = string.atoi (t[3][-1])
+       else:
+               my_name = None
+               my_number = None
+       return (string.atoi (t[0]), string.atoi (t[1]), string.atoi (t[2]),
+               my_name, my_number)
+
+def next_version (t):
+       #print 'tup: %s' % `t`
+       l = list (t)
+       if len (l) >= 4:
+               # if l[3]:  # 1.0.0.my1 -> 1.0.0.my1
+               if l[4]:  # 1.0.0.my1 -> 1.0.1
+                       l[4] += 1
+               else:
+                       l[3] = l[4] = ''
+                       l[2] += 1
+       else:
+               l[2] += 1
+
+       return tuple (l)
+
+def prev_version (t):
+       #print 'tup: %s' % `t`
+       l = list (t)
+       if len (l) >= 4:
+               if l[4]: # 1.0.0.my1 -> 1.0.0
+                       if l[4] == 1:
+                               l[3] = l[4] = ''
+                       else:
+                               l[4] -= 1
+               # if l[3]: # 1.0.0.my1 -> 1.0.0.my0
+               #       l[4] -= 1
+               else:
+                       l[3] = l[4] = ''
+                       if l[2]:
+                               l[2] -= 1
+                       elif l[1]:
+                               l[1] -= 1
+                       else:
+                               l[0] -= 1
+       else:
+                       if l[2]:
+                               l[2] -= 1
+                       elif l[1]:
+                               l[1] -= 1
+                       else:
+                               l[0] -= 1
+               
+       return tuple (l)
+
+def split_package (p):
+       m = re.match ('(.*)-([0-9]*.*?)(.tar.gz)?$', p)
+       return (m.group (1), version_str_to_tuple (m.group (2)))
+
+def join_package (t):
+       return t[0] + '-' + version_tuple_to_str (t[1])
+
+def diff_name (p):
+       t = split_package (p)
+       return '%s-%s-%s' % (t[0], version_tuple_to_str (prev_version (t[1])),
+                            version_tuple_to_str (t[1]))
+       
 def find_latest (url):
        progress (_ ("Listing `%s'...") % url)
        list = map (split_package, list_url (url))
@@ -408,6 +459,7 @@ def build (p):
                '%n' : tar_name,
                '%r' : release_dir,
                '%v' : version_tuple_to_str (tar_version),
+               '%s' : symlink_name,
                '%t' : tar_ball,
                }
 
@@ -438,7 +490,7 @@ for opt in options:
        elif o == '--help' or o == '-h':
                help ()
                sys.exit (0)
-       elif o == '--buid-root' or o == '-b':
+       elif o == '--build-root' or o == '-b':
                build_root = a
        elif o == '--command' or o == '-c':
                build_command = a
@@ -456,6 +508,8 @@ for opt in options:
        elif o == '--warranty' or o == '-w':
                warranty ()
                sys.exit (0)
+       else:
+               sys.exit (2)
                
 if 1:
        latest = find_latest (url)
@@ -466,13 +520,20 @@ if 1:
                progress (_ ("relax, %s is up to date" % package_name))
                sys.exit (0)
 
+       if not symlink_name:
+               symlink_name = string.split (url, '/')[-2]
+               
        get_base = url[:string.rindex (url, '/')] + '/'
        if os.path.isdir (patch_dir):
                os.chdir (patch_dir)
-               if not os.path.isfile (latest + '.diff.gz'):
-                       get = get_base + latest + '.diff.gz'
+               latest_diff = diff_name (latest)
+               if not os.path.isfile (latest_diff + '.diff.gz'):
+                       get = get_base + latest_diff + '.diff.gz'
                        progress (_ ("Fetching `%s'...") % get)
-                       copy_url (get, '.')
+                       try:
+                               copy_url (get, '.')
+                       except:
+                               warning (_ ("can't open: %s") % get)
 
        if not os.path.isdir (build_root):
                build_root = temp_dir
@@ -504,7 +565,7 @@ if 1:
                sys.exit (1)
                
        os.chdir (original_dir)
-       if release_dir != temp_dir:
+       if release_dir != temp_dir and os.path.isdir (temp_dir):
                cleanup_temp ()
        sys.exit (0)