From 15733351ad5650fc9ab93eb3b7b405d51ac2a3d6 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Thu, 6 Sep 2012 11:51:30 -0500 Subject: [PATCH] Move screen_it() and screen_rc() to functions Change-Id: I9b119e2c6d4d88a67d485f61662037984c2d9b15 --- functions | 46 ++++++++++++++++++++++++++++++++++++++++++++++ stack.sh | 47 ++++------------------------------------------- 2 files changed, 50 insertions(+), 43 deletions(-) diff --git a/functions b/functions index af154b0cfa..fa7c805823 100644 --- a/functions +++ b/functions @@ -585,6 +585,52 @@ function restart_service() { } +# Helper to launch a service in a named screen +# screen_it service "command-line" +function screen_it { + NL=`echo -ne '\015'` + SCREEN_NAME=${SCREEN_NAME:-stack} + if is_service_enabled $1; then + # Append the service to the screen rc file + screen_rc "$1" "$2" + + screen -S $SCREEN_NAME -X screen -t $1 + # sleep to allow bash to be ready to be send the command - we are + # creating a new window in screen and then sends characters, so if + # bash isn't running by the time we send the command, nothing happens + sleep 1.5 + + if [[ -n ${SCREEN_LOGDIR} ]]; then + screen -S $SCREEN_NAME -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log + screen -S $SCREEN_NAME -p $1 -X log on + ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log + fi + screen -S $SCREEN_NAME -p $1 -X stuff "$2$NL" + fi +} + + +# Screen rc file builder +# screen_rc service "command-line" +function screen_rc { + SCREEN_NAME=${SCREEN_NAME:-stack} + SCREENRC=$TOP_DIR/$SCREEN_NAME-screenrc + if [[ ! -e $SCREENRC ]]; then + # Name the screen session + echo "sessionname $SCREEN_NAME" > $SCREENRC + # Set a reasonable statusbar + echo "hardstatus alwayslastline '$SCREEN_HARDSTATUS'" >> $SCREENRC + echo "screen -t shell bash" >> $SCREENRC + fi + # If this service doesn't already exist in the screenrc file + if ! grep $1 $SCREENRC 2>&1 > /dev/null; then + NL=`echo -ne '\015'` + echo "screen -t $1 bash" >> $SCREENRC + echo "stuff \"$2$NL\"" >> $SCREENRC + fi +} + + # ``pip install`` the dependencies of the package before ``setup.py develop`` # so pip and not distutils processes the dependency chain # Uses globals ``TRACK_DEPENDES``, ``*_proxy` diff --git a/stack.sh b/stack.sh index 3e3d8cf5bc..2c103eab14 100755 --- a/stack.sh +++ b/stack.sh @@ -134,8 +134,9 @@ if [ ! -d $FILES ]; then exit 1 fi +SCREEN_NAME=${SCREEN_NAME:-stack} # Check to see if we are already running DevStack -if type -p screen >/dev/null && screen -ls | egrep -q "[0-9].stack"; then +if type -p screen >/dev/null && screen -ls | egrep -q "[0-9].$SCREEN_NAME"; then echo "You are already running a stack.sh session." echo "To rejoin this session type 'screen -x stack'." echo "To destroy this session, type './unstack.sh'." @@ -976,51 +977,11 @@ if [ -z "$SCREEN_HARDSTATUS" ]; then SCREEN_HARDSTATUS='%{= .} %-Lw%{= .}%> %n%f %t*%{= .}%+Lw%< %-=%{g}(%{d}%H/%l%{g})' fi -# Our screenrc file builder -function screen_rc { - SCREENRC=$TOP_DIR/stack-screenrc - if [[ ! -e $SCREENRC ]]; then - # Name the screen session - echo "sessionname stack" > $SCREENRC - # Set a reasonable statusbar - echo "hardstatus alwayslastline '$SCREEN_HARDSTATUS'" >> $SCREENRC - echo "screen -t stack bash" >> $SCREENRC - fi - # If this service doesn't already exist in the screenrc file - if ! grep $1 $SCREENRC 2>&1 > /dev/null; then - NL=`echo -ne '\015'` - echo "screen -t $1 bash" >> $SCREENRC - echo "stuff \"$2$NL\"" >> $SCREENRC - fi -} - -# Our screen helper to launch a service in a hidden named screen -function screen_it { - NL=`echo -ne '\015'` - if is_service_enabled $1; then - # Append the service to the screen rc file - screen_rc "$1" "$2" - - screen -S stack -X screen -t $1 - # sleep to allow bash to be ready to be send the command - we are - # creating a new window in screen and then sends characters, so if - # bash isn't running by the time we send the command, nothing happens - sleep 1.5 - - if [[ -n ${SCREEN_LOGDIR} ]]; then - screen -S stack -p $1 -X logfile ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log - screen -S stack -p $1 -X log on - ln -sf ${SCREEN_LOGDIR}/screen-${1}.${CURRENT_LOG_TIME}.log ${SCREEN_LOGDIR}/screen-${1}.log - fi - screen -S stack -p $1 -X stuff "$2$NL" - fi -} - # Create a new named screen to run processes in -screen -d -m -S stack -t stack -s /bin/bash +screen -d -m -S $SCREEN_NAME -t shell -s /bin/bash sleep 1 # Set a reasonable statusbar -screen -r stack -X hardstatus alwayslastline "$SCREEN_HARDSTATUS" +screen -r $SCREEN_NAME -X hardstatus alwayslastline "$SCREEN_HARDSTATUS" # Horizon