1"""Auto-commit hook for Fava. 2 3This mainly serves as an example how Fava's extension systems, which only 4really does hooks at the moment, works. 5""" 6# pylint: disable=missing-docstring 7# pragma: no cover - this is just an untested example 8import os 9import subprocess 10 11from fava.ext import FavaExtensionBase 12 13 14class AutoCommit(FavaExtensionBase): 15 def _run(self, args): 16 cwd = os.path.dirname(self.ledger.beancount_file_path) 17 subprocess.call(args, cwd=cwd, stdout=subprocess.DEVNULL) 18 19 def after_write_source(self, path, _): 20 message = "autocommit: file saved" 21 self._run(["git", "add", path]) 22 self._run(["git", "commit", "-m", message]) 23 24 def after_insert_metadata(self, *_): 25 message = "autocommit: metadata added" 26 self._run(["git", "commit", "-am", message]) 27 28 def after_insert_entry(self, entry): 29 message = f"autocommit: entry on {entry.date}" 30 self._run(["git", "commit", "-am", message]) 31 32 def after_entry_modified(self, entry, _): 33 message = f"autocommit: modified entry on {entry.date}" 34 self._run(["git", "commit", "-am", message]) 35