From 35f2e59341c1dd8f0f8919e35e13758731e18585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Sat, 7 Jul 2018 16:12:37 +0200 Subject: Update update_all_submodules + create lock specific by branch + initialize submodules only if they have not yet been initialized + use --no-recurse-submodules at git pull for better overview of the update progress MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Slávek Banko (cherry picked from commit b0d74087e54845129610e901f5c4a2e662e8c9bd) --- update_all_submodules | 57 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/update_all_submodules b/update_all_submodules index b70bb97..776fff8 100755 --- a/update_all_submodules +++ b/update_all_submodules @@ -1,11 +1,17 @@ #!/bin/bash -if [[ -e /var/lock/update-tde-git-submodules ]]; then - echo "TDE GIT submodules are currently being updated" - echo "If this is not the case, please remove the lockfile /var/lock/update-tde-git-submodules" - exit 0 -fi +# echo in bold +echobd () { + if [ -p /dev/stdout ]; then + echo "$1" + else + echo -ne "\033[1m" + echo -n "$1" + echo -e "\033[0m" + fi +} +# verify git directory and branch if [[ ! -e .git ]] && [[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then echo "Current directory does not contain a .git folder. Exiting..." @@ -13,29 +19,25 @@ if [[ ! -e .git ]] && fi branch=`git symbolic-ref -q HEAD | sed "s|^refs/heads/||"` +if [[ -z "$branch" ]]; then + branch=`git branch --contains HEAD | egrep -v "no branch|detached" | head -n1 | cut -c 3-` +fi if [[ -z "$branch" ]] || [[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then echo "There is not active upstream branch. Exiting..." exit 1 fi +# get git user GITUSER="Automated System <$(git config --get user.email)>" # check git abilities if [[ -n "`git status --help 2>/dev/null|grep -- '--ignore-submodules'`" ]]; then GIT_IGNORE_SUBMODULES="--ignore-submodules" fi - -# echo in bold -echobd () { - if [ -p /dev/stdout ]; then - echo "$1" - else - echo -ne "\033[1m" - echo -n "$1" - echo -e "\033[0m" - fi -} +if [[ -n "`git pull --help |grep -- '--\[no-\]recurse-submodules'`" ]]; then + GIT_NO_RECURSE_SUBMODULES="--no-recurse-submodules" +fi # commmit changed module commitModule() { @@ -53,7 +55,7 @@ commitModule() { fi if [[ "`git rev-parse HEAD`" != "`git rev-parse origin/$branch`" ]]; then echo "Push changes for $PWD" - git pull --rebase + git pull --rebase $GIT_NO_RECURSE_SUBMODULES git push origin HEAD fi } @@ -75,7 +77,7 @@ updateModule() { if [[ "$1" != "" ]]; then git checkout $branch fi - git pull --rebase + git pull --rebase $GIT_NO_RECURSE_SUBMODULES if [[ "`git rev-parse HEAD`" != "`git rev-parse origin/$branch`" ]]; then echo "Push changes for $PWD" git push origin HEAD @@ -89,8 +91,12 @@ updateModule() { while read submodule; do echobd "Attempting to reset submodule ${MODULE}${submodule}" cd $PARENTDIR/$MODULE - git submodule init -- $submodule - git submodule update -- $submodule + if [[ -z "`git config --get submodule.$submodule.url`" ]]; then + git submodule init -- $submodule + fi + if [[ ! -e "$submodule/.git" ]]; then + git submodule update -- $submodule + fi updateModule ${MODULE}${submodule} done if [[ "$1" != "" ]]; then @@ -100,10 +106,17 @@ updateModule() { } # Update from top module -touch /var/lock/update-tde-git-submodules +if [[ -e /var/lock/update-tde-git-submodules-$branch ]]; then + echo "TDE GIT submodules are currently being updated" + echo "If this is not the case, please remove the lockfile" + echo "/var/lock/update-tde-git-submodules-$branch" + exit 0 +fi +touch /var/lock/update-tde-git-submodules-$branch +echobd "Updating submodules in $(git rev-parse --show-toplevel | xargs -r basename) $branch branch" cd `git rev-parse --show-toplevel` PARENTDIR=$PWD echobd "Working in $PARENTDIR" updateModule echobd "Done in $PARENTDIR" -rm /var/lock/update-tde-git-submodules +rm /var/lock/update-tde-git-submodules-$branch -- cgit v1.2.1