| Index: third_party/grpc/tools/run_tests/watch_dirs.py
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/websocket/workers/resources/echo_wsh.py b/third_party/grpc/tools/run_tests/watch_dirs.py
|
| similarity index 53%
|
| copy from third_party/WebKit/LayoutTests/http/tests/websocket/workers/resources/echo_wsh.py
|
| copy to third_party/grpc/tools/run_tests/watch_dirs.py
|
| index 429f58186e3fce43dc21e81e0f9d7e20c7e0bf70..21ef23e158079b6f53ffa6b3b74e8ac03cb17b0f 100644
|
| --- a/third_party/WebKit/LayoutTests/http/tests/websocket/workers/resources/echo_wsh.py
|
| +++ b/third_party/grpc/tools/run_tests/watch_dirs.py
|
| @@ -1,4 +1,4 @@
|
| -# Copyright 2010, Google Inc.
|
| +# Copyright 2015, Google Inc.
|
| # All rights reserved.
|
| #
|
| # Redistribution and use in source and binary forms, with or without
|
| @@ -27,20 +27,49 @@
|
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| +"""Helper to watch a (set) of directories for modifications."""
|
|
|
| -from mod_pywebsocket import msgutil
|
| +import os
|
| +import time
|
|
|
|
|
| -_GOODBYE_MESSAGE = 'Goodbye'
|
| +class DirWatcher(object):
|
| + """Helper to watch a (set) of directories for modifications."""
|
|
|
| + def __init__(self, paths):
|
| + if isinstance(paths, basestring):
|
| + paths = [paths]
|
| + self._done = False
|
| + self.paths = list(paths)
|
| + self.lastrun = time.time()
|
| + self._cache = self._calculate()
|
|
|
| -def web_socket_do_extra_handshake(request):
|
| - pass # Always accept.
|
| + def _calculate(self):
|
| + """Walk over all subscribed paths, check most recent mtime."""
|
| + most_recent_change = None
|
| + for path in self.paths:
|
| + if not os.path.exists(path):
|
| + continue
|
| + if not os.path.isdir(path):
|
| + continue
|
| + for root, _, files in os.walk(path):
|
| + for f in files:
|
| + if f and f[0] == '.': continue
|
| + try:
|
| + st = os.stat(os.path.join(root, f))
|
| + except OSError as e:
|
| + if e.errno == os.errno.ENOENT:
|
| + continue
|
| + raise
|
| + if most_recent_change is None:
|
| + most_recent_change = st.st_mtime
|
| + else:
|
| + most_recent_change = max(most_recent_change, st.st_mtime)
|
| + return most_recent_change
|
|
|
| + def most_recent_change(self):
|
| + if time.time() - self.lastrun > 1:
|
| + self._cache = self._calculate()
|
| + self.lastrun = time.time()
|
| + return self._cache
|
|
|
| -def web_socket_transfer_data(request):
|
| - while True:
|
| - line = msgutil.receive_message(request)
|
| - msgutil.send_message(request, line)
|
| - if line == _GOODBYE_MESSAGE:
|
| - return
|
|
|