Coverage for python/lsst/sconsUtils/vcs/hg.py: 11%
35 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-22 11:01 +0000
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-22 11:01 +0000
1"""A simple python interface to hg (Mercurial), using `os.popen`
3Based on the svn interface.
5If ever we want to do anything clever, we should use one of
6the supported svn/python packages
7"""
8import os
9import re
10from .. import state
11from .. import utils
14def guessVersionName():
15 """Guess a version name.
17 Returns
18 -------
19 name : `str`
20 Descriptive name of the repository version state.
21 """
22 version = "unknown"
23 if not os.path.exists(".hg"):
24 state.log.warn("Cannot guess version without .hg directory; will be set to '%s'." % version)
25 return version
27 idents = utils.runExternal("hg id", fatal=True)
28 ident = re.split(r"\s+", idents)
29 if len(ident) == 0:
30 raise RuntimeError("Unable to determine hg version")
32 if re.search(r"\+", ident[0]):
33 raise RuntimeError("Error with hg version: uncommitted changes")
35 if len(ident) == 1:
36 # Somehow, this is all we've got...
37 return ident[0]
39 # Prefer tag name to branch name; branch names get printed in parens
40 index = 1
41 while ident[index].startswith('(') and ident[index].endswith(')') and len(ident) > index + 1:
42 index += 1
44 # Prefer hash to "tip"
45 if ident[index] == "tip":
46 return ident[0]
48 return ident[index]
51def guessFingerprint():
52 """Guess a unique fingerprint.
54 Returns
55 -------
56 fingerprint : `str`
57 SHA1 of current repository state.
58 modified : `bool`
59 Flag to indicate whether the repository is in a modified state.
60 """
61 fingerprint, modified = "0x0", False
62 if not os.path.exists(".hg"):
63 state.log.warn("Cannot guess fingerprint without .hg directory; will be set to '%s'." % fingerprint)
64 else:
65 idents = utils.runExternal("hg id", fatal=True)
66 ident = re.split(r"\s+", idents)
67 if len(ident) == 0:
68 raise RuntimeError("Unable to determine hg version")
70 fingerprint = utils.runExternal("hg ident --id", fatal=True).strip()
71 if re.search(r"\+", ident[0]):
72 modified = True
74 return fingerprint, modified