Coverage for python/lsst/sconsUtils/vcs/hg.py: 11%

35 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-08-01 00:45 -0700

1"""A simple python interface to hg (Mercurial), using `os.popen` 

2 

3Based on the svn interface. 

4 

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 

12 

13 

14def guessVersionName(): 

15 """Guess a version name. 

16 

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 

26 

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") 

31 

32 if re.search(r"\+", ident[0]): 

33 raise RuntimeError("Error with hg version: uncommitted changes") 

34 

35 if len(ident) == 1: 

36 # Somehow, this is all we've got... 

37 return ident[0] 

38 

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 

43 

44 # Prefer hash to "tip" 

45 if ident[index] == "tip": 

46 return ident[0] 

47 

48 return ident[index] 

49 

50 

51def guessFingerprint(): 

52 """Guess a unique fingerprint. 

53 

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") 

69 

70 fingerprint = utils.runExternal("hg ident --id", fatal=True).strip() 

71 if re.search(r"\+", ident[0]): 

72 modified = True 

73 

74 return fingerprint, modified