Mercurial > public > mercurial-scm > hg
annotate mercurial/win32.py @ 8421:b6d0fa8c7685
posixfile: remove posixfile_nt and fix import bug in windows.py
The posixfile_nt class has been superseded by posixfile in osutils.c,
which works on Windows NT and above. All other systems get the regular
python file class which is assigned to posixfile in posix.py (for POSIX)
and in the pure python version of osutils.py (for Win 9x or Windows NT
in pure mode).
author | Sune Foldager <cryo@cyanite.org> |
---|---|
date | Wed, 13 May 2009 21:36:16 +0200 |
parents | 79a12651d46b |
children | 284fda4cd093 |
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 # |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others |
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 |
8b2cd04a6e97
put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
6 # GNU General Public License version 2, incorporated herein by reference. |
8227
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
7 |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
8 """Utility functions that use win32 API. |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
9 |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
10 Mark Hammond's win32all package allows better functionality on |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
11 Windows. This module overrides definitions in util.py. If not |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
12 available, import of this module will fail, and generic code will be |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
13 used. |
0a9542703300
turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents:
8226
diff
changeset
|
14 """ |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
15 |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
16 import win32api |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
17 |
6216 | 18 import errno, os, sys, pywintypes, win32con, win32file, win32process |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3721
diff
changeset
|
19 import cStringIO, winerror |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7890
diff
changeset
|
20 import osutil, encoding |
6881
d2375bbee6d4
Folding correction and missing import
Remy Roy <remyroy@remyroy.com>
parents:
6880
diff
changeset
|
21 import util |
3877
abaee83ce0a6
Replace demandload with new demandimport
Matt Mackall <mpm@selenic.com>
parents:
3721
diff
changeset
|
22 from win32com.shell import shell,shellcon |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
23 |
7473
5185a24ce04e
exceptions should inherit the Exception class
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7427
diff
changeset
|
24 class WinError(Exception): |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
25 winerror_map = { |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
26 winerror.ERROR_ACCESS_DENIED: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
27 winerror.ERROR_ACCOUNT_DISABLED: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
28 winerror.ERROR_ACCOUNT_RESTRICTION: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
29 winerror.ERROR_ALREADY_ASSIGNED: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
30 winerror.ERROR_ALREADY_EXISTS: errno.EEXIST, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
31 winerror.ERROR_ARITHMETIC_OVERFLOW: errno.ERANGE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
32 winerror.ERROR_BAD_COMMAND: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
33 winerror.ERROR_BAD_DEVICE: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
34 winerror.ERROR_BAD_DRIVER_LEVEL: errno.ENXIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
35 winerror.ERROR_BAD_EXE_FORMAT: errno.ENOEXEC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
36 winerror.ERROR_BAD_FORMAT: errno.ENOEXEC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
37 winerror.ERROR_BAD_LENGTH: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
38 winerror.ERROR_BAD_PATHNAME: errno.ENOENT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
39 winerror.ERROR_BAD_PIPE: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
40 winerror.ERROR_BAD_UNIT: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
41 winerror.ERROR_BAD_USERNAME: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
42 winerror.ERROR_BROKEN_PIPE: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
43 winerror.ERROR_BUFFER_OVERFLOW: errno.ENAMETOOLONG, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
44 winerror.ERROR_BUSY: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
45 winerror.ERROR_BUSY_DRIVE: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
46 winerror.ERROR_CALL_NOT_IMPLEMENTED: errno.ENOSYS, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
47 winerror.ERROR_CANNOT_MAKE: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
48 winerror.ERROR_CANTOPEN: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
49 winerror.ERROR_CANTREAD: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
50 winerror.ERROR_CANTWRITE: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
51 winerror.ERROR_CRC: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
52 winerror.ERROR_CURRENT_DIRECTORY: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
53 winerror.ERROR_DEVICE_IN_USE: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
54 winerror.ERROR_DEV_NOT_EXIST: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
55 winerror.ERROR_DIRECTORY: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
56 winerror.ERROR_DIR_NOT_EMPTY: errno.ENOTEMPTY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
57 winerror.ERROR_DISK_CHANGE: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
58 winerror.ERROR_DISK_FULL: errno.ENOSPC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
59 winerror.ERROR_DRIVE_LOCKED: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
60 winerror.ERROR_ENVVAR_NOT_FOUND: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
61 winerror.ERROR_EXE_MARKED_INVALID: errno.ENOEXEC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
62 winerror.ERROR_FILENAME_EXCED_RANGE: errno.ENAMETOOLONG, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
63 winerror.ERROR_FILE_EXISTS: errno.EEXIST, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
64 winerror.ERROR_FILE_INVALID: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
65 winerror.ERROR_FILE_NOT_FOUND: errno.ENOENT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
66 winerror.ERROR_GEN_FAILURE: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
67 winerror.ERROR_HANDLE_DISK_FULL: errno.ENOSPC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
68 winerror.ERROR_INSUFFICIENT_BUFFER: errno.ENOMEM, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
69 winerror.ERROR_INVALID_ACCESS: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
70 winerror.ERROR_INVALID_ADDRESS: errno.EFAULT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
71 winerror.ERROR_INVALID_BLOCK: errno.EFAULT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
72 winerror.ERROR_INVALID_DATA: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
73 winerror.ERROR_INVALID_DRIVE: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
74 winerror.ERROR_INVALID_EXE_SIGNATURE: errno.ENOEXEC, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
75 winerror.ERROR_INVALID_FLAGS: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
76 winerror.ERROR_INVALID_FUNCTION: errno.ENOSYS, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
77 winerror.ERROR_INVALID_HANDLE: errno.EBADF, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
78 winerror.ERROR_INVALID_LOGON_HOURS: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
79 winerror.ERROR_INVALID_NAME: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
80 winerror.ERROR_INVALID_OWNER: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
81 winerror.ERROR_INVALID_PARAMETER: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
82 winerror.ERROR_INVALID_PASSWORD: errno.EPERM, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
83 winerror.ERROR_INVALID_PRIMARY_GROUP: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
84 winerror.ERROR_INVALID_SIGNAL_NUMBER: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
85 winerror.ERROR_INVALID_TARGET_HANDLE: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
86 winerror.ERROR_INVALID_WORKSTATION: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
87 winerror.ERROR_IO_DEVICE: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
88 winerror.ERROR_IO_INCOMPLETE: errno.EINTR, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
89 winerror.ERROR_LOCKED: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
90 winerror.ERROR_LOCK_VIOLATION: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
91 winerror.ERROR_LOGON_FAILURE: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
92 winerror.ERROR_MAPPED_ALIGNMENT: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
93 winerror.ERROR_META_EXPANSION_TOO_LONG: errno.E2BIG, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
94 winerror.ERROR_MORE_DATA: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
95 winerror.ERROR_NEGATIVE_SEEK: errno.ESPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
96 winerror.ERROR_NOACCESS: errno.EFAULT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
97 winerror.ERROR_NONE_MAPPED: errno.EINVAL, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
98 winerror.ERROR_NOT_ENOUGH_MEMORY: errno.ENOMEM, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
99 winerror.ERROR_NOT_READY: errno.EAGAIN, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
100 winerror.ERROR_NOT_SAME_DEVICE: errno.EXDEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
101 winerror.ERROR_NO_DATA: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
102 winerror.ERROR_NO_MORE_SEARCH_HANDLES: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
103 winerror.ERROR_NO_PROC_SLOTS: errno.EAGAIN, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
104 winerror.ERROR_NO_SUCH_PRIVILEGE: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
105 winerror.ERROR_OPEN_FAILED: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
106 winerror.ERROR_OPEN_FILES: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
107 winerror.ERROR_OPERATION_ABORTED: errno.EINTR, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
108 winerror.ERROR_OUTOFMEMORY: errno.ENOMEM, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
109 winerror.ERROR_PASSWORD_EXPIRED: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
110 winerror.ERROR_PATH_BUSY: errno.EBUSY, |
2176
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
111 winerror.ERROR_PATH_NOT_FOUND: errno.ENOENT, |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
112 winerror.ERROR_PIPE_BUSY: errno.EBUSY, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
113 winerror.ERROR_PIPE_CONNECTED: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
114 winerror.ERROR_PIPE_LISTENING: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
115 winerror.ERROR_PIPE_NOT_CONNECTED: errno.EPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
116 winerror.ERROR_PRIVILEGE_NOT_HELD: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
117 winerror.ERROR_READ_FAULT: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
118 winerror.ERROR_SEEK: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
119 winerror.ERROR_SEEK_ON_DEVICE: errno.ESPIPE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
120 winerror.ERROR_SHARING_BUFFER_EXCEEDED: errno.ENFILE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
121 winerror.ERROR_SHARING_VIOLATION: errno.EACCES, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
122 winerror.ERROR_STACK_OVERFLOW: errno.ENOMEM, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
123 winerror.ERROR_SWAPERROR: errno.ENOENT, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
124 winerror.ERROR_TOO_MANY_MODULES: errno.EMFILE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
125 winerror.ERROR_TOO_MANY_OPEN_FILES: errno.EMFILE, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
126 winerror.ERROR_UNRECOGNIZED_MEDIA: errno.ENXIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
127 winerror.ERROR_UNRECOGNIZED_VOLUME: errno.ENODEV, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
128 winerror.ERROR_WAIT_NO_CHILDREN: errno.ECHILD, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
129 winerror.ERROR_WRITE_FAULT: errno.EIO, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
130 winerror.ERROR_WRITE_PROTECT: errno.EROFS, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
131 } |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
132 |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
133 def __init__(self, err): |
8328
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
134 try: |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
135 # unpack a pywintypes.error tuple |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
136 self.win_errno, self.win_function, self.win_strerror = err |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
137 except ValueError: |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
138 # get attributes from a WindowsError |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
139 self.win_errno = err.winerror |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
140 self.win_function = None |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
141 self.win_strerror = err.strerror |
91f1fe78454c
win32: allow catching of both pywintypes.error and WindowsError
Bryan O'Sullivan <bos@serpentine.com>
parents:
8227
diff
changeset
|
142 self.win_strerror = self.win_strerror.rstrip('.') |
2176
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
143 |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
144 class WinIOError(WinError, IOError): |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
145 def __init__(self, err, filename=None): |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
146 WinError.__init__(self, err) |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
147 IOError.__init__(self, self.winerror_map.get(self.win_errno, 0), |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
148 self.win_strerror) |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
149 self.filename = filename |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
150 |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
151 class WinOSError(WinError, OSError): |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
152 def __init__(self, err): |
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
153 WinError.__init__(self, err) |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
154 OSError.__init__(self, self.winerror_map.get(self.win_errno, 0), |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
155 self.win_strerror) |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
156 |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
157 def os_link(src, dst): |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
158 try: |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
159 win32file.CreateHardLink(dst, src) |
5879
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
160 # CreateHardLink sometimes succeeds on mapped drives but |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
161 # following nlinks() returns 1. Check it now and bail out. |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
162 if nlinks(src) < 2: |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
163 try: |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
164 win32file.DeleteFile(dst) |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
165 except: |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
166 pass |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
167 # Fake hardlinking error |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
168 raise WinOSError((18, 'CreateHardLink', 'The system cannot ' |
cacfeee38870
util_win32: make os_link more robust (issue 761)
Patrick Mezard <pmezard@gmail.com>
parents:
5611
diff
changeset
|
169 'move the file to a different disk drive')) |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
170 except pywintypes.error, details: |
2176
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
171 raise WinOSError(details) |
7778
82f7145b304c
Don't fail on clone on win98 (issue1492)
Matt Mackall <mpm@selenic.com>
parents:
7473
diff
changeset
|
172 except NotImplementedError: # Another fake error win Win98 |
82f7145b304c
Don't fail on clone on win98 (issue1492)
Matt Mackall <mpm@selenic.com>
parents:
7473
diff
changeset
|
173 raise WinOSError((18, 'CreateHardLink', 'Hardlinking not supported')) |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
174 |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
175 def nlinks(pathname): |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
176 """Return number of hardlinks for the given file.""" |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
177 try: |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
178 fh = win32file.CreateFile(pathname, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
179 win32file.GENERIC_READ, win32file.FILE_SHARE_READ, |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
180 None, win32file.OPEN_EXISTING, 0, None) |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
181 res = win32file.GetFileInformationByHandle(fh) |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
182 fh.Close() |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
183 return res[7] |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
184 except pywintypes.error: |
2448
b77a2ef61b81
replace os.stat with os.lstat in some where.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2313
diff
changeset
|
185 return os.lstat(pathname).st_nlink |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
186 |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
187 def testpid(pid): |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
188 '''return True if pid is still running or unable to |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
189 determine, False otherwise''' |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
190 try: |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
191 handle = win32api.OpenProcess( |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
192 win32con.PROCESS_QUERY_INFORMATION, False, pid) |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
193 if handle: |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
194 status = win32process.GetExitCodeProcess(handle) |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
195 return status == win32con.STILL_ACTIVE |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
196 except pywintypes.error, details: |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
197 return details[0] != winerror.ERROR_INVALID_PARAMETER |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
198 return True |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
199 |
6006
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
200 def lookup_reg(key, valname=None, scope=None): |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
201 ''' Look up a key/value name in the Windows registry. |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
202 |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
203 valname: value name. If unspecified, the default value for the key |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
204 is used. |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
205 scope: optionally specify scope for registry lookup, this can be |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
206 a sequence of scopes to look up in order. Default (CURRENT_USER, |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
207 LOCAL_MACHINE). |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
208 ''' |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
209 try: |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
210 from _winreg import HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, \ |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
211 QueryValueEx, OpenKey |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
212 except ImportError: |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
213 return None |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
214 |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
215 if scope is None: |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
216 scope = (HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE) |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
217 elif not isinstance(scope, (list, tuple)): |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
218 scope = (scope,) |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
219 for s in scope: |
6880
892806b3fc0f
util: disinfect lookup_reg strings (issue1126)
Matt Mackall <mpm@selenic.com>
parents:
6216
diff
changeset
|
220 try: |
6881
d2375bbee6d4
Folding correction and missing import
Remy Roy <remyroy@remyroy.com>
parents:
6880
diff
changeset
|
221 val = QueryValueEx(OpenKey(s, key), valname)[0] |
6880
892806b3fc0f
util: disinfect lookup_reg strings (issue1126)
Matt Mackall <mpm@selenic.com>
parents:
6216
diff
changeset
|
222 # never let a Unicode string escape into the wild |
7948
de377b1a9a84
move encoding bits from util to encoding
Matt Mackall <mpm@selenic.com>
parents:
7890
diff
changeset
|
223 return encoding.tolocal(val.encode('UTF-8')) |
6880
892806b3fc0f
util: disinfect lookup_reg strings (issue1126)
Matt Mackall <mpm@selenic.com>
parents:
6216
diff
changeset
|
224 except EnvironmentError: |
892806b3fc0f
util: disinfect lookup_reg strings (issue1126)
Matt Mackall <mpm@selenic.com>
parents:
6216
diff
changeset
|
225 pass |
6006
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
5969
diff
changeset
|
226 |
2117 | 227 def system_rcpath_win32(): |
2054
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
228 '''return default os-specific hgrc search path''' |
e18beba54a7e
fix exception handling on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
229 proc = win32api.GetCurrentProcess() |
2285
0912f807b7ff
win98: fall back to win32api.GetModuleFileName if needed.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2284
diff
changeset
|
230 try: |
0912f807b7ff
win98: fall back to win32api.GetModuleFileName if needed.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2284
diff
changeset
|
231 # This will fail on windows < NT |
0912f807b7ff
win98: fall back to win32api.GetModuleFileName if needed.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2284
diff
changeset
|
232 filename = win32process.GetModuleFileNameEx(proc, 0) |
0912f807b7ff
win98: fall back to win32api.GetModuleFileName if needed.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2284
diff
changeset
|
233 except: |
0912f807b7ff
win98: fall back to win32api.GetModuleFileName if needed.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2284
diff
changeset
|
234 filename = win32api.GetModuleFileName(0) |
5619
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
235 # Use mercurial.ini found in directory with hg.exe |
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
236 progrc = os.path.join(os.path.dirname(filename), 'mercurial.ini') |
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
237 if os.path.isfile(progrc): |
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
238 return [progrc] |
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
239 # else look for a system rcpath in the registry |
5583
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
240 try: |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
241 value = win32api.RegQueryValue( |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
242 win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Mercurial') |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
243 rcpath = [] |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
244 for p in value.split(os.pathsep): |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
245 if p.lower().endswith('mercurial.ini'): |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
246 rcpath.append(p) |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
247 elif os.path.isdir(p): |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
248 for f, kind in osutil.listdir(p): |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
249 if f.endswith('.rc'): |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
250 rcpath.append(os.path.join(p, f)) |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
251 return rcpath |
1b5b81d9039b
win32: read system rcpath from registry
Steve Borho <steve@borho.org>
parents:
4998
diff
changeset
|
252 except pywintypes.error: |
5619
55d3e845736a
win32: favor local mercurial.ini over registry key
Steve Borho <steve@borho.org>
parents:
5612
diff
changeset
|
253 return [] |
2176
9b42304d9896
fix file handling bugs on windows.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2117
diff
changeset
|
254 |
4098
c08b6af023bc
util_win32.py: fix user_rcpath
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
3891
diff
changeset
|
255 def user_rcpath_win32(): |
2284
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
256 '''return os-specific hgrc search path to the user dir''' |
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
257 userdir = os.path.expanduser('~') |
7427
f21e3d0e335b
util_win32: fix Windows version checking (issue1358)
Patrick Mezard <pmezard@gmail.com>
parents:
7390
diff
changeset
|
258 if sys.getwindowsversion()[3] != 2 and userdir == '~': |
2284
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
259 # We are on win < nt: fetch the APPDATA directory location and use |
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
260 # the parent directory as the user home dir. |
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
261 appdir = shell.SHGetPathFromIDList( |
2313
a600d9997521
Fixed typo (qshell instead of shell) in win98 code (see issue244).
Thomas Arendsen Hein <thomas@intevation.de>
parents:
2285
diff
changeset
|
262 shell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA)) |
2284
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
263 userdir = os.path.dirname(appdir) |
6153
09a8be3e5bfb
Also search for .hgrc if mercurial.ini not found on windows
Stefan Rank <strank(AT)strank(DOT)info>
parents:
6012
diff
changeset
|
264 return [os.path.join(userdir, 'mercurial.ini'), |
09a8be3e5bfb
Also search for .hgrc if mercurial.ini not found on windows
Stefan Rank <strank(AT)strank(DOT)info>
parents:
6012
diff
changeset
|
265 os.path.join(userdir, '.hgrc')] |
2284
d6392a7c03dd
On win98 os.path.expanuser('~') does not result in a useable directory.
Volker Kleinfeld <Volker.Kleinfeld@gmx.de>
parents:
2250
diff
changeset
|
266 |
7890
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
267 def getuser(): |
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
268 '''return name of current user''' |
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
269 return win32api.GetUserName() |
4672
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
270 |
4803
7549cd526b7f
Fix serve on Windows without win32* modules.
Nathan Jones <nathanj@insightbb.com>
parents:
4672
diff
changeset
|
271 def set_signal_handler_win32(): |
4672
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
272 """Register a termination handler for console events including |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
273 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
|
274 operations. |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
275 """ |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
276 def handler(event): |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
277 win32process.ExitProcess(1) |
272c0a09b203
Handle CTRL+C in serve under Windows.
Marcos Chaves <marcos.nospam@gmail.com>
parents:
4407
diff
changeset
|
278 win32api.SetConsoleCtrlHandler(handler) |
7890
e710f0f592b2
util: split out posix, windows, and win32 modules
Matt Mackall <mpm@selenic.com>
parents:
7778
diff
changeset
|
279 |