mercurial/posix.py
changeset 25420 c2ec81891502
parent 24692 144883a8d0d4
child 25658 e93036747902
--- a/mercurial/posix.py	Wed Jun 03 14:22:21 2015 -0700
+++ b/mercurial/posix.py	Wed May 20 18:00:05 2015 -0500
@@ -8,6 +8,7 @@
 from i18n import _
 import encoding
 import os, sys, errno, stat, getpass, pwd, grp, socket, tempfile, unicodedata
+import select
 import fcntl, re
 
 posixfile = open
@@ -594,6 +595,19 @@
     '''check whether a stat result is an executable file'''
     return st and (st.st_mode & 0100 != 0)
 
+def poll(fds):
+    """block until something happens on any file descriptor
+
+    This is a generic helper that will check for any activity
+    (read, write.  exception) and return the list of touched files.
+
+    In unsupported cases, it will raise a NotImplementedError"""
+    try:
+        res = select.select(fds, fds, fds)
+    except ValueError: # out of range file descriptor
+        raise NotImplementedError()
+    return sorted(list(set(sum(res, []))))
+
 def readpipe(pipe):
     """Read all available data from a pipe."""
     # We can't fstat() a pipe because Linux will always report 0.