aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2017-11-23 10:27:30 -0200
committerSilvio Rhatto <rhatto@riseup.net>2017-11-23 10:27:30 -0200
commitdb8aaf5f8f0886c8aad9abfc504685e49e70b39c (patch)
treef27a87dde372c4da0d7b903ee2dae9d02d4aec05
parent8b56dface439ff13c9977d958b891bfb79b09850 (diff)
downloadutils-git-db8aaf5f8f0886c8aad9abfc504685e49e70b39c.tar.gz
utils-git-db8aaf5f8f0886c8aad9abfc504685e49e70b39c.tar.bz2
Adds git-submodule-checkout-branch and git-submodules-checkout-branches
-rwxr-xr-xgit-submodule-checkout-branch33
-rwxr-xr-xgit-submodules-checkout-branches7
2 files changed, 40 insertions, 0 deletions
diff --git a/git-submodule-checkout-branch b/git-submodule-checkout-branch
new file mode 100755
index 0000000..6613bf4
--- /dev/null
+++ b/git-submodule-checkout-branch
@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+# Checkout branche a submodule.
+#
+
+# Parameters
+BASENAME="`basename $0`"
+
+# Checkout the branch containing a commit
+function checkout_branch {
+ # Check if we are in a detached HEAD
+ if git branch | grep -q '* (HEAD detached'; then
+ # Determine the commit we're in
+ local commit="`git log -n 1 | head -1 | cut -d ' ' -f 2`"
+
+ # Get the first remote branch that contains our commit
+ #
+ # In the future some criteria might be stablished to determine how to decide
+ # if the comment is present in more than one branch. Which one to prioritize?
+ # A topic branch in the form of "feature/"? The "develop" branch?
+ local branch="`git branch -r --contains $commit 2> /dev/null | grep -v 'HEAD' | head -1 | sed -e 's|^[^/]*/||'`"
+
+ # Checkout to the given commit
+ if [ ! -z "$branch" ]; then
+ git checkout $branch
+ else
+ echo "$BASENAME: no such branch containing dangling commit $commit"
+ fi
+ fi
+}
+
+# Dispatch
+checkout_branch
diff --git a/git-submodules-checkout-branches b/git-submodules-checkout-branches
new file mode 100755
index 0000000..f254ca9
--- /dev/null
+++ b/git-submodules-checkout-branches
@@ -0,0 +1,7 @@
+#!/bin/bash
+#
+# Checkout branches in all submodules, recursivelly.
+#
+
+# Run recursivelly for each submodule
+git submodule foreach --recursive git-submodule-checkout-branch