Kiln » TortoiseHg » TortoiseHg
Clone URL:  
paths.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# paths.py - TortoiseHg path utilities # # Copyright 2009 Steve Borho <steve@borho.org> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. try: from config import icon_path, bin_path, license_path, locale_path except ImportError: icon_path, bin_path, license_path, locale_path = None, None, None, None import os, sys def find_root(path=None): p = path or os.getcwd() while not os.path.isdir(os.path.join(p, ".hg")): oldp = p p = os.path.dirname(p) if p == oldp: return None if not os.access(p, os.R_OK): return None return p def get_tortoise_icon(icon): "Find a tortoisehg icon" icopath = os.path.join(get_icon_path(), icon) if os.path.isfile(icopath): return icopath else: print 'icon not found', icon return None def get_icon_path(): global icon_path return icon_path or os.path.join(get_prog_root(), 'icons') def get_license_path(): global license_path return license_path or os.path.join(get_prog_root(), 'COPYING.txt') def get_locale_path(): global locale_path return locale_path or os.path.join(get_prog_root(), 'locale') if os.name == 'nt': import _winreg import win32net import win32api import win32file def find_in_path(pgmname): "return first executable found in search path" global bin_path ospath = os.environ['PATH'].split(os.pathsep) ospath.insert(0, bin_path or get_prog_root()) pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD') pathext = pathext.lower().split(os.pathsep) for path in ospath: ppath = os.path.join(path, pgmname) for ext in pathext: if os.path.exists(ppath + ext): return ppath + ext return None def get_prog_root(): if getattr(sys, 'frozen', False): try: return _winreg.QueryValue(_winreg.HKEY_LOCAL_MACHINE, r"Software\TortoiseHg") except: pass return os.path.dirname(os.path.dirname(os.path.dirname(__file__))) def is_on_fixed_drive(path): if hasattr(os.path, 'splitunc'): unc, rest = os.path.splitunc(path) if unc: # All UNC paths (\\host\mount) are considered not-fixed return False drive, remain = os.path.splitdrive(path) if drive: return win32file.GetDriveType(drive) == win32file.DRIVE_FIXED else: return False USE_OK = 0 # network drive status def netdrive_status(drive): """ return True if a network drive is accessible (connected, ...), or False if <drive> is not a network drive """ if hasattr(os.path, 'splitunc'): unc, rest = os.path.splitunc(drive) if unc: # All UNC paths (\\host\mount) are considered nonlocal return True letter = os.path.splitdrive(drive)[0] _drives, total, _ = win32net.NetUseEnum(None, 1, 0) for drv in _drives: if drv['local'] == letter: info = win32net.NetUseGetInfo(None, letter, 1) return info['status'] == USE_OK return False else: # Not Windows def find_in_path(pgmname): """ return first executable found in search path """ global bin_path ospath = os.environ['PATH'].split(os.pathsep) ospath.insert(0, bin_path or get_prog_root()) for path in ospath: ppath = os.path.join(path, pgmname) if os.access(ppath, os.X_OK): return ppath return None def get_prog_root(): path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) return path def netdrive_status(drive): """ return True if a network drive is accessible (connected, ...), or False if <drive> is not a network drive """ return False def is_on_fixed_drive(path): return True