|
#!/usr/bin/env bash |
|
set -e |
|
|
|
# Output an error to STDERR. |
|
echoerr() { echo "$@" 1>&2; } |
|
|
|
# Displays the help for this command. Type `git drush help` |
|
help() { |
|
echo -e "\nThis command saves a Drush alias to the local config, so that you don't have to remember what alias is associated with what repository. This is helpful if you switch between lots of different sites.\n" |
|
echo -e "To save a Drush alias to the local config on this repository:\n" |
|
echo ' $ git drush @foo' |
|
echo -e "\nTo use the stored Drush alias from this repository:\n" |
|
echo ' $ git drush' |
|
echo -e "\nTo delete the stored Drush alias from the local config:\n" |
|
echo ' $ git drush --unset' |
|
echo -e "\nTo clear the alias that is being used by drush:\n" |
|
echo ' $ git drush --clear' |
|
echo -e "\n To show this help:\n" |
|
echo ' $ git drush help' |
|
} |
|
|
|
# Gets the parent's parent process id. |
|
ppid() { |
|
pid=`ps -p ${1:-$$} -o ppid=;` |
|
if [[ -z $1 ]]; then |
|
ppid $pid |
|
else |
|
echo $pid |
|
fi |
|
} |
|
|
|
# Display the help. |
|
if [[ $1 = "help" ]]; then |
|
help |
|
exit |
|
fi |
|
|
|
# Remove the alias from local config. |
|
if [[ $1 = "--unset" || $1 = "--unset-all" ]]; then |
|
git config --unset-all --local drush.alias && |
|
echo "Drush alias has been removed from local config." || |
|
echoerr "No Drush alias found in local config." |
|
exit |
|
fi |
|
|
|
# Clear the current site alias. |
|
if [[ $1 = "--clear" ]]; then |
|
drush site-set |
|
exit |
|
fi |
|
|
|
alias=$1 |
|
if [[ -z $alias ]]; then |
|
# If no alias is saved, fail gracefully by using echo, log an error, and |
|
# then fail explicitly. |
|
alias=`git config --get --local drush.alias || echo ""` |
|
if [[ -z $alias ]]; then |
|
echoerr "Drush alias not detected on this project. To set one, pass it as an argument to this script." |
|
help |
|
exit 23 |
|
fi |
|
fi |
|
|
|
# If the alias doesn't start with an @ symbol, exit. |
|
if [[ `echo "$alias" | grep -v '^@'` ]]; then |
|
echoerr "Not a valid drush alias. Drush aliases should start with an @ symbol." |
|
help |
|
exit 23 |
|
fi |
|
|
|
# Attempt to use the alias. If this fails, the script will stop here, preventing |
|
# a broken alias from getting saved in the local config. |
|
drush site-set $alias |
|
|
|
# Since this script is running in a subshell, Drush will save the wrong ppid. |
|
# We need to load up the ppid two levels up, and then rename the file that Drush |
|
# creates to use that ppid, so that this will be active in the shell that |
|
# executed this command. |
|
this_pid=$$ |
|
real_pid=`ppid` |
|
drush_filename=`drush ev "drush_print(drush_sitealias_get_envar_filename());"` |
|
new_filename=`echo "$drush_filename" | sed -e "s/$this_pid\$/$real_pid/"` |
|
# Attempt to move the file. If this fails, log an error with instructions. |
|
mv -f $drush_filename $new_filename || |
|
echoerr "Unable to move $drush_filename to $new_filename. You will need to call drush site-set $alias manually." |
|
|
|
# If the alias is valid (the above command was successful), save it to local |
|
# config. |
|
if [[ -n $1 ]]; then |
|
git config --replace-all --local drush.alias "$alias" |
|
echo "Saved drush alias $alias to local git config." |
|
fi |