137522c9c0ccf48e63e0ab6c2b35b50948d15a003Gaurav Shah#!/bin/bash
2605500b88cd99097d482ddcefee4ba04898781aeGaurav Shah#
3605500b88cd99097d482ddcefee4ba04898781aeGaurav Shah# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
437522c9c0ccf48e63e0ab6c2b35b50948d15a003Gaurav Shah# Use of this source code is governed by a BSD-style license that can be
537522c9c0ccf48e63e0ab6c2b35b50948d15a003Gaurav Shah# found in the LICENSE file.
637522c9c0ccf48e63e0ab6c2b35b50948d15a003Gaurav Shah
7605500b88cd99097d482ddcefee4ba04898781aeGaurav Shah. "$(dirname "$0")/common_minimal.sh"
8e13e480b7f7bec28f3ac00f61da57fbe87b3a166Gaurav Shah
9ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Array of actions that are executed during the clean up process.
10ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Ledeclare -a cleanup_actions
11ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
12ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Adds an action to be executed during the clean up process.
13ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Actions are executed in the reverse order of when they were added.
14ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# ARGS: ACTION
15ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Leadd_cleanup_action() {
16ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  cleanup_actions[${#cleanup_actions[*]}]=$1
17ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
18ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
19ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Performs the latest clean up action and removes it from the list.
20ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Leperform_latest_cleanup_action() {
21ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  local num_actions=${#cleanup_actions[*]}
22ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  if [ ${num_actions} -gt 0 ]; then
23ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le    eval "${cleanup_actions[$num_actions-1]}" > /dev/null 2>&1
24ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le    unset cleanup_actions[$num_actions-1]
25ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  fi
26ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
27ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
28ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Performs clean up by executing actions in the cleanup_actions array in
29ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# reversed order.
30ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Lecleanup() {
31ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  set +e
32ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
33ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  while [ ${#cleanup_actions[*]} -gt 0 ]; do
34ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le    perform_latest_cleanup_action
35ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  done
36ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
37ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  set -e
38ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
39ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
40ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# ANSI color codes used when displaying messages.
41ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Taken from src/scripts/common.sh.
42ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_RED="\e[31m"
43ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_YELLOW="\e[33m"
44ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_BOLD_GREEN="\e[1;32m"
45ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_BOLD_RED="\e[1;31m"
46ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_BOLD_YELLOW="\e[1;33m"
47ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu LeV_VIDOFF="\e[0m"
48ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
49ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Prints an informational message.
50ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Taken from src/scripts/common.sh.
51ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Arg: MESSAGE
52ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Leinfo() {
53ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  echo -e >&2 "${V_BOLD_GREEN}INFO   : $1${V_VIDOFF}"
54ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
55ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
56ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Prints a warning message.
57ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Taken from src/scripts/common.sh.
58ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Arg: MESSAGE
59ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Lewarn() {
60ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  echo -e >&2 "${V_BOLD_YELLOW}WARNING: $1${V_VIDOFF}"
61ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
62ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
63ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Prints the specified error and exit the script with an error code.
64ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Taken from src/scripts/common.sh.
65ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Args: MESSAGE
66ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Leerror() {
67ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  echo -e >&2   "${V_BOLD_RED}ERROR  : $1${V_VIDOFF}"
68ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
69ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
70ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Prints an error message and exit with an error code.
71ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Taken from src/scripts/common.sh.
72ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le# Args: MESSAGE
73ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Ledie() {
74ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  error "$1"
75ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le  exit 1
76ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le}
77ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
78605500b88cd99097d482ddcefee4ba04898781aeGaurav Shah# This will override the trap set in common_minmal.sh
79ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Letrap "cleanup" INT TERM EXIT
80ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Le
81ddc06e4be12392d1f9d6b0d6d7c9c16446cb5566Thieu Leadd_cleanup_action "cleanup_temps_and_mounts"
82