Commit 4bfd0b21 by Danyi Bence

Merge branch 'master' of ssh://giccero.cloud.ik.bme.hu/cloud

parents 9036c293 5dbeb820
#!/usr/bin/python
import os, os.path
from pyinotify import WatchManager, Notifier, ThreadedNotifier, EventsCodes, ProcessEvent, IN_DONT_FOLLOW, IN_CREATE, IN_MODIFY
import pwd
COUNT=5
wm = WatchManager()
mask = IN_CREATE | IN_MODIFY | IN_DONT_FOLLOW
"""
Register given file to ~/../.top dir as a symbolic link.
"""
def update_new(name):
norm = os.path.normpath(name)
if norm != name:
return # link
name = norm
if name.find("/.") != -1:
return # hidden file (or file in hidden dir)
home = pwd.getpwuid(os.stat(name).st_uid).pw_dir
if not name.startswith(home):
return # outside home
top_dir = os.path.normpath(os.path.join(home, "../.top"))
try:
os.mkdir(top_dir)
except OSError:
for f in os.listdir(top_dir):
if os.readlink(os.path.join(top_dir, f)) == name:
return # duplicate
for i in range(1, COUNT):
try:
os.rename(os.path.join(top_dir, str(i+1)), os.path.join(top_dir, str(i)))
except OSError as e:
pass
os.symlink(name, os.path.join(top_dir, str(COUNT)))
"""
Process inotify event.
"""
class Process(ProcessEvent):
def process_default(self, event):
if event.name:
update_new(os.path.join(event.path, event.name))
"""
Watch continuously file modifications in /home.
"""
def main():
notifier = Notifier(wm, Process())
wdd = wm.add_watch('/home', mask, rec=True)
while True: # loop forever
try:
# process the queue of events as explained above
notifier.process_events()
if notifier.check_events():
# read notified events and enqeue them
notifier.read_events()
except KeyboardInterrupt:
# destroy the inotify's instance on this interrupt (stop monitoring)
notifier.stop()
break
if __name__ == "__main__":
main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment