]> gitweb.fluxo.info Git - utils-git.git/commitdiff
Adds git-submodule-checkout-branch and git-submodules-checkout-branches
authorSilvio Rhatto <rhatto@riseup.net>
Thu, 23 Nov 2017 12:27:30 +0000 (10:27 -0200)
committerSilvio Rhatto <rhatto@riseup.net>
Thu, 23 Nov 2017 12:27:30 +0000 (10:27 -0200)
git-submodule-checkout-branch [new file with mode: 0755]
git-submodules-checkout-branches [new file with mode: 0755]

diff --git a/git-submodule-checkout-branch b/git-submodule-checkout-branch
new file mode 100755 (executable)
index 0000000..6613bf4
--- /dev/null
@@ -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 (executable)
index 0000000..f254ca9
--- /dev/null
@@ -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