From 9f943527a41af4e68dd05ef208ba05666a37e2da Mon Sep 17 00:00:00 2001
From: Richard Hartmann <richih@debian.org>
Date: Mon, 20 Oct 2014 22:37:06 +0200
Subject: [PATCH] vcsh: Add support for overlay functions

---
 doc/vcsh.1.ronn | 11 +++++++++++
 vcsh            |  9 +++++++++
 2 files changed, 20 insertions(+)

diff --git a/doc/vcsh.1.ronn b/doc/vcsh.1.ronn
index 05da4fa..ebc9896 100644
--- a/doc/vcsh.1.ronn
+++ b/doc/vcsh.1.ronn
@@ -254,6 +254,17 @@ Available hooks are <pre-clone>, <post-clone>, <post-clone-retired>,
 If you need more, vcsh is trivial to patch, but please let upstream know so
 we can ship them by default.
 
+## OVERLAY SYSTEM
+
+`vcsh` also provides an overlay system. Similar to hooks, the recommended
+locations are <$XDG_CONFIG_HOME/vcsh/overlays-available> and
+<$XDG_CONFIG_HOME/vcsh/overlays-enabled>.
+
+Overlays follow the same rules as hooks and you are free to overwrite any
+and all functions. As the overlays will be sourced and you are replacing
+arbitrary functions, any and all features may stop working, or you may even
+lose data. You have been warned.
+
 ## DETAILED HOWTO AND FURTHER READING
 
 Manpages are often short and sometimes useless to glean best practices from.
diff --git a/vcsh b/vcsh
index 0b4c452..301151a 100755
--- a/vcsh
+++ b/vcsh
@@ -75,6 +75,7 @@ fi
 # Read defaults
 : ${VCSH_REPO_D:="$XDG_CONFIG_HOME/vcsh/repo.d"}
 : ${VCSH_HOOK_D:="$XDG_CONFIG_HOME/vcsh/hooks-enabled"}
+: ${VCSH_OVERLAY_D:="$XDG_CONFIG_HOME/vcsh/overlays-enabled"}
 : ${VCSH_BASE:="$HOME"}
 : ${VCSH_GITIGNORE:=exact}
 : ${VCSH_GITATTRIBUTES:=none}
@@ -511,6 +512,14 @@ check_dir "$VCSH_REPO_D"
 
 verbose "$VCSH_COMMAND begin"
 VCSH_COMMAND=$(echo "$VCSH_COMMAND" | sed 's/-/_/g'); export VCSH_COMMAND
+
+# source overlay functions
+for overlay in "$VCSH_OVERLAY_D/$VCSH_COMMAND"* "$VCSH_OVERLAY_D/$VCSH_REPO_NAME.$VCSH_COMMAND"*; do
+	[ -r "$overlay" ] || continue
+	info "sourcing '$overlay'"
+	. "$overlay"
+done
+
 hook pre-command
 $VCSH_COMMAND "$@"
 hook post-command
-- 
GitLab