mirror of https://github.com/grpc/grpc.git
Change on 2015/01/07 by ctiller <ctiller@google.com> ------------- Created by MOE: http://code.google.com/p/moe-java MOE_MIGRATED_REVID=83451760pull/1/merge
parent
e5206aace9
commit
3040cb7c43
3 changed files with 189 additions and 69 deletions
@ -0,0 +1,46 @@ |
||||
"""Helper to watch a (set) of directories for modifications.""" |
||||
|
||||
import os |
||||
import threading |
||||
import time |
||||
|
||||
|
||||
class DirWatcher(object): |
||||
"""Helper to watch a (set) of directories for modifications.""" |
||||
|
||||
def __init__(self, paths): |
||||
if isinstance(paths, basestring): |
||||
paths = [paths] |
||||
self._mu = threading.Lock() |
||||
self._done = False |
||||
self.paths = list(paths) |
||||
self.lastrun = time.time() |
||||
self._cache = self._calculate() |
||||
|
||||
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: |
||||
st = os.stat(os.path.join(root, f)) |
||||
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): |
||||
self._mu.acquire() |
||||
try: |
||||
if time.time() - self.lastrun > 1: |
||||
self._cache = self._calculate() |
||||
self.lastrun = time.time() |
||||
return self._cache |
||||
finally: |
||||
self._mu.release() |
||||
|
Loading…
Reference in new issue