#!@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"'
+#
'''
* use urllib iso ftplib
* more flexible build/ftp/patches/releases paths
-
- show only: --command='echo "latest is: %n-%v"'
'''
import ftplib
import operator
import os
import tempfile
+import shutil
import stat
import string
import sys
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:
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))
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 = []
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))
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))
'%n' : tar_name,
'%r' : release_dir,
'%v' : version_tuple_to_str (tar_version),
+ '%s' : symlink_name,
'%t' : tar_ball,
}
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
elif o == '--warranty' or o == '-w':
warranty ()
sys.exit (0)
+ else:
+ sys.exit (2)
if 1:
latest = find_latest (url)
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
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)