Mercurial > hg > mercurial-crew
changeset 25954:c2ec81891502
util: add a simple poll utility
We'll use it to detect when a sshpeer have server output to be displayed.
The implementation is super basic because all case support is not the focus of
this series.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 20 May 2015 18:00:05 -0500 |
parents | 6e62a5b3442d |
children | 3dd3ccf7b807 |
files | mercurial/posix.py mercurial/util.py mercurial/windows.py |
diffstat | 3 files changed, 19 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/posix.py +++ b/mercurial/posix.py @@ -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.