Mercurial > hg
comparison mercurial/util.py @ 2024:6328445b0e71
Fixes to testpid() for Windows.
Handle processes that no longer exist and processes that belong to another user.
Enables the lock breaking changes from d314a89fa4f1 and subsequently "fixes" the left over locks reported in bug 112.
author | Lee Cantey <lcantey@gmail.com> |
---|---|
date | Thu, 30 Mar 2006 18:20:08 -0800 |
parents | a8a618c57690 |
children | 581d9a8b5fb9 |
comparison
equal
deleted
inserted
replaced
2023:3bdd3bf17cfa | 2024:6328445b0e71 |
---|---|
533 pf = output_line[14:] | 533 pf = output_line[14:] |
534 if pf[0] == '`': | 534 if pf[0] == '`': |
535 pf = pf[1:-1] # Remove the quotes | 535 pf = pf[1:-1] # Remove the quotes |
536 return pf | 536 return pf |
537 | 537 |
538 try: # ActivePython can create hard links using win32file module | 538 try: # Mark Hammond's win32all package allows better functionality on Windows |
539 import win32api, win32con, win32file | 539 import win32api, win32con, win32file, pywintypes |
540 | 540 |
541 # create hard links using win32file module | |
541 def os_link(src, dst): # NB will only succeed on NTFS | 542 def os_link(src, dst): # NB will only succeed on NTFS |
542 win32file.CreateHardLink(dst, src) | 543 win32file.CreateHardLink(dst, src) |
543 | 544 |
544 def nlinks(pathname): | 545 def nlinks(pathname): |
545 """Return number of hardlinks for the given file.""" | 546 """Return number of hardlinks for the given file.""" |
552 return res[7] | 553 return res[7] |
553 except: | 554 except: |
554 return os.stat(pathname).st_nlink | 555 return os.stat(pathname).st_nlink |
555 | 556 |
556 def testpid(pid): | 557 def testpid(pid): |
557 '''return False if pid is dead, True if running or not known''' | 558 '''return True if pid is still running or unable to determine, False otherwise''' |
558 try: | 559 try: |
559 win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, | 560 handle = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION, False, pid) |
560 False, pid) | 561 if handle: |
561 except: | 562 status = win32process.GetExitCodeProcess(handle) |
562 return True | 563 if status == win32con.STILL_ACTIVE: |
564 return True | |
565 else: | |
566 return False | |
567 except pywintypes.error, details: | |
568 if details[0] == 87: # ERROR_INVALID_PARAMETER | |
569 return False | |
570 return True | |
563 | 571 |
564 except ImportError: | 572 except ImportError: |
565 def testpid(pid): | 573 def testpid(pid): |
566 '''return False if pid dead, True if running or not known''' | 574 '''return False if pid dead, True if running or not known''' |
567 return True | 575 return True |