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

Unified Diff: cros_mark_branch_as_stable

Issue 3607014: Update all ebuilds to point to a branch or tag. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: More cleanup per feedback from djmm Created 10 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cros_mark_branch_as_stable
diff --git a/cros_mark_branch_as_stable b/cros_mark_branch_as_stable
new file mode 100755
index 0000000000000000000000000000000000000000..a2dfd7a6932d49d66a06235a55f480e0cce00258
--- /dev/null
+++ b/cros_mark_branch_as_stable
@@ -0,0 +1,98 @@
+#!/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)
djmm 2010/10/11 22:02:50 Bash's elegant simplicity. :)
+
+ 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698