Comments (8)
I've done some digging, the reason no directory move is happening is that in InotifyEmitter.queue_events
, inotify.read_events()
returns the MOVED_FROM
event the first time it is called, and the MOVED_TO
event the next time it is called. Because the events don't arrive together, moved_from_events
is empty (it gets reset every time the function is called) and the KeyError
is raised, causing a silent failure.
Presumably read_events
is expected to return both events at once. But I've got pretty consistent behaviour.
Could moved_from_events
be made slightly more long-lived? Or is the cookie not a very unique key?
from watchdog.
This patch (https://gist.github.com/763397) seems to fix the directory move not appearing in the log (moved_from_events
is persisted until a set of events is received which doesn't contain any move operations), but the path name is still being reported incorrectly.
Looks like it's coming from the _path_for_wd
dictionary, which is not updated on a directory move.
from watchdog.
I've pushed a commit to my fork ( https://github.com/gfxmonk/watchdog/commit/167e700b9e81143c7ddff6dac04bbaba515a1ef0 ) which fixes both of these problems. It might not be the way you would prefer to fix it though (its's not exactly elegant), so feel free to disregard it ;)
from watchdog.
Can you please send a pull request?
from watchdog.
I've cherry picked the changes and they should be available in git HEAD.
Could you please check whether these changes work for you and then
close this issue if it is fixed? I've also added you to the AUTHORS list.
Thank you. =)
from watchdog.
Yep, cheers - all fixed. Sorry about the formatting, I have vim configured for tabs so I think the conversion was not so great ;)
from watchdog.
This fix is actually committed into the master branch? Because I've found a problem, this is the scenario:
watchdog listens on folder A, my program will mirror copies on folder B (and do some other processing things, like image processing).
To test the program I've created a script that does the following things:
- copy a folder F with images and sub-folder S in A
- rename F to N
- delete N
All this actions need to be performed also on the mirror directory B.
The first two points seems to works, at the point 3, the program begin to delete files in B/N, but when try to delete files in B/N/S it will show error because try to delete B/F/S that of course doesn't exists more.
I hope that the problem is clear, in case I just try to explain better :).
Thanks!
from watchdog.
PS: the test is done under Arch Linux with kernel 3.4.4, using python 2.7.
from watchdog.
Related Issues (20)
- Inconsistent Triggering of on_created Event HOT 4
- On_moved not able to detect moved file/folder on certain path.
- Version 1.0.2 is not available in PyPi HOT 2
- failure to build on macos with `-Werror=unguarded-availability-new` HOT 4
- Installation fails with 4.0.0 HOT 25
- Unable to find installation candidates on v4.0.0 HOT 6
- silently fails if path is file HOT 7
- types: Types checks reporting issues after updating watchdog to 3.0.0. Same issue with 4.0.0 HOT 8
- Questions about Copilot + Open Source Software Hierarchy
- [Question] Is it possible to execute manuall poll?
- Is it possible to prevent being connected to named pipe on Windows platform?
- [Feature] Allow adding `ObservedWatch` without handlers
- Improve typing references for events
- Moved file memory leak
- [Question] is watchdog support s3fs-fuse mount aws s3 bucket to file system directory monitor
- Feature Request: Allow functions as event handlers
- Race condition in Observer.start() and observer.schedule() HOT 1
- Threads not cleaning up when closing Observer if using Eventlet. HOT 1
- Ambiguity in setting FileClosedEvent in filter HOT 5
- class FSEventsObserver.schedule() is missing parameter 'event_filter'
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from watchdog.