# HG changeset patch # User Pierre-Yves David # Date 1432162805 18000 # Node ID c2ec81891502662ebe2d3ad987bd0ea60ab1b60f # Parent 6e62a5b3442d98a2062cee32d193ff7b7217b843 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. diff -r 6e62a5b3442d -r c2ec81891502 mercurial/posix.py --- 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. diff -r 6e62a5b3442d -r c2ec81891502 mercurial/util.py --- a/mercurial/util.py Wed Jun 03 14:22:21 2015 -0700 +++ b/mercurial/util.py Wed May 20 18:00:05 2015 -0500 @@ -54,6 +54,7 @@ oslink = platform.oslink parsepatchoutput = platform.parsepatchoutput pconvert = platform.pconvert +poll = platform.poll popen = platform.popen posixfile = platform.posixfile quotecommand = platform.quotecommand diff -r 6e62a5b3442d -r c2ec81891502 mercurial/windows.py --- a/mercurial/windows.py Wed Jun 03 14:22:21 2015 -0700 +++ b/mercurial/windows.py Wed May 20 18:00:05 2015 -0500 @@ -371,6 +371,10 @@ '''check whether a stat result is an executable file''' return False +def poll(fds): + # see posix.py for description + raise NotImplementedError() + def readpipe(pipe): """Read all available data from a pipe.""" chunks = []