mercurial/util.py
changeset 2024 6328445b0e71
parent 1991 a8a618c57690
child 2025 581d9a8b5fb9
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