--- /dev/null
+import sys
+import time
+import logging
+from threading import Thread
+
+from watchdog.observers import Observer
+from watchdog.events import LoggingEventHandler, FileSystemEventHandler
+
+from git import *
+
+logging.basicConfig(level=logging.INFO,
+ format='%(asctime)s - %(message)s',
+ datefmt='%Y-%m-%d %H:%M:%S')
+
+
+class GIXEventHandler(FileSystemEventHandler):
+
+ def __init__(self, git):
+ super(GIXEventHandler, self).__init__()
+ self.git = git
+ self.message = ' '
+
+ def what(self, event):
+ return 'directory' if event.is_directory else 'file'
+
+ def log(self, action, event):
+ self.message = "%s %s: %s" % (action, self.what(event), event.src_path)
+ logging.info(self.message)
+
+ def commit(self):
+ self.git.commit(a='', m=' "' + self.message + '"')
+
+ def on_moved(self, event):
+ super(GIXEventHandler, self).on_moved(event)
+ self.log("Moved", event)
+ self.commit()
+
+ def on_created(self, event):
+ super(GIXEventHandler, self).on_created(event)
+ self.log("Created", event)
+ self.git.add(event.src_path)
+ self.commit()
+
+ def on_deleted(self, event):
+ super(GIXEventHandler, self).on_deleted(event)
+ self.log("Deleted", event)
+ self.commit()
+
+ def on_modified(self, event):
+ super(GIXEventHandler, self).on_modified(event)
+ self.log("Modified", event)
+ self.commit()
+
+
+
+
+class GIX(Thread):
+
+ def __init__(self, path):
+ Thread.__init__(self)
+ self.path = path
+ self.repo = Repo(self.path)
+ self.git = self.repo.git
+ self.event_handler = GIXEventHandler(self.git)
+ self.observer = Observer()
+ self.observer.schedule(self.event_handler, path, recursive=True)
+
+ def run(self):
+ self.observer.start()
+ self.observer.join()
+
+ def stop(self):
+ self.observer.stop()
+
+if __name__ == "__main__":
+ path = sys.argv[1] if len(sys.argv) > 1 else '.'
+ gix = GIX(path)
+ gix.start()