flatcar-scripts/cros_mark_branch_as_stable
David James 807d018656 Update all ebuilds to point to a branch or tag.
Mark all ebuilds in chromiumos-overlay and chromeos-overlay as stable and
point them at the current version we have checked out.

This is useful in case we want to verify that all ebuilds are pointing at the
right commit hash when we are doing a build on a branch. It is intended to be
used prior to tagging and can be used instead of a preflight queue. It is an
alternative to cros_mark_all_as_stable that does not require a chroot and
does not increase the revision number on ebuilds.

Unlike cros_mark_all_as_stable, which only updates the latest stable ebuild
for a given board, this script updates all stable ebuilds for all boards,
including unused stable ebuilds. We do this for the sake of simplicity
because it's hard to know in advance which ebuilds are truly unused, and it
shouldn't hurt to update unused ebuilds.

This script does not support cros_mark_as_stable_blacklist. If there are any
packages in the blacklist, this script exits with an error message.

TEST=Ran this script to point power_manager at branch and tested that we
     built power_manager from the branch.
BUG=chromium-os:7218, chromium-os:6429

Change-Id: Ib2308806c5a4db979b1245a90407fd5b6353e4fd

Review URL: http://codereview.chromium.org/3607014
2010-10-11 15:04:08 -07:00

99 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Mark all ebuilds in chromiumos-overlay and chromeos-overlay as stable and
# point them at the current version we have checked out.
#
# This is useful in case we want to verify that all ebuilds are pointing at the
# right commit hash when we are doing a build on a branch. It is intended to be
# used prior to tagging and can be used instead of a preflight queue. It is an
# alternative to cros_mark_all_as_stable that does not require a chroot and
# does not increase the revision number on ebuilds.
#
# Unlike cros_mark_all_as_stable, which only updates the latest stable ebuild
# for a given board, this script updates all stable ebuilds for all boards,
# including unused stable ebuilds. We do this for the sake of simplicity
# because it's hard to know in advance which ebuilds are truly unused, and it
# shouldn't hurt to update unused ebuilds.
#
# This script does not support cros_mark_as_stable_blacklist. If there are any
# packages in the blacklist, this script exits with an error message.
#
# Long term, the plan is to get rid of this script and replace it with
# cros_mark_all_as_stable. This script is only present to help with branching.
#
# Example usage: ./cros_mark_branch_as_stable
# Load common constants. This should be the first executable line.
# The path to common.sh should be relative to your script's location.
. "$(dirname "$0")/common.sh"
function is_workon() { xargs grep -lE '^inherit.*cros-workon'; }
function is_stable() { xargs grep -lE '^KEYWORDS=[^~]*$'; }
function is_unstable() { xargs grep -lE '^KEYWORDS=.*~'; }
function get_workon_commit() {
# Get the latest workon commit associated with an ebuild.
ebuild="$1"
dir=$(dirname $ebuild)
CATEGORY=$(basename $(dirname "$dir"))
CROS_WORKON_LOCALNAME=$(basename "$dir")
CROS_WORKON_SUBDIR=
# Grab the code from the ebuild that initializes the CROS_WORKON_*
# variables, and eval it. Note that this only works if the variables are at
# the start of the line (i.e. it doesn't work for "if" statements).
eval $(grep -E '^CROS_WORKON' $ebuild)
SUFFIX="$CROS_WORKON_LOCALNAME/$CROS_WORKON_SUBDIR"
if [[ "$CATEGORY" = "chromeos-base" ]]; then
SRCDIR="$GCLIENT_ROOT/src/platform/$SUFFIX"
else
SRCDIR="$GCLIENT_ROOT/src/third_party/$SUFFIX"
fi
# TODO(anush): This hack is only necessary because the kernel ebuild has "if"
# statements, so we can't grab the CROS_WORKON_LOCALNAME properly. We should
# clean up the kernel ebuild and remove this hack.
if ! [[ -d "$SRCDIR" ]] && [[ "$CROS_WORKON_LOCALNAME" = "kernel" ]]; then
SRCDIR="$GCLIENT_ROOT/src/third_party/kernel/files"
fi
cd $SRCDIR && git rev-parse HEAD
}
BLACKLIST_FILE=$(dirname "$0")/cros_mark_as_stable_blacklist
BLACKLIST=$(cat "$BLACKLIST_FILE")
if [[ -n "$BLACKLIST" ]]; then
die "$0 does not support cros_mark_as_stable_blacklist"
fi
for overlay in "$GCLIENT_ROOT/src/private-overlays/chromeos-overlay" \
"$GCLIENT_ROOT/src/third_party/chromiumos-overlay"; do
if [[ -d "$overlay" ]]; then
ebuilds=$(find "$overlay" -type f -name "*.ebuild" | is_workon | is_stable)
for ebuild in $ebuilds; do
dir=$(dirname "$ebuild")
unstable_ebuild=$(echo "$dir"/*-9999.ebuild | is_workon | is_unstable)
if [[ -f "$unstable_ebuild" ]]; then
COMMIT=$(get_workon_commit $unstable_ebuild)
sed -e '/^KEYWORDS="/s/~//g' -e '/^CROS_WORKON_COMMIT=/d' \
-e "/^EAPI/s/\$/\nCROS_WORKON_COMMIT=\"$COMMIT\"/g" \
"$unstable_ebuild" > "$ebuild"
else
echo "No 9999 ebuild for $ebuild" >&2
COMMIT=$(get_workon_commit $ebuild)
sed -i -e "/^CROS_WORKON_COMMIT/s|=.*|=\"$COMMIT\"|" "$ebuild"
fi
if [[ -z "$COMMIT" ]]; then
die "No commit hash for $ebuild"
fi
done
fi
done
echo Updated all ebuilds