root / snf-common / synnefo / util / version.py @ ef67f714
History | View | Annotate | Download (3.6 kB)
1 | 07d104d8 | Kostas Papadimitriou | import pkg_resources |
---|---|---|---|
2 | 07d104d8 | Kostas Papadimitriou | import os |
3 | 9b59a383 | Kostas Papadimitriou | import pprint |
4 | 0fb30b27 | Kostas Papadimitriou | import re |
5 | 07d104d8 | Kostas Papadimitriou | |
6 | 07d104d8 | Kostas Papadimitriou | def get_dist_from_module(modname): |
7 | 07d104d8 | Kostas Papadimitriou | pkgroot = pkg_resources.get_provider(modname).egg_root |
8 | 07d104d8 | Kostas Papadimitriou | return list(pkg_resources.find_distributions(pkgroot))[0] |
9 | 07d104d8 | Kostas Papadimitriou | |
10 | 07d104d8 | Kostas Papadimitriou | |
11 | 07d104d8 | Kostas Papadimitriou | def get_dist(dist_name): |
12 | 07d104d8 | Kostas Papadimitriou | return pkg_resources.get_distribution(dist_name)
|
13 | 07d104d8 | Kostas Papadimitriou | |
14 | 07d104d8 | Kostas Papadimitriou | |
15 | 07d104d8 | Kostas Papadimitriou | def get_dist_version(dist_name): |
16 | 07d104d8 | Kostas Papadimitriou | """
|
17 | 07d104d8 | Kostas Papadimitriou | Get the version for the specified distribution name
|
18 | 07d104d8 | Kostas Papadimitriou | """
|
19 | 07d104d8 | Kostas Papadimitriou | try:
|
20 | 07d104d8 | Kostas Papadimitriou | return get_dist(dist_name).version
|
21 | 07d104d8 | Kostas Papadimitriou | except Exception, e: |
22 | 07d104d8 | Kostas Papadimitriou | return 'unknown' |
23 | 07d104d8 | Kostas Papadimitriou | |
24 | 07d104d8 | Kostas Papadimitriou | |
25 | 07d104d8 | Kostas Papadimitriou | def get_component_version(modname): |
26 | 07d104d8 | Kostas Papadimitriou | """
|
27 | 07d104d8 | Kostas Papadimitriou | Return the version of a synnefo module/package based on its
|
28 | 07d104d8 | Kostas Papadimitriou | corresponding distributed package version
|
29 | 07d104d8 | Kostas Papadimitriou | """
|
30 | 07d104d8 | Kostas Papadimitriou | try:
|
31 | 84e75610 | Kostas Papadimitriou | try:
|
32 | 84e75610 | Kostas Papadimitriou | return __import__('synnefo.versions.%s' % modname, |
33 | 07d104d8 | Kostas Papadimitriou | fromlist=['synnefo.versions']).__version__
|
34 | 84e75610 | Kostas Papadimitriou | except ImportError: |
35 | 84e75610 | Kostas Papadimitriou | return vcs_version()
|
36 | 07d104d8 | Kostas Papadimitriou | except Exception, e: |
37 | 07d104d8 | Kostas Papadimitriou | return 'unknown' |
38 | 07d104d8 | Kostas Papadimitriou | |
39 | 07d104d8 | Kostas Papadimitriou | |
40 | 07d104d8 | Kostas Papadimitriou | def vcs_info(): |
41 | 07d104d8 | Kostas Papadimitriou | """
|
42 | 0fb30b27 | Kostas Papadimitriou | Return current git HEAD commit information.
|
43 | 0fb30b27 | Kostas Papadimitriou |
|
44 | 0fb30b27 | Kostas Papadimitriou | Returns a tuple containing
|
45 | 0fb30b27 | Kostas Papadimitriou | - branch name
|
46 | 0fb30b27 | Kostas Papadimitriou | - commit id
|
47 | 0fb30b27 | Kostas Papadimitriou | - commit index
|
48 | 0fb30b27 | Kostas Papadimitriou | - git describe output
|
49 | 07d104d8 | Kostas Papadimitriou | """
|
50 | 07d104d8 | Kostas Papadimitriou | import subprocess |
51 | 07d104d8 | Kostas Papadimitriou | callgit = lambda(cmd): subprocess.Popen(
|
52 | 07d104d8 | Kostas Papadimitriou | ['/bin/sh', '-c', cmd], |
53 | 84e75610 | Kostas Papadimitriou | stdout=subprocess.PIPE, |
54 | 84e75610 | Kostas Papadimitriou | stderr=subprocess.PIPE).communicate()[0].strip()
|
55 | 07d104d8 | Kostas Papadimitriou | |
56 | 07d104d8 | Kostas Papadimitriou | branch = callgit('git branch | grep -Ei "\* (.*)" | cut -f2 -d" "')
|
57 | 07d104d8 | Kostas Papadimitriou | revid = callgit("git --no-pager log --max-count=1 | cut -f2 -d' ' | head -1")
|
58 | 07d104d8 | Kostas Papadimitriou | revno = callgit('git --no-pager log --oneline | wc -l')
|
59 | c5aecff5 | Kostas Papadimitriou | desc = callgit('git describe --tags')
|
60 | 07d104d8 | Kostas Papadimitriou | |
61 | 07d104d8 | Kostas Papadimitriou | return branch, revid, revno, desc
|
62 | 07d104d8 | Kostas Papadimitriou | |
63 | 07d104d8 | Kostas Papadimitriou | |
64 | 0fb30b27 | Kostas Papadimitriou | def get_version_from_describe(describe): |
65 | 07d104d8 | Kostas Papadimitriou | """
|
66 | 0fb30b27 | Kostas Papadimitriou | Package version based on `git describe` output. Compatible with setuptools
|
67 | 07d104d8 | Kostas Papadimitriou | version format
|
68 | 0fb30b27 | Kostas Papadimitriou |
|
69 | 0fb30b27 | Kostas Papadimitriou | >>> get_version_from_describe("v0.8.0")
|
70 | 0fb30b27 | Kostas Papadimitriou | '0.8.0'
|
71 | 0fb30b27 | Kostas Papadimitriou | >>> get_version_from_describe("debian/v0.8.0")
|
72 | 0fb30b27 | Kostas Papadimitriou | '0.8.0'
|
73 | 0fb30b27 | Kostas Papadimitriou | >>> get_version_from_describe("0.8.0")
|
74 | 0fb30b27 | Kostas Papadimitriou | '0.8.0'
|
75 | 0fb30b27 | Kostas Papadimitriou | >>> get_version_from_describe("v0.8.0-34-g8f9a1bf")
|
76 | 0fb30b27 | Kostas Papadimitriou | '0.8.0-34-g8f9a1bf'
|
77 | 0fb30b27 | Kostas Papadimitriou | >>> get_version_from_describe("debian/v0.8.0-34-g8f9a1bf")
|
78 | 0fb30b27 | Kostas Papadimitriou | '0.8.0-34-g8f9a1bf'
|
79 | 07d104d8 | Kostas Papadimitriou | """
|
80 | 07d104d8 | Kostas Papadimitriou | |
81 | 0fb30b27 | Kostas Papadimitriou | version = describe.split("/")[-1].lstrip('v') |
82 | 0fb30b27 | Kostas Papadimitriou | version = version.lstrip('v')
|
83 | 0fb30b27 | Kostas Papadimitriou | return version
|
84 | 07d104d8 | Kostas Papadimitriou | |
85 | 473e2b08 | Christos Stavrakakis | |
86 | 473e2b08 | Christos Stavrakakis | def update_version_old(module, name='version', root="."): |
87 | 07d104d8 | Kostas Papadimitriou | """
|
88 | 07d104d8 | Kostas Papadimitriou | Helper util to generate/replace a version.py file containing version
|
89 | 0fb30b27 | Kostas Papadimitriou | information retrieved from get_version_from_describe as a submodule of passed `module`
|
90 | 07d104d8 | Kostas Papadimitriou | """
|
91 | 07d104d8 | Kostas Papadimitriou | |
92 | 07d104d8 | Kostas Papadimitriou | # exit early if not in development environment
|
93 | 0fb30b27 | Kostas Papadimitriou | if not os.path.exists(os.path.join(root, '..', '.git')) and \ |
94 | 0fb30b27 | Kostas Papadimitriou | not os.path.exists(os.path.join(root, '.git')): |
95 | 07d104d8 | Kostas Papadimitriou | return
|
96 | 07d104d8 | Kostas Papadimitriou | |
97 | 07d104d8 | Kostas Papadimitriou | paths = [root] + module.split(".") + ["%s.py" % name] |
98 | 07d104d8 | Kostas Papadimitriou | module_filename = os.path.join(*paths) |
99 | 07d104d8 | Kostas Papadimitriou | content = """
|
100 | 07d104d8 | Kostas Papadimitriou | __version__ = "%(version)s"
|
101 | 07d104d8 | Kostas Papadimitriou | __version_info__ = __version__.split(".")
|
102 | 9b59a383 | Kostas Papadimitriou | __version_vcs_info__ = %(vcs_info)s
|
103 | 0fb30b27 | Kostas Papadimitriou | """ % dict(version=get_version_from_describe(vcs_info()[3]), |
104 | 9b59a383 | Kostas Papadimitriou | vcs_info=pprint.PrettyPrinter().pformat(vcs_info())) |
105 | 07d104d8 | Kostas Papadimitriou | |
106 | 07d104d8 | Kostas Papadimitriou | module_file = file(module_filename, "w+") |
107 | 07d104d8 | Kostas Papadimitriou | module_file.write(content) |
108 | 07d104d8 | Kostas Papadimitriou | module_file.close() |
109 | 07d104d8 | Kostas Papadimitriou | |
110 | 473e2b08 | Christos Stavrakakis | |
111 | 473e2b08 | Christos Stavrakakis | def update_version(module, name='version', root='.'): |
112 | 473e2b08 | Christos Stavrakakis | try:
|
113 | 473e2b08 | Christos Stavrakakis | from devflow import versioning |
114 | 473e2b08 | Christos Stavrakakis | return versioning.update_version(module, name, root)
|
115 | 473e2b08 | Christos Stavrakakis | except ImportError: |
116 | 473e2b08 | Christos Stavrakakis | import sys |
117 | 473e2b08 | Christos Stavrakakis | paths = [root] + module.split(".") + ["%s.py" % name] |
118 | 473e2b08 | Christos Stavrakakis | module_filename = os.path.join(*paths) |
119 | ef67f714 | Christos Stavrakakis | sys.stdout.write("WARNING: Cannot update version because `devflow` is"
|
120 | 473e2b08 | Christos Stavrakakis | " not installed. Please make sure to manually"
|
121 | 473e2b08 | Christos Stavrakakis | " update version file: '%s'\n" % module_filename) |