Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Side by Side Diff: test/lib/TestWin.py

Issue 245923003: Fix msvs-ninja OutputDirectory path. (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Use reg.exe instead of _winreg. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « test/lib/TestGyp.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright (c) 2014 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """
6 TestWin.py: a collection of helpers for testing on Windows.
7 """
8
9 import errno
10 import os
11 import re
12 import sys
13 import subprocess
14
15 class Registry(object):
16 def _QueryBase(self, sysdir, key, value):
17 """Use reg.exe to read a particular key.
18
19 While ideally we might use the win32 module, we would like gyp to be
20 python neutral, so for instance cygwin python lacks this module.
21
22 Arguments:
23 sysdir: The system subdirectory to attempt to launch reg.exe from.
24 key: The registry key to read from.
25 value: The particular value to read.
26 Return:
27 stdout from reg.exe, or None for failure.
28 """
29 # Skip if not on Windows or Python Win32 setup issue
30 if sys.platform not in ('win32', 'cygwin'):
31 return None
32 # Setup params to pass to and attempt to launch reg.exe
33 cmd = [os.path.join(os.environ.get('WINDIR', ''), sysdir, 'reg.exe'),
34 'query', key]
35 if value:
36 cmd.extend(['/v', value])
37 p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
38 # Get the stdout from reg.exe, reading to the end so p.returncode is valid
39 # Note that the error text may be in [1] in some cases
40 text = p.communicate()[0]
41 # Check return code from reg.exe; officially 0==success and 1==error
42 if p.returncode:
43 return None
44 return text
45
46 def Query(self, key, value=None):
47 """Use reg.exe to read a particular key through _QueryBase.
48
49 First tries to launch from %WinDir%\Sysnative to avoid WoW64 redirection. If
50 that fails, it falls back to System32. Sysnative is available on Vista and
51 up and available on Windows Server 2003 and XP through KB patch 942589. Note
52 that Sysnative will always fail if using 64-bit python due to it being a
53 virtual directory and System32 will work correctly in the first place.
54
55 KB 942589 - http://support.microsoft.com/kb/942589/en-us.
56
57 Arguments:
58 key: The registry key.
59 value: The particular registry value to read (optional).
60 Return:
61 stdout from reg.exe, or None for failure.
62 """
63 text = None
64 try:
65 text = self._QueryBase('Sysnative', key, value)
66 except OSError, e:
67 if e.errno == errno.ENOENT:
68 text = self._QueryBase('System32', key, value)
69 else:
70 raise
71 return text
72
73 def GetValue(self, key, value):
74 """Use reg.exe to obtain the value of a registry key.
75
76 Args:
77 key: The registry key.
78 value: The particular registry value to read.
79 Return:
80 contents of the registry key's value, or None on failure.
81 """
82 text = self.Query(key, value)
83 if not text:
84 return None
85 # Extract value.
86 match = re.search(r'REG_\w+\s+([^\r]+)\r\n', text)
87 if not match:
88 return None
89 return match.group(1)
90
91 def KeyExists(self, key):
92 """Use reg.exe to see if a key exists.
93
94 Args:
95 key: The registry key to check.
96 Return:
97 True if the key exists
98 """
99 if not self.Query(key):
100 return False
101 return True
OLDNEW
« no previous file with comments | « test/lib/TestGyp.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698