OLD | NEW |
1 #!/bin/bash | 1 #!/bin/bash |
2 | 2 |
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 # This script moves ebuilds between 'stable' and 'live' states. | 7 # This script moves ebuilds between 'stable' and 'live' states. |
8 # By default 'stable' ebuilds point at and build from source at the | 8 # By default 'stable' ebuilds point at and build from source at the |
9 # last known good commit. Moving an ebuild to 'live' (via cros_workon start) | 9 # last known good commit. Moving an ebuild to 'live' (via cros_workon start) |
10 # is intended to support development. The current source tip is fetched, | 10 # is intended to support development. The current source tip is fetched, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 [ -n "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_TRUE} ] && \ | 53 [ -n "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_TRUE} ] && \ |
54 FLAGS_board="" # kill board | 54 FLAGS_board="" # kill board |
55 [ -z "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_FALSE} ] && \ | 55 [ -z "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_FALSE} ] && \ |
56 die "You must specify either --host or --board=" | 56 die "You must specify either --host or --board=" |
57 | 57 |
58 if [ -n "${FLAGS_board}" ]; then | 58 if [ -n "${FLAGS_board}" ]; then |
59 BOARD_DIR=/build/"${FLAGS_board}" # --board specified | 59 BOARD_DIR=/build/"${FLAGS_board}" # --board specified |
60 EQUERYCMD=equery-"${FLAGS_board}" | 60 EQUERYCMD=equery-"${FLAGS_board}" |
61 EBUILDCMD=ebuild-"${FLAGS_board}" | 61 EBUILDCMD=ebuild-"${FLAGS_board}" |
62 BOARD_STR="${FLAGS_board}" | 62 BOARD_STR="${FLAGS_board}" |
| 63 BOARD_KEYWORD="$(portageq-${FLAGS_board} envvar ARCH)" |
63 else | 64 else |
64 BOARD_DIR="" # --host specified | 65 BOARD_DIR="" # --host specified |
65 EQUERYCMD=equery | 66 EQUERYCMD=equery |
66 EBUILDCMD=ebuild | 67 EBUILDCMD=ebuild |
67 BOARD_STR="host" | 68 BOARD_STR="host" |
| 69 BOARD_KEYWORD="$(portageq envvar ARCH)" |
68 fi | 70 fi |
69 | 71 |
70 WORKON_DIR=${CHROOT_TRUNK_DIR}/.config/cros_workon | 72 WORKON_DIR=${CHROOT_TRUNK_DIR}/.config/cros_workon |
71 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords | 73 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords |
72 UNMASK_DIR=${BOARD_DIR}/etc/portage/package.unmask | 74 UNMASK_DIR=${BOARD_DIR}/etc/portage/package.unmask |
73 WORKON_FILE=${WORKON_DIR}/${FLAGS_board:-host} | 75 WORKON_FILE=${WORKON_DIR}/${FLAGS_board:-host} |
74 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon | 76 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon |
75 UNMASK_FILE=${UNMASK_DIR}/cros-workon | 77 UNMASK_FILE=${UNMASK_DIR}/cros-workon |
76 | 78 |
77 # TODO(msb): remove the backward compatibility after 09/01/2010 | 79 # TODO(msb): remove the backward compatibility after 09/01/2010 |
(...skipping 10 matching lines...) Expand all Loading... |
88 die "ln -s ${WORKON_FILE} ${UNMASK_FILE}" | 90 die "ln -s ${WORKON_FILE} ${UNMASK_FILE}" |
89 fi | 91 fi |
90 sudo touch "${WORKON_FILE}" || \ | 92 sudo touch "${WORKON_FILE}" || \ |
91 die "touch ${WORKON_FILE}" | 93 die "touch ${WORKON_FILE}" |
92 | 94 |
93 # Canonicalize package name to category/package. | 95 # Canonicalize package name to category/package. |
94 canonicalize_name () { | 96 canonicalize_name () { |
95 local pkgfile | 97 local pkgfile |
96 local pkgname | 98 local pkgname |
97 | 99 |
98 if ! pkgfile=$(ACCEPT_KEYWORDS="**" ${EQUERYCMD} which $1); then | 100 if ! pkgfile=$(ACCEPT_KEYWORDS="~${BOARD_KEYWORD}" ${EQUERYCMD} which $1); the
n |
99 warn "error looking up package $1" 1>&2 | 101 warn "error looking up package $1" 1>&2 |
100 return 1 | 102 return 1 |
101 fi | 103 fi |
102 | 104 |
103 pkgname=$(\ | 105 pkgname=$(\ |
104 echo "${pkgfile}" |awk -F '/' '{ print $(NF-2) "/" $(NF-1) }') | 106 echo "${pkgfile}" |awk -F '/' '{ print $(NF-2) "/" $(NF-1) }') |
105 | 107 |
106 if ! grep -q "cros-workon" ${pkgfile}; then | 108 if ! grep -q "cros-workon" ${pkgfile}; then |
107 warn "${pkgname} is not a cros-workon package" 1>&2 | 109 warn "${pkgname} is not a cros-workon package" 1>&2 |
108 return 1 | 110 return 1 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 for atom in ${atoms}; do | 244 for atom in ${atoms}; do |
243 info "Running \"${FLAGS_command}\" on ${atom}" | 245 info "Running \"${FLAGS_command}\" on ${atom}" |
244 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${atom}) info) | 246 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${atom}) info) |
245 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}") | 247 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}") |
246 done | 248 done |
247 } | 249 } |
248 | 250 |
249 # --all makes commands operate on different lists | 251 # --all makes commands operate on different lists |
250 if [ ${FLAGS_all} = "${FLAGS_TRUE}" ]; then | 252 if [ ${FLAGS_all} = "${FLAGS_TRUE}" ]; then |
251 case ${WORKON_CMD} in | 253 case ${WORKON_CMD} in |
252 start) ATOM_LIST=$(show_workon_ebuilds);; | 254 start) ATOM_LIST=$(show_workon_ebuilds ${BOARD_KEYWORD});; |
253 stop|iterate) ATOM_LIST=$(show_live_ebuilds);; | 255 stop|iterate) ATOM_LIST=$(show_live_ebuilds);; |
254 list) ;; | 256 list) ;; |
255 *) die "--all is invalid for the given command";; | 257 *) die "--all is invalid for the given command";; |
256 esac | 258 esac |
257 else # not selected --all | 259 else # not selected --all |
258 case ${WORKON_CMD} in | 260 case ${WORKON_CMD} in |
259 start|stop|iterate) | 261 start|stop|iterate) |
260 ATOM_LIST=$@ | 262 ATOM_LIST=$@ |
261 if [ -z "${ATOM_LIST}" ]; then | 263 if [ -z "${ATOM_LIST}" ]; then |
262 die "${WORKON_CMD}: No packages specified" | 264 die "${WORKON_CMD}: No packages specified" |
263 elif ! ATOM_LIST=$(canonicalize_names "${ATOM_LIST}"); then | 265 elif ! ATOM_LIST=$(canonicalize_names "${ATOM_LIST}"); then |
264 die "Error parsing package list" | 266 die "Error parsing package list" |
265 fi;; | 267 fi;; |
266 *) ;; | 268 *) ;; |
267 esac | 269 esac |
268 fi | 270 fi |
269 | 271 |
270 case ${WORKON_CMD} in | 272 case ${WORKON_CMD} in |
271 start) ebuild_to_live "${ATOM_LIST}" ;; | 273 start) ebuild_to_live "${ATOM_LIST}" ;; |
272 stop) ebuild_to_stable "${ATOM_LIST}" ;; | 274 stop) ebuild_to_stable "${ATOM_LIST}" ;; |
273 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || show_worko
n_ebuilds ;; | 275 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || show_worko
n_ebuilds ${BOARD_KEYWORD} ;; |
274 iterate)ebuild_iterate "${ATOM_LIST}" ;; | 276 iterate)ebuild_iterate "${ATOM_LIST}" ;; |
275 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;; | 277 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;; |
276 esac | 278 esac |
OLD | NEW |