download_and_compile.sh: fix the order of operations in _gitUpdate()

_gitUpdate() used to call 'git pull' then 'git checkout'. If the latter
command really did a branch switch, this could leave the local branch
behind its remote counterpart (that was hopefully fetched by the
'git pull'). From now on, we do:

  git fetch origin
  git checkout --force "$branch"
  git pull --rebase

(the --force option was already there before in the form of -f). This
way, we can be sure that the local branch we check out is up-to-date
when the function returns.

Also replace short options by long ones for better readability of the
code, and use Bash's [[ ... ]] conditional construct instead of [ ... ]
for more efficiency---I think.

Note: 'git stash save' is documented as deprecated in favor of
      'git stash push', however the latter appears to have been
      introduced in 2017, therefore I believe it is too early to use it
      in download_and_compile.sh.
This commit is contained in:
Florent Rougon 2020-06-29 14:59:11 +02:00
parent 21c13c0886
commit 3099633675

View File

@ -260,19 +260,22 @@ function _gitUpdate(){
if [ "$DOWNLOAD" != "y" ]; then if [ "$DOWNLOAD" != "y" ]; then
return return
fi fi
branch="$1"
local branch="$1"
set +e set +e
git diff --exit-code 2>&1 > /dev/null git diff --exit-code 2>&1 > /dev/null
if [ $? != 1 ]; then if [[ $? != 1 ]]; then
set -e set -e
git pull -r git fetch origin
git checkout -f "$branch" git checkout --force "$branch"
git pull --rebase
else else
set -e set -e
git stash save -u -q git fetch origin
git pull -r git stash save --include-untracked --quiet
git checkout -f "$branch" git checkout --force "$branch"
git stash pop -q git pull --rebase
git stash pop --quiet
fi fi
} }