Skip to content

Instantly share code, notes, and snippets.

@Schmoozerd
Last active December 15, 2015 11:59
Show Gist options
  • Save Schmoozerd/5256855 to your computer and use it in GitHub Desktop.
Save Schmoozerd/5256855 to your computer and use it in GitHub Desktop.
Topic Branch helper tool
#!/bin/sh
## Dialogue helper to create a "topic-branch" for cmangos
# Steps in interactive dialog:
# 1) Get name of contribution (ie LFG)
# 2) Get type of contribution (feature, fix, rewrite, cleanup)
# 3) Get short description of contribution
# 4) Get place where the topic should be published (own repo --> address)
# 5) Check current state of worktree: dirty/clean;
# if dirty ask if changes should be taken into new topic
# ELSE ask if topic should be forked from origin/master or current branch
# Switch to topic-branch (ie "feature_LFG")
# Create initial commit (including some suggested commit message
# 6) Edit the suggested commit message
# 7) Push to repo (check for ok)
# Create output to link to this initial commit from a sticky thread on the forum (address of commit, short description)
# And ask the user to publish this content to some sticky thread
# Helper function ###########################################################
# Optional param: line of prompt
function read_yes_no {
while true; do
if [ "$1" = "" ]; then
read -p"(y/n) "line
else
read -p"$1 " line
fi
case "$line" in
y|Y|yes|Yes|YES)
return 1
;;
n|N|no|No|NO)
return 2
;;
"")
return 0
;;
*)
echo "Unknown answer, please retry"
;;
esac
done
}
# #############################################################################
# Main Script
echo "Welcome to CMaNGOS' helper tool to create a branch for a development project"
echo "This script will guide you through seven steps to set up a branch in which you can develop your project"
echo
# Must have Git available
git rev-parse --git-dir 1>/dev/null 2>&1
if [[ $? -ne 0 ]]; then
echo "ERROR: Cannot find Git directory"
echo "Try to start with \"sh contrib/$script_file_name\""
read -p"Press [RETURN] to exit"
exit 1
fi
checkout_from_current=0
# is the index clean?
if [[ ! -z $(git diff-index HEAD) ]]
then
echo "Your current working dir is not clean."
echo "Do you want to take your changes over to your development project? (y/n)"
read_yes_no "Move current changes? (y/n)"
if [[ $? -eq 1 ]]
then
checkout_from_current=1
else
echo "ERROR: dirty index, run mixed/hard reset first"
exit 1
fi
fi
echo
echo "Please enter the name of your development project"
read project_name
# name must not include blanks
pr_name_clean=`echo $project_name | sed 's/ /_/g' `
if [ "$pr_name_clean" != "$project_name" ]
then
echo "You entered a name with blanks, these were substituted to $pr_name_clean"
read_yes_no "Is this ok for you? (y/n)"
if [ $? -eq 2 ]; then exit 1; fi
fi
project_name="$pr_name_clean"
if [ "$project_name" = "" ]; then echo "ERROR: You must enter a name for your project"; exit 1; fi
echo
echo "What type of contribution will your project be? (examples: feature, rewrite, cleanup, fix)"
read project_type
# Type must not include blanks
pr_type_clean=`echo $project_type | sed 's/ /_/g' `
if [ "$pr_type_clean" != "$project_type" ]
then
echo "You entered a type with blanks, these were substituted to $pr_type_clean"
echo "Is this ok for you? (y/n)"
read line
if [ "$line" = "n" ]; then exit 1; fi
fi
project_type="$pr_type_clean"
if [ "$project_type" = "" ]; then echo "ERROR: You must enter a type for your project"; exit 1; fi
echo
echo "Please enter a short -oneline- description of your development project"
read project_desc
echo
echo "On which place do you intend to publish your contribution?"
echo "Currently you have these repositories created:"
echo
git remote
echo
echo "Please enter one of these git remotes"
read remote
remote_address=$(git remote -v | grep "$remote" | head -n1 | awk '{ print $2; }' | sed 's%.*github.com.\(.*\)\.git%\1%')
remote_address="https://github.com/${remote_address}"
echo
if [[ $checkout_from_current -eq 1 ]]
then
git checkout -b ${project_type}_${project_name}
else
echo "From where do you want to checkout to your development branch?"
echo "Default: origin/master - Use \"HEAD\" for current branch"
read checkout_point
if [[ "$checkout_point" = "" ]]
then
checkout_point="origin/master"
fi
git checkout -b ${project_type}_${project_name} $checkout_point
fi
echo
echo "You will now asked to edit some initial commit message"
echo
echo "For this we will start your editor which might start vi, here are some information how to work with it:"
echo "Press \"i\" to start editing, Press ESC to stopp editing."
echo
echo "When you are finished editing, you can exit with [ESC] and \":wq\" "
echo
echo "You can exit the editor with [ESC] and \":wq\" !"
echo
echo "Press [ENTER] when you are ready to start the editor"
read line
echo
git commit -ae --allow-empty -m"Initial commit for development of $RP_TYPE $project_name
Development branch for $project_type
$project_name
to do:
$project_desc
This development project is published at:
${remote_address}/commits/${project_type}_${project_name}
Please fill in some description about your project, these points might
help you to get some structure to your detailed description:
Overview:
Happy coding!
"
echo
echo "Do you want to directly publish this development branch (suggested)? (y/n)"
read_yes_no "Directly push? (y/n)"
if [[ $? -le 1 ]]
then
HASH=`git log HEAD ^HEAD^ --pretty=format:"%hn"`
# Push now
git push $remote ${project_type}_${project_name}
echo
echo "Please link to your started project on our forum!"
echo
echo "Here is some suggested content for publishing on the http://cmangos.net forums at:"
echo " <LINK>"
echo "or for a custom project: <LINK2>"
echo
echo "Development of $project_type $project_name - see [URL=${remote_address}/commit/$HASH]Initial commit[/URL]"
echo "to develop: $project_desc"
echo
echo "In case of some contribution for official development, please open a pull request"
echo
echo "Note: On Windows you can use Copy&Paste from git-bash by clicking on the top-left corner, select \"Edit\" and then \"mark\""
echo
fi
echo
echo "Have fun developing your feature!"
echo
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment