| 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 21 matching lines...) Expand all Loading... |
| 32 FLAGS "$@" || exit 1 | 32 FLAGS "$@" || exit 1 |
| 33 eval set -- "${FLAGS_ARGV}" | 33 eval set -- "${FLAGS_ARGV}" |
| 34 | 34 |
| 35 [ -n "${FLAGS_board}" ] || die "--board is required." | 35 [ -n "${FLAGS_board}" ] || die "--board is required." |
| 36 | 36 |
| 37 # eat the workon command keywords: start, stop or list. | 37 # eat the workon command keywords: start, stop or list. |
| 38 WORKON_CMD=$1 | 38 WORKON_CMD=$1 |
| 39 shift | 39 shift |
| 40 | 40 |
| 41 BOARD_DIR=/build/"${FLAGS_board}" | 41 BOARD_DIR=/build/"${FLAGS_board}" |
| 42 |
| 42 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords | 43 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords |
| 44 UNMASK_DIR=${BOARD_DIR}/etc/portage/package.unmask |
| 43 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon | 45 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon |
| 46 UNMASK_FILE=${UNMASK_DIR}/cros-workon |
| 44 | 47 |
| 45 sudo mkdir -p "${KEYWORDS_DIR}" || die "mkdir -p ${KEYWORDS_DIR}" | 48 sudo mkdir -p "${KEYWORDS_DIR}" "${UNMASK_DIR}" || die "mkdir -p ${KEYWORDS_DIR}
${UNMASK_DIR}" |
| 46 sudo touch "${KEYWORDS_FILE}" || die "touch ${KEYWORDS_FILE}" | 49 sudo touch "${KEYWORDS_FILE}" "${UNMASK_FILE}" || die "touch ${KEYWORDS_FILE} ${
UNMASK_FILE}" |
| 47 | 50 |
| 48 # Canonicalize package name to category/package. | 51 # Canonicalize package name to category/package. |
| 49 canonicalize_name () { | 52 canonicalize_name () { |
| 50 equery-${FLAGS_board} which $1 | \ | 53 equery-${FLAGS_board} which $1 | \ |
| 51 awk -F '/' '{ print $(NF-2) "/" $(NF-1) }' | 54 awk -F '/' '{ print $(NF-2) "/" $(NF-1) }' |
| 52 } | 55 } |
| 53 | 56 |
| 54 # Canonicalize a list of names. | 57 # Canonicalize a list of names. |
| 55 canonicalize_names () { | 58 canonicalize_names () { |
| 56 local atoms=$1 | 59 local atoms=$1 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 74 [ -n "${ATOM_LIST}" ] || ATOM_LIST=$(show_live_ebuilds) | 77 [ -n "${ATOM_LIST}" ] || ATOM_LIST=$(show_live_ebuilds) |
| 75 | 78 |
| 76 # Move a stable ebuild to the live development catgeory. The ebuild | 79 # Move a stable ebuild to the live development catgeory. The ebuild |
| 77 # src_unpack step fetches the package source for local development. | 80 # src_unpack step fetches the package source for local development. |
| 78 ebuild_to_live () { | 81 ebuild_to_live () { |
| 79 local atoms=$1 | 82 local atoms=$1 |
| 80 | 83 |
| 81 for atom in ${atoms}; do | 84 for atom in ${atoms}; do |
| 82 if ! grep -qx "${atom}" "${KEYWORDS_FILE}" ; then | 85 if ! grep -qx "${atom}" "${KEYWORDS_FILE}" ; then |
| 83 sudo bash -c "echo \"${atom}\" >> \"${KEYWORDS_FILE}\"" | 86 sudo bash -c "echo \"${atom}\" >> \"${KEYWORDS_FILE}\"" |
| 87 sudo bash -c "echo \"~${atom}-9999\" >> \"${UNMASK_FILE}\"" |
| 84 fi | 88 fi |
| 85 done | 89 done |
| 86 } | 90 } |
| 87 | 91 |
| 88 # Move a live development ebuild back to stable. | 92 # Move a live development ebuild back to stable. |
| 89 ebuild_to_stable () { | 93 ebuild_to_stable () { |
| 90 local atoms=$1 | 94 local atoms=$1 |
| 91 | 95 |
| 92 for atom in ${atoms}; do | 96 for atom in ${atoms}; do |
| 97 # remove the keyword |
| 93 sudo bash -c "grep -v '^${atom}\$' \"${KEYWORDS_FILE}\" > \ | 98 sudo bash -c "grep -v '^${atom}\$' \"${KEYWORDS_FILE}\" > \ |
| 94 \"${KEYWORDS_FILE}+\"" | 99 \"${KEYWORDS_FILE}+\"" |
| 95 sudo mv "${KEYWORDS_FILE}+" "${KEYWORDS_FILE}" | 100 sudo mv "${KEYWORDS_FILE}+" "${KEYWORDS_FILE}" |
| 101 # remove the unmask |
| 102 sudo bash -c "grep -v '^~${atom}-9999\$' \"${UNMASK_FILE}\" > \ |
| 103 \"${UNMASK_FILE}+\"" |
| 104 sudo mv "${UNMASK_FILE}+" "${UNMASK_FILE}" |
| 105 |
| 96 done | 106 done |
| 97 } | 107 } |
| 98 | 108 |
| 99 # Run a command on all or a set of repos. | 109 # Run a command on all or a set of repos. |
| 100 ebuild_forall() { | 110 ebuild_forall() { |
| 101 local atoms=$1 | 111 local atoms=$1 |
| 102 | 112 |
| 103 for atom in ${atoms}; do | 113 for atom in ${atoms}; do |
| 104 info "Running \"${FLAGS_command}\" on ${atom}" | 114 info "Running \"${FLAGS_command}\" on ${atom}" |
| 105 eval $(ebuild-${FLAGS_board} $(equery-${FLAGS_board} which ${atom}) info) | 115 eval $(ebuild-${FLAGS_board} $(equery-${FLAGS_board} which ${atom}) info) |
| 106 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}") | 116 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}") |
| 107 done | 117 done |
| 108 } | 118 } |
| 109 | 119 |
| 110 case ${WORKON_CMD} in | 120 case ${WORKON_CMD} in |
| 111 start) ebuild_to_live "${ATOM_LIST}" ;; | 121 start) ebuild_to_live "${ATOM_LIST}" ;; |
| 112 stop) ebuild_to_stable "${ATOM_LIST}" ;; | 122 stop) ebuild_to_stable "${ATOM_LIST}" ;; |
| 113 list) show_live_ebuilds ;; | 123 list) show_live_ebuilds ;; |
| 114 forall) ebuild_forall "${ATOM_LIST}" ;; | 124 forall) ebuild_forall "${ATOM_LIST}" ;; |
| 115 *) die "invalid cros_workon command" ;; | 125 *) die "invalid cros_workon command" ;; |
| 116 esac | 126 esac |
| OLD | NEW |