[PATCH] util: add fswatcher class

Sune Foldager cryo at cyanite.org
Wed May 25 08:56:04 CDT 2011


FYI, please don't push this (mpm and others), as I have, apart from addressing
some of the points below, also added a few other things. :)

-Sune

On 2011-05-25 14:49, Benoit Boissinot wrote:
>On Wed, May 25, 2011 at 2:30 PM, Sune Foldager <cryo at cyanite.org> wrote:
>> # HG changeset patch
>> # User Sune Foldager <cryo at cyanite.org>
>> # Date 1306326237 -7200
>> # Node ID 0dedf75d80c4bf4f38ae240e7bba747f5a2d6f6f
>> # Parent  a6b543e053058c39b52e2b7c1e9a4b7c14c66a56
>> util: add fswatcher class
>>
>> Used to watch files and directories for modifications.
>>
>> diff -r a6b543e05305 -r 0dedf75d80c4 mercurial/util.py
>> --- a/mercurial/util.py Wed May 25 10:06:17 2011 +0200
>> +++ b/mercurial/util.py Wed May 25 14:23:57 2011 +0200
>> @@ -861,6 +861,36 @@
>>             limit -= len(s)
>>         yield s
>>
>> +class fswatcher(object):
>> +    """Watches files and directories for changes."""
>> +
>> +    def __init__(self, *paths):
>> +        """create an fswatcher for the given paths."""
>> +        self.paths = paths
>> +        self.mtimes = {}
>> +        self.check()
>> +
>> +    def check(self):
>> +        """return a list of changes since last call."""
>> +        changes = []
>> +        oldmtimes = self.mtimes
>> +        mtimes = {}
>> +        ctime = int(time.time())
>> +        for p in self.paths:
>> +            try:
>> +                st = os.stat(p)
>> +                mtime = st.st_mtime
>> +                if mtime == ctime:
>
>if mtime == ctime and p not in oldmtimes
>(and just curious, why did you remove the size check?)
>
>> +                    mtime -= 1
>> +                mtimes[p] = mtime
>> +                if oldmtimes.get(p) != mtime:
>> +                    changes.append(p)
>> +            except OSError:
>
>check errno == ENOENT, raise otherwise?
>
>cheers,
>
>Benoit


More information about the Mercurial-devel mailing list