annotate src/tools/utils.py @ 2005:2afd5bd781ef

plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
author Geoffrey POUZET <chteufleur@kingpenguin.tk>
date Mon, 11 Jul 2016 20:01:05 +0200
parents 1128feb54180
children 0931b5a6213c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1858
diff changeset
1 #!/usr/bin/env python2
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
4 # SAT: a jabber client
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1502
diff changeset
5 # Copyright (C) 2009-2016 Jérôme Poisson (goffi@goffi.org)
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
7 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
10 # (at your option) any later version.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
12 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
15 # GNU Affero General Public License for more details.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 601
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
19
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """ various useful methods """
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
21
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
22 import unicodedata
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
23 import os.path
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
24 from sat.core.log import getLogger
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
25 log = getLogger(__name__)
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
26 import datetime
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
27 import time
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
28
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 811
diff changeset
29
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
30 def clean_ustr(ustr):
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
31 """Clean unicode string
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
32
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
33 remove special characters from unicode string
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
34 """
601
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
35 def valid_chars(unicode_source):
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
36 for char in unicode_source:
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
37 if unicodedata.category(char) == 'Cc' and char!='\n':
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
38 continue
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
39 yield char
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
40 return ''.join(valid_chars(ustr))
a4f6f78f0620 jp, core: jp's clean_ustr moved to a new general utils module
Goffi <goffi@goffi.org>
parents:
diff changeset
41
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
42 def xmpp_date(timestamp=None, with_time=True):
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
43 """Return date according to XEP-0082 specification
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
44
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
45 to avoid reveling the timezone, we always return UTC dates
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
46 the string returned by this method is valid with RFC 3339
1502
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
47 @param timestamp(None, float): posix timestamp. If None current time will be used
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
48 @param with_time(bool): if True include the time
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
49 @return(unicode): XEP-0082 formatted date and time
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
50 """
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
51 template_date = u"%Y-%m-%d"
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
52 template_time = u"%H:%M:%SZ"
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
53 template = u"{}T{}".format(template_date, template_time) if with_time else template_date
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
54 return datetime.datetime.utcfromtimestamp(time.time() if timestamp is None else timestamp).strftime(template)
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
55
566908d483f6 core (utils): added a method to generate XEP-0082 style dates
Goffi <goffi@goffi.org>
parents: 1471
diff changeset
56
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
57 def getRepositoryData(module, as_string=True, is_path=False, save_dir_path=None):
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
58 """Retrieve info on current mecurial repository
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
59
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
60 Data is gotten by using the following methods, in order:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
61 - using "hg" executable
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
62 - looking for a ".hg_data" file in the root of the module
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
63 this file must contain the data dictionnary serialized with pickle
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
64 - looking for a .hg/dirstate in parent directory of module (or in module/.hg if
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
65 is_path is True), and parse dirstate file to get revision
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
66 @param module(unicode): module to look for (e.g. sat, libervia)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
67 module can be a path if is_path is True (see below)
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
68 @param as_string(bool): if True return a string, else return a dictionary
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
69 @param is_path(bool): if True "module" is not handled as a module name, but as an
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
70 absolute path to the parent of a ".hg" directory
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
71 @param save_path(str, None): if not None, the value will be saved to given path as a pickled dict
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
72 /!\\ the .hg_data file in the given directory will be overwritten
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
73 @return (unicode, dictionary): retrieved info in a nice string,
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
74 or a dictionary with retrieved data (key is not present if data is not found),
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
75 key can be:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
76 - node: full revision number (40 bits)
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
77 - branch: branch name
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
78 - date: ISO 8601 format date
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
79 - tag: latest tag used in hierarchie
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
80 """
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
81 from distutils.spawn import find_executable
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
82 import subprocess
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
83 KEYS=("node", "node_short", "branch", "date", "tag")
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
84 ori_cwd = os.getcwd()
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
85
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
86 if is_path:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
87 repos_root = module
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
88 else:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
89 repos_root = os.path.dirname(module.__file__)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
90
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
91 hg_path = find_executable('hg')
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
92
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
93 if hg_path is not None:
1376
28fd9e838f8f core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents: 1375
diff changeset
94 os.chdir(repos_root)
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
95 try:
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
96 hg_data_raw = subprocess.check_output(["hg","log", "-r", "-1", "--template","{node}\n{node|short}\n{branch}\n{date|isodate}\n{latesttag}"])
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
97 except subprocess.CalledProcessError:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
98 hg_data = {}
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
99 else:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
100 hg_data = dict(zip(KEYS, hg_data_raw.split('\n')))
1857
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
101 try:
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
102 hg_data['modified'] = '+' in subprocess.check_output(["hg","id","-i"])
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
103 except subprocess.CalledProcessError:
2d2617930f97 core (tools): fixed bad call to "hg id" when hg is not working to guest revision, which was the cause of an Exception
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
104 pass
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
105 else:
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
106 hg_data = {}
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
107
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
108 if not hg_data:
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
109 # .hg_data pickle method
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
110 log.debug(u"Mercurial not available or working, trying other methods")
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
111 if save_dir_path is None:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
112 log.debug(u"trying .hg_data method")
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
113
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
114 try:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
115 with open(os.path.join(repos_root, '.hg_data')) as f:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
116 import cPickle as pickle
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
117 hg_data = pickle.load(f)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
118 except IOError as e:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
119 log.debug(u"Can't access .hg_data file: {}".format(e))
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
120 except pickle.UnpicklingError:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
121 log.warning(u"Error while reading {}, can't get repos data".format(f.name))
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
122
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
123 if not hg_data:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
124 # .hg/dirstate method
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
125 log.debug(u"trying dirstate method")
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
126 if is_path:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
127 os.chdir(repos_root)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
128 else:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
129 os.chdir(os.path.relpath('..', repos_root))
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
130 try:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
131 with open('.hg/dirstate') as hg_dirstate:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
132 hg_data['node'] = hg_dirstate.read(20).encode('hex')
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
133 hg_data['node_short'] = hg_data['node'][:12]
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
134 except IOError:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
135 log.warning(u"Can't access repository data")
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
136
1858
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
137 # we restore original working dir
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
138 os.chdir(ori_cwd)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
139
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
140 # data saving
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
141 if save_dir_path is not None and hg_data:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
142 if not os.path.isdir(save_dir_path):
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
143 log.warning(u"Given path is not a directory, can't save data")
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
144 else:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
145 import cPickle as pickle
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
146 dest_path = os.path.join(save_dir_path, ".hg_data")
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
147 try:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
148 with open(dest_path, 'w') as f:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
149 pickle.dump(hg_data, f, 2)
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
150 except IOError as e:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
151 log.warning(u"Can't save file to {path}: {reason}".format(
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
152 path=dest_path, reason=e))
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
153 else:
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
154 log.debug(u"repository data saved to {}".format(dest_path))
06e13ae616cf tools (utils): improved repository version detection:
Goffi <goffi@goffi.org>
parents: 1857
diff changeset
155
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
156 if as_string:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
157 if not hg_data:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
158 return u'repository data unknown'
1471
934e402c90bf core: tools.utils.getRepositoryData now return "hg log -r -1" and short form of node + fixed crash if mercurial is not present:
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
159 strings = [u'rev', hg_data['node_short']]
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
160 try:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
161 if hg_data['modified']:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
162 strings.append(u"[M]")
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
163 except KeyError:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
164 pass
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
165 try:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
166 strings.extend([u'({branch} {date})'.format(**hg_data)])
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
167 except KeyError:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
168 pass
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
169
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
170 return u' '.join(strings)
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
171 else:
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 916
diff changeset
172 return hg_data