| #!/bin/bash |
| |
| # TODO: Currently only checks trunk_staging. Should check trunk_staging first, |
| # then use the product-specfic releases. Only applies to -c though. |
| |
| function Help() { |
| cat <<@EOF@ |
| Usage: lunchable [options] |
| |
| Lists products that have no functioning lunch combo. |
| |
| options: |
| -c prints all failing lunch combos for all targets; |
| -w why? Prints the error message after each failed lunch combo. Only |
| works with -c |
| |
| @EOF@ |
| } |
| |
| complete=0 |
| why=0 |
| while getopts "cwh" option; do |
| case $option in |
| c) |
| complete=1;; |
| w) |
| why=1;; |
| h) |
| Help |
| exit;; |
| esac |
| done |
| |
| # Getting all named products can fail if we haven't lunched anything |
| source $(pwd)/build/envsetup.sh &> /dev/null |
| all_named_products=( $(get_build_var all_named_products 2> /dev/null) ) |
| if [[ $? -ne 0 ]]; then |
| echo "get_build_var all_named_products failed. Lunch something first?" >&2 |
| exit 1 |
| fi |
| total_products=${#all_named_products[@]} |
| current_product=0 |
| |
| for product in "${all_named_products[@]}"; do |
| (( current_product += 1 )) |
| single_pass=0 |
| printf " Checking ${current_product}/${total_products} \r" >&2 |
| for release in trunk_staging; do |
| for variant in eng user userdebug; do |
| lunchcombo="${product}-${release}-${variant}" |
| lunch_error="$(lunch $lunchcombo 2>&1 > /dev/null)" |
| if [[ $? -ne 0 ]]; then |
| # Lunch failed |
| if [[ $complete -eq 1 ]]; then |
| echo -e "${product} : ${lunchcombo}" |
| if [[ $why -eq 1 ]]; then |
| echo -e "$(sed 's/^/ /g' <<<$lunch_error)" |
| fi |
| fi |
| elif [[ $complete -ne 1 ]]; then |
| single_pass=1 |
| break # skip variant |
| fi |
| done |
| if [[ $single_pass -eq 1 ]]; then |
| break # skip release |
| fi |
| done |
| if [[ $complete -eq 0 ]] && [[ $single_pass -eq 0 ]]; then |
| echo "${product}" |
| fi |
| done |