Mercurial > hg
annotate mercurial/win32.py @ 47072:4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Since the dawn of time, people have been forced to rely to lossy introspection
of the index filename to determine what the purpose and role of the revlog they
encounter is. This is hacky, error prone, inflexible, abstraction-leaky,
<insert-your-own-complaints-here>.
In f63299ee7e4d Raphaël introduced a new attribute to track this information:
`revlog_kind`. However it is initialized in an odd place and various instances
end up not having it set. In addition is only tracking some of the information
we end up having to introspect in various pieces of code.
So we add a new attribute that holds more data and is more strictly enforced.
This work is done in collaboration with Raphaël.
The `revlog_kind` one will be removed/adapted in the next changeset. We expect
to be able to clean up various existing piece of code and to simplify coming
work around the newer revlog format.
Differential Revision: https://phab.mercurial-scm.org/D10352
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 06 Apr 2021 05:20:24 +0200 |
parents | d4ba4d51f85f |
children | 6000f5b25c9b |
rev | line source |
---|---|
8226
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
1 # win32.py - utility functions that use win32 API |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46784
diff
changeset
|
3 # Copyright 2005-2009 Olivia Mackall <olivia@selenic.com> and others |
8226
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
4 # |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
8227
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
7 |
25994
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
8 from __future__ import absolute_import |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
9 |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
10 import ctypes |
35549
94a127152e25
win32: allocate buffer of maximum length for GetVolumeInformation()
Yuya Nishihara <yuya@tcha.org>
parents:
35512
diff
changeset
|
11 import ctypes.wintypes as wintypes |
25994
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
12 import errno |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
13 import msvcrt |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
14 import os |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
15 import random |
d6beeb618700
win32: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
16 import subprocess |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
17 |
30667
5861bdbeb9a3
py3: use pycompat.getcwd instead of os.getcwd
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30637
diff
changeset
|
18 from . import ( |
5861bdbeb9a3
py3: use pycompat.getcwd instead of os.getcwd
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30637
diff
changeset
|
19 encoding, |
5861bdbeb9a3
py3: use pycompat.getcwd instead of os.getcwd
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30637
diff
changeset
|
20 pycompat, |
5861bdbeb9a3
py3: use pycompat.getcwd instead of os.getcwd
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30637
diff
changeset
|
21 ) |
30637
344e68882cd3
py3: replace os.environ with encoding.environ (part 4 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30314
diff
changeset
|
22 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
23 # pytype: disable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
24 _kernel32 = ctypes.windll.kernel32 |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
25 _advapi32 = ctypes.windll.advapi32 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
26 _user32 = ctypes.windll.user32 |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
27 _crypt32 = ctypes.windll.crypt32 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
28 # pytype: enable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
29 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
30 _BOOL = ctypes.c_long |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
31 _WORD = ctypes.c_ushort |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
32 _DWORD = ctypes.c_ulong |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
33 _UINT = ctypes.c_uint |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
34 _LONG = ctypes.c_long |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
35 _LPCSTR = _LPSTR = ctypes.c_char_p |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
36 _HANDLE = ctypes.c_void_p |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
37 _HWND = _HANDLE |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
38 _PCCERT_CONTEXT = ctypes.c_void_p |
35549
94a127152e25
win32: allocate buffer of maximum length for GetVolumeInformation()
Yuya Nishihara <yuya@tcha.org>
parents:
35512
diff
changeset
|
39 _MAX_PATH = wintypes.MAX_PATH |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
40 |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
41 _INVALID_HANDLE_VALUE = _HANDLE(-1).value |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
42 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
43 # GetLastError |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
44 _ERROR_SUCCESS = 0 |
21193
07f9825865de
win32: add missing definition of _ERROR_NO_MORE_FILES caught by pyflakes
Yuya Nishihara <yuya@tcha.org>
parents:
20528
diff
changeset
|
45 _ERROR_NO_MORE_FILES = 18 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
46 _ERROR_INVALID_PARAMETER = 87 |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
47 _ERROR_BROKEN_PIPE = 109 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
48 _ERROR_INSUFFICIENT_BUFFER = 122 |
38533
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
49 _ERROR_NO_DATA = 232 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
50 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
51 # WPARAM is defined as UINT_PTR (unsigned type) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
52 # LPARAM is defined as LONG_PTR (signed type) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
53 if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
54 _WPARAM = ctypes.c_ulong |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
55 _LPARAM = ctypes.c_long |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
56 elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
57 _WPARAM = ctypes.c_ulonglong |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
58 _LPARAM = ctypes.c_longlong |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
59 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
60 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
61 class _FILETIME(ctypes.Structure): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
62 _fields_ = [('dwLowDateTime', _DWORD), ('dwHighDateTime', _DWORD)] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
63 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
64 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
65 class _BY_HANDLE_FILE_INFORMATION(ctypes.Structure): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
66 _fields_ = [ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
67 ('dwFileAttributes', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
68 ('ftCreationTime', _FILETIME), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
69 ('ftLastAccessTime', _FILETIME), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
70 ('ftLastWriteTime', _FILETIME), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
71 ('dwVolumeSerialNumber', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
72 ('nFileSizeHigh', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
73 ('nFileSizeLow', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
74 ('nNumberOfLinks', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
75 ('nFileIndexHigh', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
76 ('nFileIndexLow', _DWORD), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
77 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
78 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
79 |
18959
2f6418d8a4c9
check-code: catch trailing space in comments
Mads Kiilerich <madski@unity3d.com>
parents:
18175
diff
changeset
|
80 # CreateFile |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
81 _FILE_SHARE_READ = 0x00000001 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
82 _FILE_SHARE_WRITE = 0x00000002 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
83 _FILE_SHARE_DELETE = 0x00000004 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
84 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
85 _OPEN_EXISTING = 3 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
86 |
17006
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
87 _FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
88 |
13776
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
89 # SetFileAttributes |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
90 _FILE_ATTRIBUTE_NORMAL = 0x80 |
13795
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
91 _FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x2000 |
13776
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
92 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
93 # Process Security and Access Rights |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
94 _PROCESS_QUERY_INFORMATION = 0x0400 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
95 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
96 # GetExitCodeProcess |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
97 _STILL_ACTIVE = 259 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
98 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
99 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
100 class _STARTUPINFO(ctypes.Structure): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
101 _fields_ = [ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
102 ('cb', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
103 ('lpReserved', _LPSTR), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
104 ('lpDesktop', _LPSTR), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
105 ('lpTitle', _LPSTR), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
106 ('dwX', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
107 ('dwY', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
108 ('dwXSize', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
109 ('dwYSize', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
110 ('dwXCountChars', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
111 ('dwYCountChars', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
112 ('dwFillAttribute', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
113 ('dwFlags', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
114 ('wShowWindow', _WORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
115 ('cbReserved2', _WORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
116 ('lpReserved2', ctypes.c_char_p), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
117 ('hStdInput', _HANDLE), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
118 ('hStdOutput', _HANDLE), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
119 ('hStdError', _HANDLE), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
120 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
121 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
122 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
123 class _PROCESS_INFORMATION(ctypes.Structure): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
124 _fields_ = [ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
125 ('hProcess', _HANDLE), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
126 ('hThread', _HANDLE), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
127 ('dwProcessId', _DWORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
128 ('dwThreadId', _DWORD), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
129 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
130 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
131 |
17050
e780fb37168b
win32: specify _CREATE_NO_WINDOW on spawndetached()
Adrian Buehlmann <adrian@cadifra.com>
parents:
17006
diff
changeset
|
132 _CREATE_NO_WINDOW = 0x08000000 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
133 _SW_HIDE = 0 |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
134 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
135 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
136 class _COORD(ctypes.Structure): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
137 _fields_ = [('X', ctypes.c_short), ('Y', ctypes.c_short)] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
138 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
139 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
140 class _SMALL_RECT(ctypes.Structure): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
141 _fields_ = [ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
142 ('Left', ctypes.c_short), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
143 ('Top', ctypes.c_short), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
144 ('Right', ctypes.c_short), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
145 ('Bottom', ctypes.c_short), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
146 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
147 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
148 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
149 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
150 _fields_ = [ |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
151 ('dwSize', _COORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
152 ('dwCursorPosition', _COORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
153 ('wAttributes', _WORD), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
154 ('srWindow', _SMALL_RECT), |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
155 ('dwMaximumWindowSize', _COORD), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
156 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
157 |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
158 |
32664
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
159 _STD_OUTPUT_HANDLE = _DWORD(-11).value |
14344
e1db8a00188b
win32.py: more explicit definition of _STD_ERROR_HANDLE
Adrian Buehlmann <adrian@cadifra.com>
parents:
14237
diff
changeset
|
160 _STD_ERROR_HANDLE = _DWORD(-12).value |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
161 |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
162 # CERT_TRUST_STATUS dwErrorStatus |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
163 CERT_TRUST_IS_PARTIAL_CHAIN = 0x10000 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
164 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
165 # CertCreateCertificateContext encodings |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
166 X509_ASN_ENCODING = 0x00000001 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
167 PKCS_7_ASN_ENCODING = 0x00010000 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
168 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
169 # These structs are only complete enough to achieve what we need. |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
170 class CERT_CHAIN_CONTEXT(ctypes.Structure): |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
171 _fields_ = ( |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
172 ("cbSize", _DWORD), |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
173 # CERT_TRUST_STATUS struct |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
174 ("dwErrorStatus", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
175 ("dwInfoStatus", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
176 ("cChain", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
177 ("rgpChain", ctypes.c_void_p), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
178 ("cLowerQualityChainContext", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
179 ("rgpLowerQualityChainContext", ctypes.c_void_p), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
180 ("fHasRevocationFreshnessTime", _BOOL), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
181 ("dwRevocationFreshnessTime", _DWORD), |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
182 ) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
183 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
184 |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
185 class CERT_USAGE_MATCH(ctypes.Structure): |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
186 _fields_ = ( |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
187 ("dwType", _DWORD), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
188 # CERT_ENHKEY_USAGE struct |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
189 ("cUsageIdentifier", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
190 ("rgpszUsageIdentifier", ctypes.c_void_p), # LPSTR * |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
191 ) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
192 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
193 |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
194 class CERT_CHAIN_PARA(ctypes.Structure): |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
195 _fields_ = ( |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
196 ("cbSize", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
197 ("RequestedUsage", CERT_USAGE_MATCH), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
198 ("RequestedIssuancePolicy", CERT_USAGE_MATCH), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
199 ("dwUrlRetrievalTimeout", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
200 ("fCheckRevocationFreshnessTime", _BOOL), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
201 ("dwRevocationFreshnessTime", _DWORD), |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
202 ("pftCacheResync", ctypes.c_void_p), # LPFILETIME |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
203 ("pStrongSignPara", ctypes.c_void_p), # PCCERT_STRONG_SIGN_PARA |
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
204 ("dwStrongSignFlags", _DWORD), |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
205 ) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
206 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
207 |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
208 # types of parameters of C functions used (required by pypy) |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
209 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
210 _crypt32.CertCreateCertificateContext.argtypes = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
211 _DWORD, # cert encoding |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
212 ctypes.c_char_p, # cert |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
213 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
214 ] # cert size |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
215 _crypt32.CertCreateCertificateContext.restype = _PCCERT_CONTEXT |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
216 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
217 _crypt32.CertGetCertificateChain.argtypes = [ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
218 ctypes.c_void_p, # HCERTCHAINENGINE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
219 _PCCERT_CONTEXT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
220 ctypes.c_void_p, # LPFILETIME |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
221 ctypes.c_void_p, # HCERTSTORE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
222 ctypes.c_void_p, # PCERT_CHAIN_PARA |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
223 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
224 ctypes.c_void_p, # LPVOID |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
225 ctypes.c_void_p, # PCCERT_CHAIN_CONTEXT * |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
226 ] |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
227 _crypt32.CertGetCertificateChain.restype = _BOOL |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
228 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
229 _crypt32.CertFreeCertificateContext.argtypes = [_PCCERT_CONTEXT] |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
230 _crypt32.CertFreeCertificateContext.restype = _BOOL |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
231 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
232 _kernel32.CreateFileA.argtypes = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
233 _LPCSTR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
234 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
235 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
236 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
237 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
238 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
239 _HANDLE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
240 ] |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
241 _kernel32.CreateFileA.restype = _HANDLE |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
242 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
243 _kernel32.GetFileInformationByHandle.argtypes = [_HANDLE, ctypes.c_void_p] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
244 _kernel32.GetFileInformationByHandle.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
245 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
246 _kernel32.CloseHandle.argtypes = [_HANDLE] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
247 _kernel32.CloseHandle.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
248 |
15095
ec222a29bdf0
win32: quietly ignore missing CreateHardLinkA for Wine
Matt Mackall <mpm@selenic.com>
parents:
14345
diff
changeset
|
249 try: |
ec222a29bdf0
win32: quietly ignore missing CreateHardLinkA for Wine
Matt Mackall <mpm@selenic.com>
parents:
14345
diff
changeset
|
250 _kernel32.CreateHardLinkA.argtypes = [_LPCSTR, _LPCSTR, ctypes.c_void_p] |
ec222a29bdf0
win32: quietly ignore missing CreateHardLinkA for Wine
Matt Mackall <mpm@selenic.com>
parents:
14345
diff
changeset
|
251 _kernel32.CreateHardLinkA.restype = _BOOL |
ec222a29bdf0
win32: quietly ignore missing CreateHardLinkA for Wine
Matt Mackall <mpm@selenic.com>
parents:
14345
diff
changeset
|
252 except AttributeError: |
ec222a29bdf0
win32: quietly ignore missing CreateHardLinkA for Wine
Matt Mackall <mpm@selenic.com>
parents:
14345
diff
changeset
|
253 pass |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
254 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
255 _kernel32.SetFileAttributesA.argtypes = [_LPCSTR, _DWORD] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
256 _kernel32.SetFileAttributesA.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
257 |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
258 _DRIVE_UNKNOWN = 0 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
259 _DRIVE_NO_ROOT_DIR = 1 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
260 _DRIVE_REMOVABLE = 2 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
261 _DRIVE_FIXED = 3 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
262 _DRIVE_REMOTE = 4 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
263 _DRIVE_CDROM = 5 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
264 _DRIVE_RAMDISK = 6 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
265 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
266 _kernel32.GetDriveTypeA.argtypes = [_LPCSTR] |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
267 _kernel32.GetDriveTypeA.restype = _UINT |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
268 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
269 _kernel32.GetVolumeInformationA.argtypes = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
270 _LPCSTR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
271 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
272 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
273 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
274 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
275 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
276 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
277 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
278 ] |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
279 _kernel32.GetVolumeInformationA.restype = _BOOL |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
280 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
281 _kernel32.GetVolumePathNameA.argtypes = [_LPCSTR, ctypes.c_void_p, _DWORD] |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
282 _kernel32.GetVolumePathNameA.restype = _BOOL |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
283 |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
284 _kernel32.OpenProcess.argtypes = [_DWORD, _BOOL, _DWORD] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
285 _kernel32.OpenProcess.restype = _HANDLE |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
286 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
287 _kernel32.GetExitCodeProcess.argtypes = [_HANDLE, ctypes.c_void_p] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
288 _kernel32.GetExitCodeProcess.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
289 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
290 _kernel32.GetLastError.argtypes = [] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
291 _kernel32.GetLastError.restype = _DWORD |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
292 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
293 _kernel32.GetModuleFileNameA.argtypes = [_HANDLE, ctypes.c_void_p, _DWORD] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
294 _kernel32.GetModuleFileNameA.restype = _DWORD |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
295 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
296 _kernel32.CreateProcessA.argtypes = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
297 _LPCSTR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
298 _LPCSTR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
299 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
300 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
301 _BOOL, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
302 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
303 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
304 _LPCSTR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
305 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
306 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
307 ] |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
308 _kernel32.CreateProcessA.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
309 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
310 _kernel32.ExitProcess.argtypes = [_UINT] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
311 _kernel32.ExitProcess.restype = None |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
312 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
313 _kernel32.GetCurrentProcessId.argtypes = [] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
314 _kernel32.GetCurrentProcessId.restype = _DWORD |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
315 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
316 # pytype: disable=module-attr |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
317 _SIGNAL_HANDLER = ctypes.WINFUNCTYPE(_BOOL, _DWORD) |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
318 # pytype: enable=module-attr |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
319 _kernel32.SetConsoleCtrlHandler.argtypes = [_SIGNAL_HANDLER, _BOOL] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
320 _kernel32.SetConsoleCtrlHandler.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
321 |
32664
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
322 _kernel32.SetConsoleMode.argtypes = [_HANDLE, _DWORD] |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
323 _kernel32.SetConsoleMode.restype = _BOOL |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
324 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
325 _kernel32.GetConsoleMode.argtypes = [_HANDLE, ctypes.c_void_p] |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
326 _kernel32.GetConsoleMode.restype = _BOOL |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
327 |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
328 _kernel32.GetStdHandle.argtypes = [_DWORD] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
329 _kernel32.GetStdHandle.restype = _HANDLE |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
330 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
331 _kernel32.GetConsoleScreenBufferInfo.argtypes = [_HANDLE, ctypes.c_void_p] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
332 _kernel32.GetConsoleScreenBufferInfo.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
333 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
334 _advapi32.GetUserNameA.argtypes = [ctypes.c_void_p, ctypes.c_void_p] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
335 _advapi32.GetUserNameA.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
336 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
337 _user32.GetWindowThreadProcessId.argtypes = [_HANDLE, ctypes.c_void_p] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
338 _user32.GetWindowThreadProcessId.restype = _DWORD |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
339 |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
340 _user32.ShowWindow.argtypes = [_HANDLE, ctypes.c_int] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
341 _user32.ShowWindow.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
342 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
343 # pytype: disable=module-attr |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
344 _WNDENUMPROC = ctypes.WINFUNCTYPE(_BOOL, _HWND, _LPARAM) |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
345 # pytype: enable=module-attr |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
346 _user32.EnumWindows.argtypes = [_WNDENUMPROC, _LPARAM] |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
347 _user32.EnumWindows.restype = _BOOL |
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
348 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
349 _kernel32.PeekNamedPipe.argtypes = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
350 _HANDLE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
351 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
352 _DWORD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
353 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
354 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
355 ctypes.c_void_p, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
356 ] |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
357 _kernel32.PeekNamedPipe.restype = _BOOL |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
358 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
359 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
360 def _raiseoserror(name): |
33419
7c33adc823e0
win32: work around a WinError problem handling HRESULT types
Matt Harbison <matt_harbison@yahoo.com>
parents:
32676
diff
changeset
|
361 # Force the code to a signed int to avoid an 'int too large' error. |
7c33adc823e0
win32: work around a WinError problem handling HRESULT types
Matt Harbison <matt_harbison@yahoo.com>
parents:
32676
diff
changeset
|
362 # See https://bugs.python.org/issue28474 |
7c33adc823e0
win32: work around a WinError problem handling HRESULT types
Matt Harbison <matt_harbison@yahoo.com>
parents:
32676
diff
changeset
|
363 code = _kernel32.GetLastError() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
364 if code > 0x7FFFFFFF: |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
365 code -= 2 ** 32 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
366 err = ctypes.WinError(code=code) # pytype: disable=module-attr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
367 raise OSError( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
368 err.errno, '%s: %s' % (encoding.strfromlocal(name), err.strerror) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
369 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
370 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
371 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
372 def _getfileinfo(name): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
373 fh = _kernel32.CreateFileA( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
374 name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
375 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
376 _FILE_SHARE_READ | _FILE_SHARE_WRITE | _FILE_SHARE_DELETE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
377 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
378 _OPEN_EXISTING, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
379 _FILE_FLAG_BACKUP_SEMANTICS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
380 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
381 ) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
382 if fh == _INVALID_HANDLE_VALUE: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
383 _raiseoserror(name) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
384 try: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
385 fi = _BY_HANDLE_FILE_INFORMATION() |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
386 if not _kernel32.GetFileInformationByHandle(fh, ctypes.byref(fi)): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
387 _raiseoserror(name) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
388 return fi |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
389 finally: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
390 _kernel32.CloseHandle(fh) |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
391 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
392 |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
393 def checkcertificatechain(cert, build=True): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
394 """Tests the given certificate to see if there is a complete chain to a |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
395 trusted root certificate. As a side effect, missing certificates are |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
396 downloaded and installed unless ``build=False``. True is returned if a |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
397 chain to a trusted root exists (even if built on the fly), otherwise |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
398 False. NB: A chain to a trusted root does NOT imply that the certificate |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
399 is valid. |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
400 """ |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
401 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
402 chainctxptr = ctypes.POINTER(CERT_CHAIN_CONTEXT) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
403 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
404 pchainctx = chainctxptr() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
405 chainpara = CERT_CHAIN_PARA( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
406 cbSize=ctypes.sizeof(CERT_CHAIN_PARA), RequestedUsage=CERT_USAGE_MATCH() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
407 ) |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
408 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
409 certctx = _crypt32.CertCreateCertificateContext( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
410 X509_ASN_ENCODING, cert, len(cert) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
411 ) |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
412 if certctx is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
413 _raiseoserror(b'CertCreateCertificateContext') |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
414 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
415 flags = 0 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
416 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
417 if not build: |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
418 flags |= 0x100 # CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
419 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
420 try: |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
421 # Building the certificate chain will update root certs as necessary. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
422 if not _crypt32.CertGetCertificateChain( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
423 None, # hChainEngine |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
424 certctx, # pCertContext |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
425 None, # pTime |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
426 None, # hAdditionalStore |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
427 ctypes.byref(chainpara), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
428 flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
429 None, # pvReserved |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
430 ctypes.byref(pchainctx), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
431 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
432 _raiseoserror(b'CertGetCertificateChain') |
33492
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
433 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
434 chainctx = pchainctx.contents |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
435 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
436 return chainctx.dwErrorStatus & CERT_TRUST_IS_PARTIAL_CHAIN == 0 |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
437 finally: |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
438 if pchainctx: |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
439 _crypt32.CertFreeCertificateChain(pchainctx) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
440 _crypt32.CertFreeCertificateContext(certctx) |
14af04391fb9
win32: add a method to trigger the Crypto API to complete a certificate chain
Matt Harbison <matt_harbison@yahoo.com>
parents:
33419
diff
changeset
|
441 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
442 |
14235
b9e1b041744f
rename util.os_link to oslink
Adrian Buehlmann <adrian@cadifra.com>
parents:
14230
diff
changeset
|
443 def oslink(src, dst): |
13976
9ca1ff3d4f8c
win32: Wine doesn't know about hardlinks
Matt Mackall <mpm@selenic.com>
parents:
13795
diff
changeset
|
444 try: |
9ca1ff3d4f8c
win32: Wine doesn't know about hardlinks
Matt Mackall <mpm@selenic.com>
parents:
13795
diff
changeset
|
445 if not _kernel32.CreateHardLinkA(dst, src, None): |
9ca1ff3d4f8c
win32: Wine doesn't know about hardlinks
Matt Mackall <mpm@selenic.com>
parents:
13795
diff
changeset
|
446 _raiseoserror(src) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
447 except AttributeError: # Wine doesn't support this function |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
448 _raiseoserror(src) |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
449 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
450 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
451 def nlinks(name): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
452 '''return number of hardlinks for the given file''' |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
453 return _getfileinfo(name).nNumberOfLinks |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
454 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
455 |
17006
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
456 def samefile(path1, path2): |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
457 '''Returns whether path1 and path2 refer to the same file or directory.''' |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
458 res1 = _getfileinfo(path1) |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
459 res2 = _getfileinfo(path2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
460 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
461 res1.dwVolumeSerialNumber == res2.dwVolumeSerialNumber |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
462 and res1.nFileIndexHigh == res2.nFileIndexHigh |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
463 and res1.nFileIndexLow == res2.nFileIndexLow |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
464 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
465 |
10218
750b7a4f01f6
Add support for relinking on Windows.
Siddharth Agarwal <sid.bugzilla@gmail.com>
parents:
9198
diff
changeset
|
466 |
17006
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
467 def samedevice(path1, path2): |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
468 '''Returns whether path1 and path2 are on the same device.''' |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
469 res1 = _getfileinfo(path1) |
6fc7fd72ba3e
win32.py: let samefile and samedevice work on directories too
Adrian Buehlmann <adrian@cadifra.com>
parents:
16807
diff
changeset
|
470 res2 = _getfileinfo(path2) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
471 return res1.dwVolumeSerialNumber == res2.dwVolumeSerialNumber |
10218
750b7a4f01f6
Add support for relinking on Windows.
Siddharth Agarwal <sid.bugzilla@gmail.com>
parents:
9198
diff
changeset
|
472 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
473 |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
474 def peekpipe(pipe): |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
475 handle = msvcrt.get_osfhandle(pipe.fileno()) # pytype: disable=module-attr |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
476 avail = _DWORD() |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
477 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
478 if not _kernel32.PeekNamedPipe( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
479 handle, None, 0, None, ctypes.byref(avail), None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
480 ): |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
481 err = _kernel32.GetLastError() |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
482 if err == _ERROR_BROKEN_PIPE: |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
483 return 0 |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
484 raise ctypes.WinError(err) # pytype: disable=module-attr |
24652
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
485 |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
486 return avail.value |
232bf0028596
win32: add a method to fetch the available pipe data size
Matt Harbison <matt_harbison@yahoo.com>
parents:
24494
diff
changeset
|
487 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
488 |
38533
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
489 def lasterrorwaspipeerror(err): |
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
490 if err.errno != errno.EINVAL: |
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
491 return False |
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
492 err = _kernel32.GetLastError() |
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
493 return err == _ERROR_BROKEN_PIPE or err == _ERROR_NO_DATA |
3a0f322af192
windows: fix incorrect detection of broken pipe when writing to pager
Sune Foldager <cryo@cyanite.org>
parents:
35550
diff
changeset
|
494 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
495 |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
496 def testpid(pid): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
497 """return True if pid is still running or unable to |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
498 determine, False otherwise""" |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
499 h = _kernel32.OpenProcess(_PROCESS_QUERY_INFORMATION, False, pid) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
500 if h: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
501 try: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
502 status = _DWORD() |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
503 if _kernel32.GetExitCodeProcess(h, ctypes.byref(status)): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
504 return status.value == _STILL_ACTIVE |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
505 finally: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
506 _kernel32.CloseHandle(h) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
507 return _kernel32.GetLastError() != _ERROR_INVALID_PARAMETER |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
508 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
509 |
14236
e949a008999d
rename util.executable_path to executablepath
Adrian Buehlmann <adrian@cadifra.com>
parents:
14235
diff
changeset
|
510 def executablepath(): |
13376
60b5c6c3fd12
win32: new function executable_path
Adrian Buehlmann <adrian@cadifra.com>
parents:
13375
diff
changeset
|
511 '''return full path of hg.exe''' |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
512 size = 600 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
513 buf = ctypes.create_string_buffer(size + 1) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
514 len = _kernel32.GetModuleFileNameA(None, ctypes.byref(buf), size) |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
515 # pytype: disable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
516 if len == 0: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
517 raise ctypes.WinError() # Note: WinError is a function |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
518 elif len == size: |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
519 raise ctypes.WinError(_ERROR_INSUFFICIENT_BUFFER) |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
520 # pytype: enable=module-attr |
13376
60b5c6c3fd12
win32: new function executable_path
Adrian Buehlmann <adrian@cadifra.com>
parents:
13375
diff
changeset
|
521 return buf.value |
60b5c6c3fd12
win32: new function executable_path
Adrian Buehlmann <adrian@cadifra.com>
parents:
13375
diff
changeset
|
522 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
523 |
35512
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
524 def getvolumename(path): |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
525 """Get the mount point of the filesystem from a directory or file |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
526 (best-effort) |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
527 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
528 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
529 """ |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
530 # realpath() calls GetFullPathName() |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
531 realpath = os.path.realpath(path) |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
532 |
35550
ed30934165c9
win32: do not call GetVolumePathName() with the minimum buffer length
Yuya Nishihara <yuya@tcha.org>
parents:
35549
diff
changeset
|
533 # allocate at least MAX_PATH long since GetVolumePathName('c:\\', buf, 4) |
ed30934165c9
win32: do not call GetVolumePathName() with the minimum buffer length
Yuya Nishihara <yuya@tcha.org>
parents:
35549
diff
changeset
|
534 # somehow fails on Windows XP |
ed30934165c9
win32: do not call GetVolumePathName() with the minimum buffer length
Yuya Nishihara <yuya@tcha.org>
parents:
35549
diff
changeset
|
535 size = max(len(realpath), _MAX_PATH) + 1 |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
536 buf = ctypes.create_string_buffer(size) |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
537 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
538 if not _kernel32.GetVolumePathNameA(realpath, ctypes.byref(buf), size): |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
539 # Note: WinError is a function |
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
540 raise ctypes.WinError() # pytype: disable=module-attr |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
541 |
35512
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
542 return buf.value |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
543 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
544 |
35512
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
545 def getfstype(path): |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
546 """Get the filesystem type name from a directory or file (best-effort) |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
547 |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
548 Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
549 """ |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
550 volume = getvolumename(path) |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
551 |
5cc1becd0493
win32: split a utility function to obtain the volume out of getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
35510
diff
changeset
|
552 t = _kernel32.GetDriveTypeA(volume) |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
553 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
554 if t == _DRIVE_REMOTE: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 return b'cifs' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
556 elif t not in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
557 _DRIVE_REMOVABLE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
558 _DRIVE_FIXED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
559 _DRIVE_CDROM, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
560 _DRIVE_RAMDISK, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
561 ): |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
562 return None |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
563 |
35549
94a127152e25
win32: allocate buffer of maximum length for GetVolumeInformation()
Yuya Nishihara <yuya@tcha.org>
parents:
35512
diff
changeset
|
564 size = _MAX_PATH + 1 |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
565 name = ctypes.create_string_buffer(size) |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
566 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
567 if not _kernel32.GetVolumeInformationA( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
568 volume, None, 0, None, None, None, ctypes.byref(name), size |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
569 ): |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
570 # Note: WinError is a function |
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
571 raise ctypes.WinError() # pytype: disable=module-attr |
35510
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
572 |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
573 return name.value |
2062f7c2ac83
win32: implement util.getfstype()
Matt Harbison <matt_harbison@yahoo.com>
parents:
34022
diff
changeset
|
574 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
575 |
7890
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
576 def getuser(): |
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
577 '''return name of current user''' |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
578 size = _DWORD(300) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
579 buf = ctypes.create_string_buffer(size.value + 1) |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
580 if not _advapi32.GetUserNameA(ctypes.byref(buf), ctypes.byref(size)): |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
581 raise ctypes.WinError() # pytype: disable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
582 return buf.value |
4672
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
583 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
584 |
14237
4d684d8210a1
rename util.set_signal_handler to setsignalhandler
Adrian Buehlmann <adrian@cadifra.com>
parents:
14236
diff
changeset
|
585 _signalhandler = [] |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
586 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
587 |
14237
4d684d8210a1
rename util.set_signal_handler to setsignalhandler
Adrian Buehlmann <adrian@cadifra.com>
parents:
14236
diff
changeset
|
588 def setsignalhandler(): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
589 """Register a termination handler for console events including |
4672
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
590 CTRL+C. python signal handlers do not work well with socket |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
591 operations. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
592 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
593 |
4672
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
594 def handler(event): |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
595 _kernel32.ExitProcess(1) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
596 |
14237
4d684d8210a1
rename util.set_signal_handler to setsignalhandler
Adrian Buehlmann <adrian@cadifra.com>
parents:
14236
diff
changeset
|
597 if _signalhandler: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
598 return # already registered |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
599 h = _SIGNAL_HANDLER(handler) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
600 _signalhandler.append(h) # needed to prevent garbage collection |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
601 if not _kernel32.SetConsoleCtrlHandler(h, True): |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
602 raise ctypes.WinError() # pytype: disable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
603 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
604 |
10240
3af4b39afe2a
cmdutil: hide child window created by win32 spawndetached()
Patrick Mezard <pmezard@gmail.com>
parents:
10219
diff
changeset
|
605 def hidewindow(): |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
606 def callback(hwnd, pid): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
607 wpid = _DWORD() |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
608 _user32.GetWindowThreadProcessId(hwnd, ctypes.byref(wpid)) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
609 if pid == wpid.value: |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
610 _user32.ShowWindow(hwnd, _SW_HIDE) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
611 return False # stop enumerating windows |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
612 return True |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
613 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
614 pid = _kernel32.GetCurrentProcessId() |
14345
bf9a105aed0a
win32.py: add argtypes and restype
Adrian Buehlmann <adrian@cadifra.com>
parents:
14344
diff
changeset
|
615 _user32.EnumWindows(_WNDENUMPROC(callback), pid) |
11012
81631f0cf13b
win32: detect console width on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
10388
diff
changeset
|
616 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
617 |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
618 def termsize(): |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
619 # cmd.exe does not handle CR like a unix console, the CR is |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
620 # counted in the line length. On 80 columns consoles, if 80 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
621 # characters are written, the following CR won't apply on the |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
622 # current line but on the new one. Keep room for it. |
30313
392633d7860e
scmutil: clarify that we explicitly do termwidth - 1 on Windows
Yuya Nishihara <yuya@tcha.org>
parents:
25994
diff
changeset
|
623 width = 80 - 1 |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
624 height = 25 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
625 # Query stderr to avoid problems with redirections |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
626 screenbuf = _kernel32.GetStdHandle( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
627 _STD_ERROR_HANDLE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
628 ) # don't close the handle returned |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
629 if screenbuf is None or screenbuf == _INVALID_HANDLE_VALUE: |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
630 return width, height |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
631 csbi = _CONSOLE_SCREEN_BUFFER_INFO() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
632 if not _kernel32.GetConsoleScreenBufferInfo(screenbuf, ctypes.byref(csbi)): |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
633 return width, height |
30313
392633d7860e
scmutil: clarify that we explicitly do termwidth - 1 on Windows
Yuya Nishihara <yuya@tcha.org>
parents:
25994
diff
changeset
|
634 width = csbi.srWindow.Right - csbi.srWindow.Left # don't '+ 1' |
30314
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
635 height = csbi.srWindow.Bottom - csbi.srWindow.Top + 1 |
365812902904
scmutil: extend termwidth() to return terminal height, renamed to termsize()
Yuya Nishihara <yuya@tcha.org>
parents:
30313
diff
changeset
|
636 return width, height |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
637 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
638 |
32664
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
639 def enablevtmode(): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
640 """Enable virtual terminal mode for the associated console. Return True if |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
641 enabled, else False.""" |
32664
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
642 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
643 ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
644 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
645 handle = _kernel32.GetStdHandle( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
646 _STD_OUTPUT_HANDLE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
647 ) # don't close the handle |
32664
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
648 if handle == _INVALID_HANDLE_VALUE: |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
649 return False |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
650 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
651 mode = _DWORD(0) |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
652 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
653 if not _kernel32.GetConsoleMode(handle, ctypes.byref(mode)): |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
654 return False |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
655 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
656 if (mode.value & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0: |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
657 mode.value |= ENABLE_VIRTUAL_TERMINAL_PROCESSING |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
658 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
659 if not _kernel32.SetConsoleMode(handle, mode): |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
660 return False |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
661 |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
662 return True |
2d56e6d23be7
win32: add a method to enable ANSI color code processing on Windows 10
Matt Harbison <matt_harbison@yahoo.com>
parents:
30667
diff
changeset
|
663 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
664 |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
665 def spawndetached(args): |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
666 # No standard library function really spawns a fully detached |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
667 # process under win32 because they allocate pipes or other objects |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
668 # to handle standard streams communications. Passing these objects |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
669 # to the child process requires handle inheritance to be enabled |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
670 # which makes really detached processes impossible. |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
671 si = _STARTUPINFO() |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
672 si.cb = ctypes.sizeof(_STARTUPINFO) |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
673 |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
674 pi = _PROCESS_INFORMATION() |
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
675 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
676 env = b'' |
30637
344e68882cd3
py3: replace os.environ with encoding.environ (part 4 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30314
diff
changeset
|
677 for k in encoding.environ: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
678 env += b"%s=%s\0" % (k, encoding.environ[k]) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
679 if not env: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
680 env = b'\0' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
681 env += b'\0' |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
682 |
39719
255d1885c7f8
py3: resolve Unicode issues around `hg serve` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39611
diff
changeset
|
683 args = subprocess.list2cmdline(pycompat.rapply(encoding.strfromlocal, args)) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
684 |
39719
255d1885c7f8
py3: resolve Unicode issues around `hg serve` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
39611
diff
changeset
|
685 # TODO: CreateProcessW on py3? |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
686 res = _kernel32.CreateProcessA( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
687 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
688 encoding.strtolocal(args), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
689 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
690 None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
691 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
692 _CREATE_NO_WINDOW, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
693 env, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
694 encoding.getcwd(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
695 ctypes.byref(si), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
696 ctypes.byref(pi), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
697 ) |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
698 if not res: |
46784
65f437c240f2
typing: disable a few errors when accessing Windows specific attributes
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
699 raise ctypes.WinError() # pytype: disable=module-attr |
13375
f1fa8f481c7c
port win32.py to using the Python ctypes library
Adrian Buehlmann <adrian@cadifra.com>
parents:
13374
diff
changeset
|
700 |
40928
576474baa209
win32: close the handles associated with a spawned child process
Matt Harbison <matt_harbison@yahoo.com>
parents:
39818
diff
changeset
|
701 _kernel32.CloseHandle(pi.hProcess) |
576474baa209
win32: close the handles associated with a spawned child process
Matt Harbison <matt_harbison@yahoo.com>
parents:
39818
diff
changeset
|
702 _kernel32.CloseHandle(pi.hThread) |
576474baa209
win32: close the handles associated with a spawned child process
Matt Harbison <matt_harbison@yahoo.com>
parents:
39818
diff
changeset
|
703 |
32676
4c3d9ee87382
win32: drop a py26 daemonizing hack
Matt Harbison <matt_harbison@yahoo.com>
parents:
32664
diff
changeset
|
704 return pi.dwProcessId |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
705 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
706 |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
707 def unlink(f): |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
708 '''try to implement POSIX' unlink semantics on Windows''' |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
709 |
21226
4898c37e03c0
win32: backout 1a9ebc83a74c
Steve Borho <steve@borho.org>
parents:
21193
diff
changeset
|
710 if os.path.isdir(f): |
4898c37e03c0
win32: backout 1a9ebc83a74c
Steve Borho <steve@borho.org>
parents:
21193
diff
changeset
|
711 # use EPERM because it is POSIX prescribed value, even though |
4898c37e03c0
win32: backout 1a9ebc83a74c
Steve Borho <steve@borho.org>
parents:
21193
diff
changeset
|
712 # unlink(2) on directories returns EISDIR on Linux |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
713 raise IOError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
714 errno.EPERM, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
715 r"Unlinking directory not permitted: '%s'" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
716 % encoding.strfromlocal(f), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
717 ) |
19159
1b329f8c7b24
windows: check target type before actual unlinking to follow POSIX semantics
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18959
diff
changeset
|
718 |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
719 # POSIX allows to unlink and rename open files. Windows has serious |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
720 # problems with doing that: |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
721 # - Calling os.unlink (or os.rename) on a file f fails if f or any |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
722 # hardlinked copy of f has been opened with Python's open(). There is no |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
723 # way such a file can be deleted or renamed on Windows (other than |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
724 # scheduling the delete or rename for the next reboot). |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
725 # - Calling os.unlink on a file that has been opened with Mercurial's |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
726 # posixfile (or comparable methods) will delay the actual deletion of |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
727 # the file for as long as the file is held open. The filename is blocked |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
728 # during that time and cannot be used for recreating a new file under |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
729 # that same name ("zombie file"). Directories containing such zombie files |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
730 # cannot be removed or moved. |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
731 # A file that has been opened with posixfile can be renamed, so we rename |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
732 # f to a random temporary name before calling os.unlink on it. This allows |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
733 # callers to recreate f immediately while having other readers do their |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
734 # implicit zombie filename blocking on a temporary name. |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
735 |
38783
e7aa113b14f7
global: use pycompat.xrange()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38533
diff
changeset
|
736 for tries in pycompat.xrange(10): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
737 temp = b'%s-%08x' % (f, random.randint(0, 0xFFFFFFFF)) |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
738 try: |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
739 os.rename(f, temp) # raises OSError EEXIST if temp exists |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
740 break |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24652
diff
changeset
|
741 except OSError as e: |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
742 if e.errno != errno.EEXIST: |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
743 raise |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
744 else: |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43077
diff
changeset
|
745 raise IOError(errno.EEXIST, "No usable temporary filename found") |
13775
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
746 |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
747 try: |
930efdc6bfa4
windows: move unlink to win32.py
Adrian Buehlmann <adrian@cadifra.com>
parents:
13379
diff
changeset
|
748 os.unlink(temp) |
13776
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
749 except OSError: |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
750 # The unlink might have failed because the READONLY attribute may heave |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
751 # been set on the original file. Rename works fine with READONLY set, |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
752 # but not os.unlink. Reset all attributes and try again. |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
753 _kernel32.SetFileAttributesA(temp, _FILE_ATTRIBUTE_NORMAL) |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
754 try: |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
755 os.unlink(temp) |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
756 except OSError: |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
757 # The unlink might have failed due to some very rude AV-Scanners. |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
758 # Leaking a tempfile is the lesser evil than aborting here and |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
759 # leaving some potentially serious inconsistencies. |
a2f0fdb1e488
win32: remove READONLY attribute on unlink
Adrian Buehlmann <adrian@cadifra.com>
parents:
13775
diff
changeset
|
760 pass |
13795
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
761 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40928
diff
changeset
|
762 |
13795
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
763 def makedir(path, notindexed): |
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
764 os.mkdir(path) |
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
765 if notindexed: |
43b5fe18ea6c
set NOT_CONTENT_INDEXED on .hg dir (issue2694)
Adrian Buehlmann <adrian@cadifra.com>
parents:
13776
diff
changeset
|
766 _kernel32.SetFileAttributesA(path, _FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) |