def natural_sort_key(val):
return [ (int(c) if c.isdigit() else c) for c in re.split('([0-9]+)', val) ]
+def get_non_digit_prefix(val):
+ return re.match('[^0-9]*', val).group(0)
+
# Fetch updates from git
class Git:
-
- def __init__(self, folder, url, commit):
+ def __init__(self, folder, config):
self.folder = os.path.abspath(folder)
- self.url = url
- self.commit = commit
+ self.url = config['url']
+ self.commit = config['version']
class _ProgressPrinter(git.remote.RemoteProgress):
def update(self, op_code, cur_count, max_count=None, message=''):
def version(self):
repo = git.Repo(self.folder)
v = repo.git.describe()
- if v.startswith('v'): v = v[1:]
- return v
+ return v[len(get_non_digit_prefix(v)):] # remove the non-digit prefix from v (so that it starts with a number)
def checkVersions(self):
+ self.update(mode = MODE_FETCH)
repo = git.Repo(self.folder)
- # get tag for current commit, if any
- commit = repo.commit(self.commit)
- commitTag = filter(lambda t: t.commit == commit, repo.tags)
- if not commitTag:
- print "Version is not a tag"
- return
- currentVersion = str(commitTag[0])
- # get sorted list of tag names
+ currentVersion = repo.git.describe()
+ # get sorted list of tag names with the same non-digit prefix and higher version number
tags = map(str, repo.tags)
- tags = filter(lambda t: natural_sort_key(t) > natural_sort_key(currentVersion), tags)
+ tags = filter(lambda t: get_non_digit_prefix(t) == get_non_digit_prefix(currentVersion) and natural_sort_key(t) > natural_sort_key(currentVersion), tags)
if not tags: return
tags.sort(key = natural_sort_key)
- print "Versions newer than "+self.commit+" available:"
+ print "Versions newer than "+currentVersion+" available:"
print tags
# Fetch updates via SVN