mirror of
https://github.com/scratchfoundation/scratch-blocks.git
synced 2024-11-25 16:33:00 +08:00
152 lines
3.7 KiB
Bash
Executable File
152 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Pull from Blockly into Scratch Blocks and do basic cleanup.
|
|
# Rachel Fenichel (fenichel@google.com)
|
|
|
|
BOLD='\e[1m'
|
|
NOBOLD='\e[21m'
|
|
|
|
# Formatting helper.
|
|
empty_lines() { printf '\n\n'; }
|
|
bold_echo() {
|
|
echo -e "${BOLD}$1${NOBOLD}"
|
|
}
|
|
|
|
stop_on_fail() {
|
|
# Fail if any command fails.
|
|
set -e
|
|
# Even if you're piping the output.
|
|
set -o pipefail
|
|
}
|
|
|
|
# Undo the effects of start_failing.
|
|
continue_on_fail() {
|
|
set +e
|
|
set +o pipefail
|
|
}
|
|
|
|
# Prompt for y/n and put the result in $prompt_result
|
|
# The first argument specifies the text to use in the prompt.
|
|
# The second argument specifies which value to use if we're skipping prompts.
|
|
prompt() {
|
|
if [ $with_prompts ]
|
|
then
|
|
if [ $2 = true ]
|
|
then
|
|
paren_text="(Y/n)"
|
|
else
|
|
paren_text="(y/N)"
|
|
fi
|
|
# Prompt the user and retry if they try any funny business.
|
|
while true; do
|
|
read -p "$1 $paren_text > " yn
|
|
case $yn in
|
|
[Yy]* ) prompt_result=true; break;;
|
|
[Nn]* ) prompt_result=false; break;;
|
|
* ) echo "Please answer yes or no.";;
|
|
esac
|
|
done
|
|
else
|
|
# Running without prompts. Use the default value.
|
|
prompt_result=$2;
|
|
fi
|
|
}
|
|
|
|
|
|
# Ask the user for confirmation, then pull from Blockly's develop branch.
|
|
# The default is to do the pull.
|
|
pull_from_develop_fn() {
|
|
empty_lines
|
|
prompt "Do you want to pull from develop?" true
|
|
if [ $prompt_result = false ]
|
|
then
|
|
bold_echo "You don't want to pull from develop. Why are you running this script?"
|
|
exit
|
|
fi
|
|
|
|
bold_echo "Pulling from Blockly's develop branch"
|
|
sleep .5
|
|
# This pull will likely fail with merge conflicts, but that's okay.
|
|
# However, this means that we won't fail on errors other than merge conflicts.
|
|
continue_on_fail
|
|
git pull https://github.com/google/blockly.git develop
|
|
stop_on_fail
|
|
}
|
|
|
|
# Ask the user for confirmation, then run cleanup.
|
|
# The default is to run cleanup.
|
|
run_cleanup_fn() {
|
|
empty_lines
|
|
prompt "Ready to run cleanup.sh. Continue?" true
|
|
if [ $prompt_result = false ]
|
|
then
|
|
bold_echo "Skipping cleanup.sh"
|
|
prompt_for_merge_abort
|
|
empty_lines
|
|
bold_echo "Done"
|
|
exit
|
|
fi
|
|
|
|
bold_echo "Running cleanup.sh"
|
|
sleep .5
|
|
# Cleanup.sh resolves common conflicts.
|
|
./cleanup.sh
|
|
}
|
|
|
|
# Ask the user for confirmation, then possibly abort the merge.
|
|
# The default is to *not* abort the merge.
|
|
# Used to clean up the repo instead of leaving it in a bad state.
|
|
prompt_for_merge_abort() {
|
|
empty_lines
|
|
prompt "Do you want to abort this merge?" false
|
|
if [ $prompt_result = false ]
|
|
then
|
|
bold_echo "Continuing with merge..."
|
|
else
|
|
bold_echo "Running git merge --abort"
|
|
git merge --abort
|
|
display_status_fn
|
|
bold_echo "Done"
|
|
exit
|
|
fi
|
|
}
|
|
|
|
# Ask the user for confirmation, then show the current repo status.
|
|
# The default to to show status.
|
|
display_status_fn() {
|
|
empty_lines
|
|
prompt "Do you want to display the current status?" true
|
|
if [ $prompt_result = true ]
|
|
then
|
|
# Tell the user the current state.
|
|
bold_echo "Current status"
|
|
sleep .5
|
|
git status
|
|
else
|
|
bold_echo "Skipping status display."
|
|
fi
|
|
}
|
|
|
|
# Give the user one more chance to abort the merge, then tell them what their
|
|
# next steps should be.
|
|
finish_fn() {
|
|
prompt_for_merge_abort
|
|
bold_echo "Done. You may need to manually resolve conflicts."
|
|
# Helpful tips about what to do next.
|
|
empty_lines
|
|
sleep .5
|
|
echo "Fix conflicts and run 'git commit'."
|
|
echo "Use 'git add <file>' to mark resolution."
|
|
echo "Use 'git merge --abort' to abort this merge."
|
|
}
|
|
|
|
# Check whether we're running with prompts. If unset, we'll skip all prompts.
|
|
with_prompts=$1
|
|
|
|
# Here we go!
|
|
stop_on_fail
|
|
pull_from_develop_fn
|
|
run_cleanup_fn
|
|
display_status_fn
|
|
finish_fn
|