2 The version utility module is used to get the current Cura version, and check for updates.
3 It can also see if we are running a development build of Cura.
5 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
13 from xml.etree import cElementTree as ElementTree
15 from xml.etree import ElementTree
17 from Cura.util import resources
19 def getVersion(getGitVersion = True):
20 gitPath = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../.."))
21 if hasattr(sys, 'frozen'):
22 versionFile = os.path.normpath(os.path.join(resources.resourceBasePath, "version"))
24 versionFile = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../version"))
28 gitProcess = subprocess.Popen(args = "git show -s --pretty=format:%H", shell = True, cwd = gitPath, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
29 (stdoutdata, stderrdata) = gitProcess.communicate()
31 if gitProcess.returncode == 0:
36 gitHeadFile = gitPath + "/.git/refs/heads/master"
37 if os.path.isfile(gitHeadFile):
40 f = open(gitHeadFile, "r")
41 version = f.readline()
43 return version.strip()
44 if os.path.exists(versionFile):
45 f = open(versionFile, "r")
46 version = f.readline()
48 return version.strip()
49 versionFile = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../../version"))
50 if os.path.exists(versionFile):
51 f = open(versionFile, "r")
52 version = f.readline()
54 return version.strip()
55 return "UNKNOWN" #No idea what the version is. TODO:Tell the user.
58 gitPath = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../../.git"))
59 hgPath = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../../.hg"))
60 return os.path.exists(gitPath) or os.path.exists(hgPath)
62 def checkForNewerVersion():
67 localVersion = map(int, getVersion(False).split('.'))
68 while len(localVersion) < 3:
70 latestFile = urllib2.urlopen("%s/latest.xml" % (updateBaseURL))
71 latestXml = latestFile.read()
73 xmlTree = ElementTree.fromstring(latestXml)
74 for release in xmlTree.iter('release'):
75 os = str(release.attrib['os'])
76 version = [int(release.attrib['major']), int(release.attrib['minor']), int(release.attrib['revision'])]
77 filename = release.find("filename").text
78 if platform.system() == os:
79 if version > localVersion:
80 return "%s/current/%s" % (updateBaseURL, filename)
86 if __name__ == '__main__':