summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Anderson <micah@riseup.net>2013-01-23 12:30:17 -0500
committerMicah Anderson <micah@riseup.net>2013-01-23 12:30:17 -0500
commit140ee42f2f94976dab3fca5a9749ff3dc38ae52c (patch)
tree7b7d951e985de806b3f32987f177329aede88c23
add superproject-post-push.sh with an abstracted $HOME for the $superproject directory
-rw-r--r--superproject-post-push.sh38
1 files changed, 38 insertions, 0 deletions
diff --git a/superproject-post-push.sh b/superproject-post-push.sh
new file mode 100644
index 0000000..d680a94
--- /dev/null
+++ b/superproject-post-push.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+# how to use:
+# put all of this in some directory (eg. /home/micah/bin/superproject-post-push.sh) and then do this in the git submodule directory:
+# micah@minnow:~/leap/puppet/modules/apt$ git config alias.xpush "push && /home/micah/bin/superproject-post-push.sh"
+
+# use git xpush for pushing
+
+# this assumes a couple things:
+# 1. you do the commit in the top level of the submodule (not any subdirectory within)
+# 2. you have no local, uncomitted changes in your superproject when you do any submodule commit
+
+# exit on any error
+set -e
+
+# change this variable to your superproject checkout
+superproject=${HOME}/leap/puppet
+
+submodule_base=`basename $PWD`
+submodule=${submodule_base#puppet_}
+
+# check out the latest version of the superproject
+# note: this part is fragile, because if you have local, uncomitted changes in your superproject, then this pull will fail
+cd ${superproject}
+git pull
+git submodule update --init
+
+# check out latest version of submodule
+# according to https://we.riseup.net/riseup+tech/puppet-git-submodules
+cd ${superproject}/modules/${submodule}
+git remote update
+git merge origin/master
+
+# commit and push the submodule update commit
+cd ..
+git add $submodule
+git commit -m "automatic update of submodule $submodule_base"
+git push