From e5ba06ff5d13b40cd840afe83ec63e38fa11c3c2 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Sun, 7 Feb 2016 13:29:17 +0100 Subject: calcurse-caldav: Add hook support Introduce pre-sync and post-sync hooks which need to be located under ~/.calcurse/caldav/hooks/ and are executed before/after synchronization with a CalDAV server. Also, add an example post-sync hook and change the example post-save hook such that it does not create tiny commits during synchronization. Signed-off-by: Lukas Fleischer --- contrib/caldav/calcurse-caldav.py | 18 ++++++++++++++++++ contrib/caldav/hooks/post-sync | 12 ++++++++++++ contrib/hooks/post-save | 4 ++++ 3 files changed, 34 insertions(+) create mode 100755 contrib/caldav/hooks/post-sync (limited to 'contrib') diff --git a/contrib/caldav/calcurse-caldav.py b/contrib/caldav/calcurse-caldav.py index 25a8d1a..c569009 100755 --- a/contrib/caldav/calcurse-caldav.py +++ b/contrib/caldav/calcurse-caldav.py @@ -350,6 +350,13 @@ def pull_objects(conn, syncdb, etagdict): return (added, deleted) +def run_hook(name): + hook_path = hookdir + '/' + name + if not os.path.exists(hook_path): + return + subprocess.call(hook_path, shell=True) + + # Initialize the XML namespace map. nsmap = {"D": "DAV:", "C": "urn:ietf:params:xml:ns:caldav"} @@ -357,6 +364,7 @@ nsmap = {"D": "DAV:", "C": "urn:ietf:params:xml:ns:caldav"} configfn = os.path.expanduser("~/.calcurse/caldav/config") lockfn = os.path.expanduser("~/.calcurse/caldav/lock") syncdbfn = os.path.expanduser("~/.calcurse/caldav/sync.db") +hookdir = os.path.expanduser("~/.calcurse/caldav/hooks/") # Parse command line arguments. parser = argparse.ArgumentParser('calcurse-caldav') @@ -372,6 +380,9 @@ parser.add_argument('--lockfile', action='store', dest='lockfn', parser.add_argument('--syncdb', action='store', dest='syncdbfn', default=syncdbfn, help='path to the calcurse-caldav sync DB') +parser.add_argument('--hookdir', action='store', dest='hookdir', + default=hookdir, + help='path to the calcurse-caldav hooks directory') parser.add_argument('-v', '--verbose', action='store_true', dest='verbose', default=False, help='print status messages to stdout') @@ -383,6 +394,7 @@ init = args.init is not None configfn = args.configfn lockfn = args.lockfn syncdbfn = args.syncdbfn +hookdir = args.hookdir verbose = args.verbose debug = args.debug @@ -449,6 +461,9 @@ elif ver < (4, 0, 0, 96): die('Incompatible calcurse binary detected. Version >=4.1.0 is required ' + 'to synchronize with CalDAV servers.') +# Run the pre-sync hook. +run_hook('pre-sync') + # Create lock file. if os.path.exists(lockfn): die('Leftover lock file detected. If there is no other synchronization ' + @@ -512,6 +527,9 @@ finally: # Remove lock file. os.remove(lockfn) +# Run the post-sync hook. +run_hook('post-sync') + # Print a summary to stdout. print("{} items imported, {} items removed locally.". format(local_new, local_del)) diff --git a/contrib/caldav/hooks/post-sync b/contrib/caldav/hooks/post-sync new file mode 100755 index 0000000..94b6ed3 --- /dev/null +++ b/contrib/caldav/hooks/post-sync @@ -0,0 +1,12 @@ +#!/bin/sh +# +# Copy this file into ~/.calcurse/caldav/hooks/ and mark it executable to +# automatically commit changes after syncing using Git. + +cd "$HOME"/.calcurse/ + +git add * +if ! git diff-index --quiet --cached HEAD; then + git commit -m "Automatic commit by the post-sync hook" +fi + diff --git a/contrib/hooks/post-save b/contrib/hooks/post-save index d68461a..e75ce1e 100755 --- a/contrib/hooks/post-save +++ b/contrib/hooks/post-save @@ -4,6 +4,10 @@ # automatically commit any changes to the calcurse data files using Git. cd "$HOME"/.calcurse/ + +# Do not make commits when synchronizing with a CalDAV server. +[ -f caldav/lock ] && exit + git add * if ! git diff-index --quiet --cached HEAD; then git commit -m "Automatic commit by the post-save hook" -- cgit v1.2.3