aboutsummaryrefslogtreecommitdiff
path: root/puppet/bin/subtrees
diff options
context:
space:
mode:
Diffstat (limited to 'puppet/bin/subtrees')
-rwxr-xr-xpuppet/bin/subtrees48
1 files changed, 48 insertions, 0 deletions
diff --git a/puppet/bin/subtrees b/puppet/bin/subtrees
new file mode 100755
index 0000000..19211f1
--- /dev/null
+++ b/puppet/bin/subtrees
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# Setup subtrees.
+#
+
+# Parameters
+DIRNAME="`dirname $0`"
+
+# Usage
+function usage {
+ echo "Usage: $1 add-submodules <DIR>"
+ exit $2
+}
+
+# Check for git-subtree
+if ! which git-subtree &> /dev/null; then
+ echo "fatal: please install git-subtree"
+ exit 1
+fi
+
+# Set puppet folder
+if [ -d "puppet" ]; then
+ PUPPET_FOLDER="puppet"
+else
+ PUPPET_FOLDER="."
+fi
+
+# Get module list
+repos="`grep = $DIRNAME/../.mrconfig | cut -d = -f 2 | cut -d ' ' -f 4`"
+
+# Add subtrees
+for repo in $repos; do
+ module="`basename $repo .git | sed -e s/^puppet-//`"
+ if [ ! -d "$PUPPET_FOLDER/modules/$module" ]; then
+ echo "Processing puppet module $module..."
+ git remote add $module $repo
+ git subtree add --prefix $PUPPET_FOLDER/modules/$module $module master --squash
+ elif [ ! -d "modules/$module/.git" ]; then
+ # The puppet module exists and is a subtree, so update it
+ if ! git remote | grep -qe "^$module$"; then
+ git remote add $module $repo
+ fi
+
+ # Update subtrees
+ git fetch $module master
+ git subtree pull --prefix $PUPPET_FOLDER/modules/$module $module master --squash
+ fi
+done