chiark / gitweb /
Increment version number
[cura.git] / Cura / util / version.py
1 """
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.
4 """
5 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
6
7 import os
8 import sys
9 import urllib2
10 import platform
11 import subprocess
12 try:
13         from xml.etree import cElementTree as ElementTree
14 except:
15         from xml.etree import ElementTree
16
17 from Cura.util import resources
18
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"))
23         else:
24                 versionFile = os.path.abspath(os.path.join(os.path.split(os.path.abspath(__file__))[0], "../version"))
25
26         if getGitVersion:
27                 try:
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()
30
31                         if gitProcess.returncode == 0:
32                                 return stdoutdata
33                 except:
34                         pass
35
36         gitHeadFile = gitPath + "/.git/refs/heads/master"
37         if os.path.isfile(gitHeadFile):
38                 if not getGitVersion:
39                         return "dev"
40                 f = open(gitHeadFile, "r")
41                 version = f.readline()
42                 f.close()
43                 return version.strip()
44         if os.path.exists(versionFile):
45                 f = open(versionFile, "r")
46                 version = f.readline()
47                 f.close()
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()
53                 f.close()
54                 return version.strip()
55         return "UNKNOWN" #No idea what the version is. TODO:Tell the user.
56
57 def isDevVersion():
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)
61
62 def checkForNewerVersion():
63         if isDevVersion():
64                 return None
65         try:
66                 updateBaseURL = ''
67                 localVersion = map(int, getVersion(False).split('.'))
68                 while len(localVersion) < 3:
69                         localVersion += [1]
70                 latestFile = urllib2.urlopen("%s/latest.xml" % (updateBaseURL))
71                 latestXml = latestFile.read()
72                 latestFile.close()
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)
81         except:
82                 #print sys.exc_info()
83                 return None
84         return None
85
86 if __name__ == '__main__':
87         print(getVersion())