polardbxengine/storage/ndb/nodejs/import-git-commit

100 lines
2.9 KiB
Plaintext
Executable File

# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
usage() {
echo "usage: import-git-commit [-f] rev"
echo
echo " [rev] must name a commit in the mysql-js tree."
echo
echo " If automatic merge fails, use -f option to stage files"
echo " from mysql-js revision in current index."
exit 1
}
fail() {
echo $1
exit 1
}
test -d "$GIT_WORK_TREES" || fail "Environment GIT_WORK_TREES must be set"
CUR_DIR=`pwd`
test `basename $CUR_DIR` = "nodejs" || fail "Must be run from storage/ndb/nodejs"
SOURCE_DIR=$GIT_WORK_TREES/mysql-js
test -d "$SOURCE_DIR" || fail "$SOURCE_DIR must exist"
if test "$1" = "-f"
then
copy_mode=1 ; REV=$2
else
copy_mode=0 ; REV=$1
fi
test -n "$REV" || usage
if ! git -C $SOURCE_DIR rev-parse --verify "$REV^{commit}"
then
fail "$REV must name a commit"
fi
stage_commit_message() {
MSG=__staged-commit-message
git -C $SOURCE_DIR show --no-patch --format=%B $REV > $MSG
echo "Imported from mysql-js commit $REV" >> $MSG
echo "To use staged commit message from $REV:"
echo " git commit -e -F $MSG"
}
run_copy_mode() {
changed_files=`git -C $SOURCE_DIR diff --name-only --diff-filter=d $REV~1 $REV`
deleted_files=`git -C $SOURCE_DIR diff --name-only --diff-filter=D $REV~1 $REV`
# Apply changes to index
for f in $changed_files
do
git -C $SOURCE_DIR show $REV:$f > $f
echo $f ; git add $f
done
for f in $deleted_files
do
git rm $f
done
stage_commit_message
}
run_patch_mode() {
PATCH_FILE=__import-git-commit.patch
git -C $SOURCE_DIR diff --diff-algorithm=patience $REV~1..$REV > $PATCH_FILE
if git apply --index --directory=storage/ndb/nodejs $PATCH_FILE
then
stage_commit_message
else
echo "Try again with -f option"
fi
rm $PATCH_FILE
}
if test $copy_mode -eq 1
then
run_copy_mode
else
run_patch_mode
fi