Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: cros_workon

Issue 6240018: This starts to fix the scripts so that they load from /usr/lib/crosutils (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: fixing bad merge Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cros_show_stacks ('k') | emit_gpt_scripts.sh » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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,
11 # source modified and built using the unstable 'live' (9999) ebuild. 11 # source modified and built using the unstable 'live' (9999) ebuild.
12 12
13 # Load common constants. This should be the first executable line. 13 # --- BEGIN COMMON.SH BOILERPLATE ---
14 # The path to common.sh should be relative to your script's location. 14 # Load common CrOS utilities. Inside the chroot this file is installed in
15 . "$(dirname "$0")/common.sh" 15 # /usr/lib/crosutils. Outside the chroot we find it relative to the script's
16 # location.
17 find_common_sh() {
18 local common_paths=(/usr/lib/crosutils $(dirname "$(readlink -f "$0")"))
19 local path
20
21 SCRIPT_ROOT=
22 for path in "${common_paths[@]}"; do
23 if [ -r "${path}/common.sh" ]; then
24 SCRIPT_ROOT=${path}
25 break
26 fi
27 done
28 }
29
30 find_common_sh
31 . "${SCRIPT_ROOT}/common.sh" || (echo "Unable to load common.sh" && exit 1)
32 # --- END COMMON.SH BOILERPLATE ---
16 33
17 # Script must be run inside the chroot 34 # Script must be run inside the chroot
18 restart_in_chroot_if_needed $* 35 restart_in_chroot_if_needed "$@"
19 get_default_board 36 get_default_board
20 37
21 DEFINE_string board "${DEFAULT_BOARD}" \ 38 DEFINE_string board "${DEFAULT_BOARD}" \
22 "The board to set package keywords for." 39 "The board to set package keywords for."
23 DEFINE_boolean host "${FLAGS_FALSE}" \ 40 DEFINE_boolean host "${FLAGS_FALSE}" \
24 "Uses the host instead of board" 41 "Uses the host instead of board"
25 DEFINE_string command "git status" \ 42 DEFINE_string command "git status" \
26 "The command to be run by forall." 43 "The command to be run by forall."
27 DEFINE_boolean all "${FLAGS_FALSE}" \ 44 DEFINE_boolean all "${FLAGS_FALSE}" \
28 "Apply to all possible packages for the given command" 45 "Apply to all possible packages for the given command"
29 46
30 FLAGS_HELP="usage: $0 <command> [flags] [<list of packages>|--all] 47 FLAGS_HELP="usage: $0 <command> [flags] [<list of packages>|--all]
31 commands: 48 commands:
32 start: Moves an ebuild to live (intended to support development) 49 start: Moves an ebuild to live (intended to support development)
33 stop: Moves an ebuild to stable (use last known good) 50 stop: Moves an ebuild to stable (use last known good)
34 list: List of live ebuilds (workon ebuilds if --all) 51 list: List of live ebuilds (workon ebuilds if --all)
35 list-all: List all of the live ebuilds for all setup boards 52 list-all: List all of the live ebuilds for all setup boards
36 iterate: For each ebuild, cd to the source dir and run a commond" 53 iterate: For each ebuild, cd to the source dir and run a commond"
37 FLAGS "$@" || exit 1 54 FLAGS "$@" || exit 1
38 eval set -- "${FLAGS_ARGV}" 55 eval set -- "${FLAGS_ARGV}"
39 56
40 57
41 # eat the workon command keywords: start, stop or list. 58 # eat the workon command keywords: start, stop or list.
42 WORKON_CMD=$1 59 WORKON_CMD=$1
43 shift 60 shift
44 61
45
46 # Board dir config 62 # Board dir config
47 63
48 # If both are specified, just use host, because board does not 64 # If both are specified, just use host, because board does not
49 # have to be specified and may come from default, in which case 65 # have to be specified and may come from default, in which case
50 # there's no way to override. 66 # there's no way to override.
51 [ -n "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_TRUE} ] && \ 67 [ -n "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_TRUE} ] && \
52 FLAGS_board="" # kill board 68 FLAGS_board="" # kill board
53 [ -z "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_FALSE} ] && \ 69 [ -z "${FLAGS_board}" ] && [ "${FLAGS_host}" = ${FLAGS_FALSE} ] && \
54 [ "${WORKON_CMD}" != "list-all" ] && \ 70 [ "${WORKON_CMD}" != "list-all" ] && \
55 die "You must specify either --host or --board=" 71 die "You must specify either --host or --board="
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 sudo ln -s "${WORKON_FILE}" "${KEYWORDS_FILE}" || \ 107 sudo ln -s "${WORKON_FILE}" "${KEYWORDS_FILE}" || \
92 die "ln -s ${WORKON_FILE} ${KEYWORDS_FILE}" 108 die "ln -s ${WORKON_FILE} ${KEYWORDS_FILE}"
93 fi 109 fi
94 if [ ! -L "${UNMASK_FILE}" ]; then 110 if [ ! -L "${UNMASK_FILE}" ]; then
95 [ -f "${UNMASK_FILE}" ] && sudo mv "${UNMASK_FILE}" "${WORKON_FILE}" 111 [ -f "${UNMASK_FILE}" ] && sudo mv "${UNMASK_FILE}" "${WORKON_FILE}"
96 sudo ln -s "${WORKON_FILE}" "${UNMASK_FILE}" || \ 112 sudo ln -s "${WORKON_FILE}" "${UNMASK_FILE}" || \
97 die "ln -s ${WORKON_FILE} ${UNMASK_FILE}" 113 die "ln -s ${WORKON_FILE} ${UNMASK_FILE}"
98 fi 114 fi
99 115
100 find_keyword_workon_ebuilds() { 116 find_keyword_workon_ebuilds() {
101 keyword="${1}" 117 local keyword="${1}"
118 local overlay
102 119
103 local cros_overlays=$("${PORTAGEQCMD}" envvar PORTDIR_OVERLAY) 120 local cros_overlays=$("${PORTAGEQCMD}" envvar PORTDIR_OVERLAY)
104 121
105 # NOTE: overlay may be a symlink, and we have to use ${overlay}/ 122 # NOTE: overlay may be a symlink, and we have to use ${overlay}/
106 for overlay in ${cros_overlays}; do 123 for overlay in ${cros_overlays}; do
107 # only look up ebuilds named 9999 to eliminate duplicates 124 # only look up ebuilds named 9999 to eliminate duplicates
108 find ${overlay}/ -name '*9999.ebuild' | \ 125 find ${overlay}/ -name '*9999.ebuild' | \
109 xargs grep -l "inherit.*cros-workon" | \ 126 xargs grep -l "inherit.*cros-workon" | \
110 xargs grep -l "KEYWORDS=.*${keyword}.*" 127 xargs grep -l "KEYWORDS=.*${keyword}.*"
111 done 128 done
112 } 129 }
113 130
114 show_workon_ebuilds() { 131 show_workon_ebuilds() {
115 keyword=$1 132 local keyword=$1
116 133
117 find_keyword_workon_ebuilds ${keyword} | \ 134 find_keyword_workon_ebuilds ${keyword} | \
118 sed -e 's/.*\/\([^/]*\)\/\([^/]*\)\/.*\.ebuild/\1\/\2/' | \ 135 sed -e 's/.*\/\([^/]*\)\/\([^/]*\)\/.*\.ebuild/\1\/\2/' | \
119 sort -u 136 sort -u
120 # This changes the absolute path to ebuilds into category/package. 137 # This changes the absolute path to ebuilds into category/package.
121 } 138 }
122 139
123 # Canonicalize package name to category/package. 140 # Canonicalize package name to category/package.
124 canonicalize_name () { 141 canonicalize_name () {
125 local pkgfile 142 local pkgfile
(...skipping 17 matching lines...) Expand all
143 return 1 160 return 1
144 fi 161 fi
145 echo "${pkgname}" 162 echo "${pkgname}"
146 return 0 163 return 0
147 } 164 }
148 165
149 # Canonicalize a list of names. 166 # Canonicalize a list of names.
150 canonicalize_names () { 167 canonicalize_names () {
151 local atoms=$1 168 local atoms=$1
152 local names="" 169 local names=""
170 local atom
153 171
154 for atom in ${atoms}; do 172 for atom in ${atoms}; do
155 local name=$(canonicalize_name "${atom}") 173 local name=$(canonicalize_name "${atom}")
156 [ -n "${name}" ] || return 1 174 [ -n "${name}" ] || return 1
157 names+=" ${name}" 175 names+=" ${name}"
158 done 176 done
159 177
160 echo "${names}" 178 echo "${names}"
161 } 179 }
162 180
163 # Display ebuilds currently part of the live branch and open for development. 181 # Display ebuilds currently part of the live branch and open for development.
164 show_live_ebuilds () { 182 show_live_ebuilds () {
165 sed -n 's/^=\(.*\)-9999$/\1/p' "${WORKON_FILE}" 183 sed -n 's/^=\(.*\)-9999$/\1/p' "${WORKON_FILE}"
166 } 184 }
167 185
168 # Display ebuilds currently part of the live branch and open for development 186 # Display ebuilds currently part of the live branch and open for development
169 # for any board that currently has live ebuilds. 187 # for any board that currently has live ebuilds.
170 show_all_live_ebuilds () { 188 show_all_live_ebuilds () {
189 local workon_file
171 for workon_file in ${WORKON_DIR}/*; do 190 for workon_file in ${WORKON_DIR}/*; do
172 if [ -s "${workon_file}" ]; then 191 if [ -s "${workon_file}" ]; then
173 echo -e "${V_BOLD_GREEN}$(basename ${workon_file}):${V_VIDOFF}" 192 echo -e "${V_BOLD_GREEN}$(basename ${workon_file}):${V_VIDOFF}"
174 sed -n 's/^=\(.*\)-9999$/ \1/p' "${workon_file}" 193 sed -n 's/^=\(.*\)-9999$/ \1/p' "${workon_file}"
175 echo "" 194 echo ""
176 fi 195 fi
177 done 196 done
178 } 197 }
179 198
180 # This is called only for "cros-workon start". We dont handle the "stop" case si nce the local changes are ignored anyway since the 9999.ebuild is masked and we dont want to deal with what to do with the user's local changes. 199 # This is called only for "cros-workon start". We dont handle the
200 # "stop" case since the local changes are ignored anyway since the
201 # 9999.ebuild is masked and we dont want to deal with what to do with
202 # the user's local changes.
181 regen_manifest_and_sync() { 203 regen_manifest_and_sync() {
182 # Nothing to do unless you are working on the minilayout 204 # Nothing to do unless you are working on the minilayout
183 local manifest=${CHROOT_TRUNK_DIR}/.repo/manifest.xml 205 local manifest=${CHROOT_TRUNK_DIR}/.repo/manifest.xml
184 if [ $(basename $(readlink -f ${manifest})) != "minilayout.xml" ]; then 206 if [ $(basename $(readlink -f ${manifest})) != "minilayout.xml" ]; then
185 return 207 return
186 fi 208 fi
187 209
210 local pkgname
188 for pkgname in $(show_live_ebuilds); do 211 for pkgname in $(show_live_ebuilds); do
189 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${pkgname}) info) 212 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${pkgname}) info)
190 local srcdir=$(readlink -m ${CROS_WORKON_SRCDIR}) 213 local srcdir=$(readlink -m ${CROS_WORKON_SRCDIR})
191 local trunkdir=$(readlink -m ${CHROOT_TRUNK_DIR}) 214 local trunkdir=$(readlink -m ${CHROOT_TRUNK_DIR})
192 local project_path=${srcdir#${trunkdir}/} 215 local project_path=${srcdir#${trunkdir}/}
193 216
194 loman add --workon "${CROS_WORKON_PROJECT}" "${project_path}" 217 loman add --workon "${CROS_WORKON_PROJECT}" "${project_path}"
195 done 218 done
196 echo "Please run \"repo sync\" now." 219 echo "Please run \"repo sync\" now."
197 } 220 }
198 221
199 # Move a stable ebuild to the live development catgeory. The ebuild 222 # Move a stable ebuild to the live development catgeory. The ebuild
200 # src_unpack step fetches the package source for local development. 223 # src_unpack step fetches the package source for local development.
201 ebuild_to_live () { 224 ebuild_to_live () {
202 local atoms=$1 225 local atoms=$1
203 local atoms_success="" 226 local atoms_success=""
227 local atom
204 228
205 for atom in ${atoms}; do 229 for atom in ${atoms}; do
206 if ! grep -qx "=${atom}-9999" "${WORKON_FILE}" ; then 230 if ! grep -qx "=${atom}-9999" "${WORKON_FILE}" ; then
207 if sudo bash -c "echo \"=${atom}-9999\" >> \"${WORKON_FILE}\""; then 231 if sudo bash -c "echo \"=${atom}-9999\" >> \"${WORKON_FILE}\""; then
208 atoms_success="${atoms_success} ${atom}" 232 atoms_success="${atoms_success} ${atom}"
209 fi 233 fi
210 else 234 else
211 warn "Already working on ${atom}" 235 warn "Already working on ${atom}"
212 fi 236 fi
213 done 237 done
214 [ -n "${atoms_success}" ] && regen_manifest_and_sync && \ 238 [ -n "${atoms_success}" ] && regen_manifest_and_sync && \
215 info "Started working on '${atoms_success/ /}' for '${BOARD_STR}'" 239 info "Started working on '${atoms_success/ /}' for '${BOARD_STR}'"
216 } 240 }
217 241
218 # Move a live development ebuild back to stable. 242 # Move a live development ebuild back to stable.
219 ebuild_to_stable () { 243 ebuild_to_stable () {
220 local atoms=$1 244 local atoms=$1
221 local atoms_success="" 245 local atoms_success=""
246 local atom
222 247
223 for atom in ${atoms}; do 248 for atom in ${atoms}; do
224 if grep -qx "=${atom}-9999" "${WORKON_FILE}" ; then 249 if grep -qx "=${atom}-9999" "${WORKON_FILE}" ; then
225 if sudo sed -e "/^=${atom/\//\\/}-9999\$/d" -i "${WORKON_FILE}"; then 250 if sudo sed -e "/^=${atom/\//\\/}-9999\$/d" -i "${WORKON_FILE}"; then
226 atoms_success="${atoms_success} ${atom}" 251 atoms_success="${atoms_success} ${atom}"
227 fi 252 fi
228 else 253 else
229 warn "Not working on ${atom}" 254 warn "Not working on ${atom}"
230 fi 255 fi
231 done 256 done
232 [ -n "${atoms_success}" ] && \ 257 [ -n "${atoms_success}" ] && \
233 info "Stopped working on '${atoms_success/ /}' for '${BOARD_STR}'" 258 info "Stopped working on '${atoms_success/ /}' for '${BOARD_STR}'"
234 } 259 }
235 260
236 # Run a command on all or a set of repos. 261 # Run a command on all or a set of repos.
237 ebuild_iterate() { 262 ebuild_iterate() {
238 local atoms=$1 263 local atoms=$1
264 local atom
239 265
240 for atom in ${atoms}; do 266 for atom in ${atoms}; do
241 info "Running \"${FLAGS_command}\" on ${atom}" 267 info "Running \"${FLAGS_command}\" on ${atom}"
242 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${atom}) info) 268 eval $(${EBUILDCMD} $(${EQUERYCMD} which ${atom}) info)
243 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}") 269 (cd "${CROS_WORKON_SRCDIR}" && bash -c "${FLAGS_command}")
244 done 270 done
245 } 271 }
246 272
247 # --all makes commands operate on different lists 273 # --all makes commands operate on different lists
248 if [ ${FLAGS_all} = "${FLAGS_TRUE}" ]; then 274 if [ ${FLAGS_all} = "${FLAGS_TRUE}" ]; then
249 case ${WORKON_CMD} in 275 case ${WORKON_CMD} in
250 start) ATOM_LIST=$(show_workon_ebuilds ${BOARD_KEYWORD});; 276 start) ATOM_LIST=$(show_workon_ebuilds ${BOARD_KEYWORD});;
251 stop|iterate) ATOM_LIST=$(show_live_ebuilds);; 277 stop|iterate) ATOM_LIST=$(show_live_ebuilds);;
252 list|list-all) ;; 278 list) ;;
253 *) die "--all is invalid for the given command";; 279 *) die "--all is invalid for the given command";;
254 esac 280 esac
255 else # not selected --all 281 else # not selected --all
256 case ${WORKON_CMD} in 282 case ${WORKON_CMD} in
257 start|stop|iterate) 283 start|stop|iterate)
258 ATOM_LIST=$@ 284 ATOM_LIST=$@
259 if [ -z "${ATOM_LIST}" ]; then 285 if [ -z "${ATOM_LIST}" ]; then
260 die "${WORKON_CMD}: No packages specified" 286 die "${WORKON_CMD}: No packages specified"
261 elif ! ATOM_LIST=$(canonicalize_names "${ATOM_LIST}"); then 287 elif ! ATOM_LIST=$(canonicalize_names "${ATOM_LIST}"); then
262 die "Error parsing package list" 288 die "Error parsing package list"
263 fi;; 289 fi;;
264 *) ;; 290 *) ;;
265 esac 291 esac
266 fi 292 fi
267 293
268 case ${WORKON_CMD} in 294 case ${WORKON_CMD} in
269 start) ebuild_to_live "${ATOM_LIST}" ;; 295 start) ebuild_to_live "${ATOM_LIST}" ;;
270 stop) ebuild_to_stable "${ATOM_LIST}" ;; 296 stop) ebuild_to_stable "${ATOM_LIST}" ;;
271 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || show_worko n_ebuilds ${BOARD_KEYWORD} ;; 297 list) [ ${FLAGS_all} = "${FLAGS_FALSE}" ] && show_live_ebuilds || \
298 show_workon_ebuilds ${BOARD_KEYWORD} ;;
272 list-all) show_all_live_ebuilds ;; 299 list-all) show_all_live_ebuilds ;;
273 iterate)ebuild_iterate "${ATOM_LIST}" ;; 300 iterate) ebuild_iterate "${ATOM_LIST}" ;;
274 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;; 301 *) die "$(basename $0): command '${WORKON_CMD}' not recognized" ;;
275 esac 302 esac
OLDNEW
« no previous file with comments | « cros_show_stacks ('k') | emit_gpt_scripts.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698