| 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 if [ -n "${FLAGS_board}" ]; then | 54 if [ -n "${FLAGS_board}" ]; then |
| 55 BOARD_DIR=/build/"${FLAGS_board}" # --board specified | 55 BOARD_DIR=/build/"${FLAGS_board}" # --board specified |
| 56 EQUERYCMD=equery-"${FLAGS_board}" | 56 EQUERYCMD=equery-"${FLAGS_board}" |
| 57 EBUILDCMD=ebuild-"${FLAGS_board}" | 57 EBUILDCMD=ebuild-"${FLAGS_board}" |
| 58 else | 58 else |
| 59 BOARD_DIR="" # --host specified | 59 BOARD_DIR="" # --host specified |
| 60 EQUERYCMD=equery | 60 EQUERYCMD=equery |
| 61 EBUILDCMD=ebuild | 61 EBUILDCMD=ebuild |
| 62 fi | 62 fi |
| 63 | 63 |
| 64 WORKON_DIR=${CHROOT_TRUNK_DIR}/.config/cros_workon |
| 64 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords | 65 KEYWORDS_DIR=${BOARD_DIR}/etc/portage/package.keywords |
| 65 UNMASK_DIR=${BOARD_DIR}/etc/portage/package.unmask | 66 UNMASK_DIR=${BOARD_DIR}/etc/portage/package.unmask |
| 67 WORKON_FILE=${WORKON_DIR}/${FLAGS_board:-host} |
| 66 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon | 68 KEYWORDS_FILE=${KEYWORDS_DIR}/cros-workon |
| 67 UNMASK_FILE=${UNMASK_DIR}/cros-workon | 69 UNMASK_FILE=${UNMASK_DIR}/cros-workon |
| 68 | 70 |
| 69 sudo mkdir -p "${KEYWORDS_DIR}" "${UNMASK_DIR}" || \ | 71 # TODO(msb): remove the backward compatibility after 09/01/2010 |
| 70 die "mkdir -p ${KEYWORDS_DIR} ${UNMASK_DIR}" | 72 sudo mkdir -p "${WORKON_DIR}" "${KEYWORDS_DIR}" "${UNMASK_DIR}" || \ |
| 73 die "mkdir -p ${WORKON_DIR} ${KEYWORDS_DIR} ${UNMASK_DIR}" |
| 71 if [ ! -L "${KEYWORDS_FILE}" ]; then | 74 if [ ! -L "${KEYWORDS_FILE}" ]; then |
| 72 sudo rm -f "${KEYWORDS_FILE}" | 75 sudo rm -f "${KEYWORDS_FILE}" |
| 73 sudo ln -s "${UNMASK_FILE}" "${KEYWORDS_FILE}" || \ | 76 sudo ln -s "${WORKON_FILE}" "${KEYWORDS_FILE}" || \ |
| 74 die "ln -s ${UNMASK_FILE} ${KEYWORDS_FILE}" | 77 die "ln -s ${WORKON_FILE} ${KEYWORDS_FILE}" |
| 75 fi | 78 fi |
| 76 sudo touch "${UNMASK_FILE}" || \ | 79 if [ ! -L "${UNMASK_FILE}" ]; then |
| 77 die "touch ${UNMASK_FILE}" | 80 [ -f "${UNMASK_FILE}" ] && sudo mv "${UNMASK_FILE}" "${WORKON_FILE}" |
| 81 sudo ln -s "${WORKON_FILE}" "${UNMASK_FILE}" || \ |
| 82 die "ln -s ${WORKON_FILE} ${UNMASK_FILE}" |
| 83 fi |
| 84 sudo touch "${WORKON_FILE}" || \ |
| 85 die "touch ${WORKON_FILE}" |
| 78 | 86 |
| 79 # Canonicalize package name to category/package. | 87 # Canonicalize package name to category/package. |
| 80 canonicalize_name () { | 88 canonicalize_name () { |
| 81 local pkgfile | 89 local pkgfile |
| 82 local pkgname | 90 local pkgname |
| 83 | 91 |
| 84 if ! pkgfile=$(ACCEPT_KEYWORDS="**" ${EQUERYCMD} which $1); then | 92 if ! pkgfile=$(ACCEPT_KEYWORDS="**" ${EQUERYCMD} which $1); then |
| 85 warn "error looking up package $1" 1>&2 | 93 warn "error looking up package $1" 1>&2 |
| 86 return 1 | 94 return 1 |
| 87 fi | 95 fi |
| (...skipping 18 matching lines...) Expand all Loading... |
| 106 local name=$(canonicalize_name "${atom}") | 114 local name=$(canonicalize_name "${atom}") |
| 107 [ -n "${name}" ] || return 1 | 115 [ -n "${name}" ] || return 1 |
| 108 names+=" ${name}" | 116 names+=" ${name}" |
| 109 done | 117 done |
| 110 | 118 |
| 111 echo "${names}" | 119 echo "${names}" |
| 112 } | 120 } |
| 113 | 121 |
| 114 # Display ebuilds currently part of the live branch and open for development. | 122 # Display ebuilds currently part of the live branch and open for development. |
| 115 show_live_ebuilds () { | 123 show_live_ebuilds () { |
| 116 sed -n 's/^[~=]\(.*\)-9999$/\1/p' "${UNMASK_FILE}" | 124 sed -n 's/^[~=]\(.*\)-9999$/\1/p' "${WORKON_FILE}" |
| 117 } | 125 } |
| 118 | 126 |
| 119 find_repo_dir () { | 127 find_repo_dir () { |
| 120 curdir=`pwd` | 128 curdir=`pwd` |
| 121 while [ $curdir != / ]; do | 129 while [ $curdir != / ]; do |
| 122 if [ -d "$curdir/.repo" ]; then | 130 if [ -d "$curdir/.repo" ]; then |
| 123 #echo "Found .repo directory at ${curdir}" | 131 #echo "Found .repo directory at ${curdir}" |
| 124 REPODIR=${curdir}/.repo | 132 REPODIR=${curdir}/.repo |
| 125 return 0 | 133 return 0 |
| 126 fi | 134 fi |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 echo "Please run \"repo sync\" now." | 172 echo "Please run \"repo sync\" now." |
| 165 fi | 173 fi |
| 166 } | 174 } |
| 167 | 175 |
| 168 # Move a stable ebuild to the live development catgeory. The ebuild | 176 # Move a stable ebuild to the live development catgeory. The ebuild |
| 169 # src_unpack step fetches the package source for local development. | 177 # src_unpack step fetches the package source for local development. |
| 170 ebuild_to_live () { | 178 ebuild_to_live () { |
| 171 local atoms=$1 | 179 local atoms=$1 |
| 172 | 180 |
| 173 for atom in ${atoms}; do | 181 for atom in ${atoms}; do |
| 174 if ! grep -qx "[~=]${atom}-9999" "${UNMASK_FILE}" ; then | 182 if ! grep -qx "[~=]${atom}-9999" "${WORKON_FILE}" ; then |
| 175 sudo bash -c "echo \"=${atom}-9999\" >> \"${UNMASK_FILE}\"" | 183 sudo bash -c "echo \"=${atom}-9999\" >> \"${WORKON_FILE}\"" |
| 176 else | 184 else |
| 177 warn "Already working on ${atom}" | 185 warn "Already working on ${atom}" |
| 178 fi | 186 fi |
| 179 done | 187 done |
| 180 } | 188 } |
| 181 | 189 |
| 182 # Move a live development ebuild back to stable. | 190 # Move a live development ebuild back to stable. |
| 183 ebuild_to_stable () { | 191 ebuild_to_stable () { |
| 184 local atoms=$1 | 192 local atoms=$1 |
| 185 | 193 |
| 186 for atom in ${atoms}; do | 194 for atom in ${atoms}; do |
| 187 if grep -qx "[~=]${atom}-9999" "${UNMASK_FILE}" ; then | 195 if grep -qx "[~=]${atom}-9999" "${WORKON_FILE}" ; then |
| 188 sudo bash -c "grep -v '^[~=]${atom}-9999\$' \"${UNMASK_FILE}\" > \ | 196 sudo bash -c "grep -v '^[~=]${atom}-9999\$' \"${WORKON_FILE}\" > \ |
| 189 \"${UNMASK_FILE}+\"" | 197 \"${WORKON_FILE}+\"" |
| 190 sudo mv "${UNMASK_FILE}+" "${UNMASK_FILE}" | 198 sudo mv "${WORKON_FILE}+" "${WORKON_FILE}" |
| 191 else | 199 else |
| 192 warn "Not working on ${atom}" | 200 warn "Not working on ${atom}" |
| 193 fi | 201 fi |
| 194 done | 202 done |
| 195 } | 203 } |
| 196 | 204 |
| 197 # Run a command on all or a set of repos. | 205 # Run a command on all or a set of repos. |
| 198 ebuild_iterate() { | 206 ebuild_iterate() { |
| 199 local atoms=$1 | 207 local atoms=$1 |
| 200 | 208 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 226 esac | 234 esac |
| 227 fi | 235 fi |
| 228 | 236 |
| 229 case ${WORKON_CMD} in | 237 case ${WORKON_CMD} in |
| 230 start) ebuild_to_live "${ATOM_LIST}"; regen_manifest_and_sync ;; | 238 start) ebuild_to_live "${ATOM_LIST}"; regen_manifest_and_sync ;; |
| 231 stop) ebuild_to_stable "${ATOM_LIST}" ;; | 239 stop) ebuild_to_stable "${ATOM_LIST}" ;; |
| 232 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || show_worko
n_ebuilds ;; | 240 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || show_worko
n_ebuilds ;; |
| 233 iterate)ebuild_iterate "${ATOM_LIST}" ;; | 241 iterate)ebuild_iterate "${ATOM_LIST}" ;; |
| 234 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;; | 242 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;; |
| 235 esac | 243 esac |
| OLD | NEW |