diff options
| -rwxr-xr-x | bitbake/bin/toaster | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster index f81e6672fb..80bda6d67c 100755 --- a/bitbake/bin/toaster +++ b/bitbake/bin/toaster | |||
| @@ -16,9 +16,15 @@ | |||
| 16 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 16 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | # This script enables toaster event logging and | 19 | # This script can be run in two modes. |
| 20 | # starts bitbake resident server | 20 | |
| 21 | # use as: source toaster [start|stop] | 21 | # When used with "source", from a build directory, |
| 22 | # it enables toaster event logging and starts the bitbake resident server. | ||
| 23 | # use as: source toaster [start|stop] [noweb] [noui] | ||
| 24 | |||
| 25 | # When it is called as a stand-alone script, it starts just the | ||
| 26 | # web server, and the building shall be done through the web interface. | ||
| 27 | # As script, it will not return to the command prompt. Stop with Ctrl-C. | ||
| 22 | 28 | ||
| 23 | # Helper function to kill a background toaster development server | 29 | # Helper function to kill a background toaster development server |
| 24 | 30 | ||
| @@ -30,6 +36,8 @@ function webserverKillAll() | |||
| 30 | while kill -0 $(< ${pidfile}) 2>/dev/null; do | 36 | while kill -0 $(< ${pidfile}) 2>/dev/null; do |
| 31 | kill -SIGTERM -$(< ${pidfile}) 2>/dev/null | 37 | kill -SIGTERM -$(< ${pidfile}) 2>/dev/null |
| 32 | sleep 1; | 38 | sleep 1; |
| 39 | # Kill processes if they are still running - may happen in interactive shells | ||
| 40 | ps fux | grep "python.*manage.py" | awk '{print $2}' | xargs kill | ||
| 33 | done; | 41 | done; |
| 34 | rm ${pidfile} | 42 | rm ${pidfile} |
| 35 | fi | 43 | fi |
| @@ -38,6 +46,12 @@ function webserverKillAll() | |||
| 38 | 46 | ||
| 39 | function webserverStartAll() | 47 | function webserverStartAll() |
| 40 | { | 48 | { |
| 49 | # do not start if toastermain points to a valid process | ||
| 50 | if ! cat "${BUILDDIR}/.toastermain.pid" 2>/dev/null | xargs -I{} kill -0 {} ; then | ||
| 51 | retval=1 | ||
| 52 | rm "${BUILDDIR}/.toastermain.pid" | ||
| 53 | fi | ||
| 54 | |||
| 41 | retval=0 | 55 | retval=0 |
| 42 | python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1 | 56 | python $BBBASEDIR/lib/toaster/manage.py syncdb || retval=1 |
| 43 | python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2 | 57 | python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=2 |
| @@ -49,6 +63,8 @@ function webserverStartAll() | |||
| 49 | retval=0 | 63 | retval=0 |
| 50 | python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1 | 64 | python $BBBASEDIR/lib/toaster/manage.py migrate orm || retval=1 |
| 51 | fi | 65 | fi |
| 66 | python $BBBASEDIR/lib/toaster/manage.py migrate bldcontrol || retval=1 | ||
| 67 | |||
| 52 | if [ $retval -eq 0 ]; then | 68 | if [ $retval -eq 0 ]; then |
| 53 | python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid | 69 | python $BBBASEDIR/lib/toaster/manage.py runserver 0.0.0.0:8000 </dev/null >${BUILDDIR}/toaster_web.log 2>&1 & echo $! >${BUILDDIR}/.toastermain.pid |
| 54 | sleep 1 | 70 | sleep 1 |
| @@ -103,19 +119,43 @@ function notify_chldexit() { | |||
| 103 | } | 119 | } |
| 104 | 120 | ||
| 105 | 121 | ||
| 106 | # We make sure we're running in the current shell and in a good environment | 122 | BBBASEDIR=`dirname ${BASH_SOURCE}`/.. |
| 123 | RUNNING=0 | ||
| 107 | 124 | ||
| 108 | if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then | 125 | if [ -z "$ZSH_NAME" ] && [ `basename \"$0\"` = `basename \"$BASH_SOURCE\"` ]; then |
| 109 | echo "Error: This script needs to be sourced. Please run as 'source toaster [start|stop]'" 1>&2; | 126 | # We are called as standalone. We refuse to run in a build environment - we need the interactive mode for that. |
| 127 | # Start just the web server, point the web browser to the interface, and start any Django services. | ||
| 128 | |||
| 129 | if [ -n "$BUILDDIR" ]; then | ||
| 130 | echo "Error: build/ directory detected. Standalone Toaster will not start in a build environment." 1>&2; | ||
| 131 | return 1; | ||
| 132 | fi | ||
| 133 | |||
| 134 | # Define a fake builddir where only the pid files are actually created. No real builds will take place here. | ||
| 135 | BUILDDIR=/tmp | ||
| 136 | RUNNING=1 | ||
| 137 | function trap_ctrlc() { | ||
| 138 | echo "** Stopping system" | ||
| 139 | webserverKillAll | ||
| 140 | RUNNING=0 | ||
| 141 | } | ||
| 142 | webserverStartAll || exit 1 | ||
| 143 | xdg-open http://0.0.0.0:8000/ >/dev/null 2>&1 & | ||
| 144 | trap trap_ctrlc SIGINT | ||
| 145 | echo "Running. Stop with Ctrl-C" | ||
| 146 | while [ $RUNNING -gt 0 ]; do | ||
| 147 | wait; | ||
| 148 | done | ||
| 149 | echo "**** Exit" | ||
| 110 | exit 1 | 150 | exit 1 |
| 111 | fi | 151 | fi |
| 112 | 152 | ||
| 153 | # We make sure we're running in the current shell and in a good environment | ||
| 113 | if [ -z "$BUILDDIR" ] || [ -z `which bitbake` ]; then | 154 | if [ -z "$BUILDDIR" ] || [ -z `which bitbake` ]; then |
| 114 | echo "Error: Build environment is not setup or bitbake is not in path." 1>&2; | 155 | echo "Error: Build environment is not setup or bitbake is not in path." 1>&2; |
| 115 | return 2 | 156 | return 2 |
| 116 | fi | 157 | fi |
| 117 | 158 | ||
| 118 | BBBASEDIR=`dirname ${BASH_SOURCE}`/.. | ||
| 119 | 159 | ||
| 120 | 160 | ||
| 121 | # Verify prerequisites | 161 | # Verify prerequisites |
