forked from lpod/lpod-python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
release.py
executable file
·94 lines (76 loc) · 2.59 KB
/
release.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# Copyright (c) 2009-2010 Ars Aperta, Itaapy, Pierlis, Talend.
#
# Authors: Hervé Cauwelier <[email protected]>
#
# This file is part of Lpod (see: http://lpod-project.net).
# Lpod is free software; you can redistribute it and/or modify it under
# the terms of either:
#
# a) the GNU General Public License as published by the Free Software
# Foundation, either version 3 of the License, or (at your option)
# any later version.
# Lpod is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Lpod. If not, see <http://www.gnu.org/licenses/>.
#
# b) the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
#
# Import from the Standard Library
from subprocess import Popen, PIPE
from sys import argv
from os.path import basename, exists
# Import from lpod
from scriptutils import printerr
try:
# builtin on Windows
WindowsError
except NameError:
class WindowsError(OSError):
pass
def _run_command(command):
popen = Popen(command, stdout=PIPE, stderr=PIPE)
stdoutdata, stderrdata = popen.communicate()
if popen.returncode != 0 or stderrdata:
raise ValueError
return stdoutdata
def has_git():
if not exists('.git'):
return False
try:
_run_command(['git', 'branch'])
except (ValueError, OSError, WindowsError):
return False
return True
def get_release():
# XXX do it in one git command
output = _run_command(['git', 'branch'])
for line in output.splitlines():
if line.startswith('*'):
branch = line[2:]
break
output = _run_command(['git', 'describe', '--tags', '--always']).strip()
if not '-' in output:
return output
version, delta, sha = output.split('-')
if branch == 'master':
#return '-'.join((version, delta, sha))
return sha
#return '-'.join((branch, version, delta, sha))
return '-'.join((branch, sha))
def get_git_files():
files = _run_command(['git', 'ls-files'])
return [ name.strip() for name in files.splitlines() ]
if __name__ == '__main__':
try:
print get_release()
except:
printerr('%s: unable to read info' % basename(argv[0]))