~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/win32utils.py

  • Committer: Jelmer Vernooij
  • Date: 2011-04-09 19:25:42 UTC
  • mto: (5777.5.1 inventoryworkingtree)
  • mto: This revision was merged to the branch mainline in revision 5781.
  • Revision ID: jelmer@samba.org-20110409192542-8bbedp36s7nj928e
Split InventoryTree out of Tree.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
import sys
26
26
 
27
27
from bzrlib import cmdline
28
 
from bzrlib.i18n import gettext
29
28
 
30
29
# Windows version
31
30
if sys.platform == 'win32':
129
128
            ctypes.byref(mem_struct),
130
129
            ctypes.sizeof(mem_struct))
131
130
        if not ret:
132
 
            trace.note(gettext('Failed to GetProcessMemoryInfo()'))
 
131
            trace.note('Failed to GetProcessMemoryInfo()')
133
132
            return
134
133
        info = {'PageFaultCount': mem_struct.PageFaultCount,
135
134
                'PeakWorkingSetSize': mem_struct.PeakWorkingSetSize,
150
149
        proc = win32process.GetCurrentProcess()
151
150
        info = win32process.GetProcessMemoryInfo(proc)
152
151
    else:
153
 
        trace.note(gettext('Cannot debug memory on win32 without ctypes'
154
 
                   ' or win32process'))
 
152
        trace.note('Cannot debug memory on win32 without ctypes'
 
153
                   ' or win32process')
155
154
        return
156
155
    if short:
157
156
        # using base-2 units (see HACKING.txt).
158
 
        trace.note(gettext('WorkingSize {0:>7}KiB'
159
 
                   '\tPeakWorking {1:>7}KiB\t{2}').format(
 
157
        trace.note('WorkingSize %7dKiB'
 
158
                   '\tPeakWorking %7dKiB\t%s',
160
159
                   info['WorkingSetSize'] / 1024,
161
160
                   info['PeakWorkingSetSize'] / 1024,
162
 
                   message))
 
161
                   message)
163
162
        return
164
163
    if message:
165
164
        trace.note('%s', message)
166
 
    trace.note(gettext('WorkingSize       %8d KiB'), info['WorkingSetSize'] / 1024)
167
 
    trace.note(gettext('PeakWorking       %8d KiB'), info['PeakWorkingSetSize'] / 1024)
168
 
    trace.note(gettext('PagefileUsage     %8d KiB'), info.get('PagefileUsage', 0) / 1024)
169
 
    trace.note(gettext('PeakPagefileUsage %8d KiB'),
 
165
    trace.note('WorkingSize       %8d KiB', info['WorkingSetSize'] / 1024)
 
166
    trace.note('PeakWorking       %8d KiB', info['PeakWorkingSetSize'] / 1024)
 
167
    trace.note('PagefileUsage     %8d KiB', info.get('PagefileUsage', 0) / 1024)
 
168
    trace.note('PeakPagefileUsage %8d KiB',
170
169
               info.get('PeakPagefileUsage', 0) / 1024)
171
 
    trace.note(gettext('PrivateUsage      %8d KiB'), info.get('PrivateUsage', 0) / 1024)
172
 
    trace.note(gettext('PageFaultCount    %8d'), info.get('PageFaultCount', 0))
 
170
    trace.note('PrivateUsage      %8d KiB', info.get('PrivateUsage', 0) / 1024)
 
171
    trace.note('PageFaultCount    %8d', info.get('PageFaultCount', 0))
173
172
 
174
173
 
175
174
def get_console_size(defaultx=80, defaulty=25):
469
468
 
470
469
 
471
470
def get_app_path(appname):
472
 
    r"""Look up in Windows registry for full path to application executable.
 
471
    """Look up in Windows registry for full path to application executable.
473
472
    Typically, applications create subkey with their basename
474
473
    in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
475
474
 
577
576
        return argv
578
577
else:
579
578
    get_unicode_argv = None
580
 
 
581
 
 
582
 
if has_win32api:
583
 
    def _pywin32_is_local_pid_dead(pid):
584
 
        """True if pid doesn't correspond to live process on this machine"""
585
 
        try:
586
 
            handle = win32api.OpenProcess(1, False, pid) # PROCESS_TERMINATE
587
 
        except pywintypes.error, e:
588
 
            if e[0] == 5: # ERROR_ACCESS_DENIED
589
 
                # Probably something alive we're not allowed to kill
590
 
                return False
591
 
            elif e[0] == 87: # ERROR_INVALID_PARAMETER
592
 
                return True
593
 
            raise
594
 
        handle.close()
595
 
        return False
596
 
    is_local_pid_dead = _pywin32_is_local_pid_dead
597
 
elif has_ctypes and sys.platform == 'win32':
598
 
    from ctypes.wintypes import BOOL, DWORD, HANDLE
599
 
    _kernel32 = ctypes.windll.kernel32
600
 
    _CloseHandle = ctypes.WINFUNCTYPE(BOOL, HANDLE)(
601
 
        ("CloseHandle", _kernel32))
602
 
    _OpenProcess = ctypes.WINFUNCTYPE(HANDLE, DWORD, BOOL, DWORD)(
603
 
        ("OpenProcess", _kernel32))
604
 
    def _ctypes_is_local_pid_dead(pid):
605
 
        """True if pid doesn't correspond to live process on this machine"""
606
 
        handle = _OpenProcess(1, False, pid) # PROCESS_TERMINATE
607
 
        if not handle:
608
 
            errorcode = ctypes.GetLastError()
609
 
            if errorcode == 5: # ERROR_ACCESS_DENIED
610
 
                # Probably something alive we're not allowed to kill
611
 
                return False
612
 
            elif errorcode == 87: # ERROR_INVALID_PARAMETER
613
 
                return True
614
 
            raise ctypes.WinError(errorcode)
615
 
        _CloseHandle(handle)
616
 
        return False
617
 
    is_local_pid_dead = _ctypes_is_local_pid_dead