vtk-m/Utilities/GitSetup/git-gitlab-sync
Kenneth Moreland 394369368c Revert spelling correction in GitSetup script
A recent merge request corrected several spelling errors in VTK-m.
One such correction was in the git-gitlab-sync script in the
Utilities/GitSetup directory. This commit reverts the change in
this specific file for two reasons.

1. The changed introduced a \' inside a single quote string (to
correct cant to can't). However, single quotes in shell scripts
do not allow you to escape characters like that, and thus this
causes an error when running the script.

2. This script actually comes from a separate repository
(https://gitlab.kitware.com/utils/gitsetup) that we occasionally
syncronize with. To prevent confusion, we should minimize the
divergence between this repository and that one. If someone wants
to make this change, it should really be made in the GitSetup
repository.
2018-01-31 15:59:57 -07:00

136 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#=============================================================================
# Copyright 2010-2015 Kitware, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#=============================================================================
USAGE='[<remote>] [<options>...] [--]
OPTIONS
--dry-run
Show what would be changed without actually updating
--autostash
automatically stash/stash pop before and after
'
OPTIONS_SPEC=
SUBDIRECTORY_OK=Yes
. "$(git --exec-path)/git-sh-setup"
egrep_q() {
egrep "$@" >/dev/null 2>/dev/null
}
# Load the project configuration.
require_work_tree_exists
state_dir="$GIT_DIR"/gitlab-sync
#-----------------------------------------------------------------------------
remote=''
autostash="$(git config --bool gitlab.sync.autostash || echo false)"
dry_run=false
# Parse the command line options.
while test $# != 0; do
case "$1" in
--autostash) autostash=true ;;
--no-autostash) autostash=false ;;
--dry-run) dry_run=true ;;
--) shift; break ;;
-*) usage ;;
*) test -z "$remote" || usage ; remote="$1" ;;
esac
shift
done
test $# = 0 || usage
# Default remote.
test -n "$remote" || remote="gitlab"
# Identify and validate the topic branch name.
head="$(git symbolic-ref HEAD)" && topic="${head#refs/heads/}" || topic=''
if test -z "$topic" -o "$topic" = "master"; then
die 'You cant sync the master branch, please checkout the correct a branch with:
git checkout <branch>'
fi
#-----------------------------------------------------------------------------
apply_autostash () {
if test -f "$state_dir/autostash"
then
stash_sha1=$(cat "$state_dir/autostash")
if git stash apply $stash_sha1 2>&1 >/dev/null
then
gettext 'Applied autostash.'
else
git stash store -m "autostash" -q $stash_sha1 ||
die "$(eval_gettext "Cannot store \$stash_sha1")"
gettext 'Applying autostash resulted in conflicts.
Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time.
'
fi
fi
}
finish_sync () {
apply_autostash &&
{ git gc --auto || true; } &&
rm -rf "$state_dir"
}
#-----------------------------------------------------------------------------
if test "$autostash" = true && ! (require_clean_work_tree) 2>/dev/null
then
gettext 'trying to stash local changes' &&
stash_sha1=$(git stash create "autostash") ||
die "$(gettext 'Cannot autostash')"
mkdir -p "$state_dir" &&
echo $stash_sha1 >"$state_dir/autostash" &&
stash_abbrev=$(git rev-parse --short $stash_sha1) &&
echo "$(eval_gettext 'Created autostash: $stash_abbrev')" &&
git reset --hard
fi
require_clean_work_tree "sync" "$(gettext "Error syncing \
We are trying to overwrite all local changes on this branch with the version on \
gitlab. Before you do this make sure to stash your changes or commit these \
changes to a different branch.")"
#-----------------------------------------------------------------------------
fetch_stdout=$(git fetch "$remote" $topic); fetch_exit=$?
gettext "$fetch_stdout"
if [ $fetch_exit -eq 0 ]
then
if test "$dry_run" = true
then
reset_stdout=$(git diff --color HEAD..FETCH_HEAD); fetch_exit=$?
gettext "$reset_stdout"
else
reset_stdout=$(git reset --hard FETCH_HEAD); fetch_exit=$?
gettext "$reset_stdout"
fi
fi
finish_sync
# Reproduce the push exit code.
exit $fetch_exit