blob: 18ef217c218fdb86353927635ad4d30f5823cc8d [file] [log] [blame]
#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#### CATEGORY=Software delivery
### start `pave` and `serve-updates` in a single command
## usage: fx serve [-v] [-l host[:port]] [-a target]
## -l host:port for "pm serve" to listen on
## --no-auto-config do not configure this host as a package server on the device
## -v enable more verbose output (must be first argument)
## -a target ipv6 address for "fx pave --no-bind"
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
fx-config-read
kill_child_processes() {
child_pids=$(jobs -p)
if [[ -n "${child_pids}" ]]; then
# Note: child_pids must be expanded to args here.
kill ${child_pids} 2> /dev/null
wait 2> /dev/null
fi
}
trap kill_child_processes EXIT
serve_args=()
pave_args=()
fx-standard-switches "$@"
set -- "${FX_ARGV[@]}"
while (($#)); do
case "$1" in
-v|-vv|--verbose)
serve_args+=("$1")
;;
--no-auto-config)
serve_args+=("$1")
;;
-l)
serve_args+=("$1" "$2")
shift
;;
-a)
pave_args+=("--no-bind" "$1" "$2")
shift
;;
*)
echo 2>&1 "Unknown argument: \"${1}\" ignored"
;;
esac
shift
done
fx-command-exec pave "${pave_args[@]}"&
pave_pid=$!
fx-command-exec serve-updates "${serve_args[@]}" &
serve_pid=$!
while true; do
sleep 1
# If any child exits, then exit the whole process, causing other children to
# be cleaned up by the exit trap.
for pid in "${pave_pid}" "${serve_pid}"; do
if ! kill -0 $pid 2> /dev/null; then
exit
fi
done
done
# See EXIT trap above for cleanup that occurs