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

Unified Diff: cros_mark_all_as_stable

Issue 3426001: cros_mark_all_as_stable: implement tracking of eclass changes (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: More addressing Created 10 years, 3 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_all_as_stable
diff --git a/cros_mark_all_as_stable b/cros_mark_all_as_stable
index e85bb0f94291a826fef9db8d3ad3a01242c4c526..75ad4ff1932fee24ec002f4af94965e2cb9a5493 100755
--- a/cros_mark_all_as_stable
+++ b/cros_mark_all_as_stable
@@ -53,6 +53,70 @@ function package_is_blacklisted() {
expr "${1}" : "^\(${blist_regex/\\|/}\)$" &> /dev/null && return 0 || return 1
}
+function ifs_normalize() {
+ for i in $*; do echo "${i}"; done | sort -u |tr '\n' ' '
+}
+
+function eclass_affected_ebuilds() {
+ CHROMIUMOS_OVERLAY="${HOME}/trunk/src/third_party/chromiumos-overlay/"
+
+ info "Tracking eclass changes"
+ pushd "${CHROMIUMOS_OVERLAY}" 1> /dev/null
+
+ # Look at the last time chrome-bot commited anything.
+ last_bot_commit=$(
+ git log --author=chrome-bot -1|head -n 1|cut -f2 -d' '
+ )
+ info "Last bot commit is: ${last_bot_commit}"
+
+ # List of eclasses touched in all commits since that commit.
+ eclass_touched=$(ifs_normalize $(
+ git diff --name-only ${last_bot_commit}|grep "^eclass\/.*\.eclass" | \
+ sed -e 's,eclass/\(.*\)\.eclass,\1,' | \
+ sort -u
+ )
+ )
+ eclass_touched_prev=""
+
+ if [ -z "${eclass_touched}" ]; then
+ info "No eclasses changed"
+ return 0
+ fi
+
+ # Iteratively add all eclasses that inherit the current list, until
+ # the first iteration that will not add anything.
+ while [ "${eclass_touched}" != "${eclass_touched_prev}" ]; do
+ eclass_touched_prev=${eclass_touched}
+
+ # regexp to search for eclass inheritance
+ searchregexp="$(for i in ${eclass_touched}; do echo -n "\|${i}"; done)"
+ searchregexp="inherit.*\(${searchregexp/|/}\).*"
+
+ # Iterate the current list of eclasses and add immediate dependencies.
+ eclass_touched=$(ifs_normalize $(
+ find "eclass/" -name '*.eclass' | \
+ xargs grep -l "${searchregexp}" | \
+ sed -e "s,eclass/\(.*\)\.eclass,\1,"
+ ) ${eclass_touched}
+ )
+ done
+
+ info "Eclasses changed: ${eclass_touched}"
+
+ # Look which ebuilds are affected.
+ # NOTE: searchregexp is usable because last two lists of eclasses were the same
+ ebuilds_affected=$(
+ find . -name '*9999.ebuild' | \
+ xargs grep -l "cros-workon" | \
+ xargs grep -l "${searchregexp}" | \
+ sed -e "s,.\/\(.*\)/.*-9999.ebuild,\1,"
+ )
+
+ echo "${ebuilds_affected}"
+
+ popd 1> /dev/null
+}
+
# For each package, compares the head commit id to the commit id in the ebuild.
# If they do not match, add the package and its commit id into ${PACKAGE_LIST}
# and ${COMMIT_ID_LIST}
@@ -92,6 +156,10 @@ for package in ${PACKAGES}; do
fi
done
+PACKAGE_LIST=$(
+ ifs_normalize ${PACKAGE_LIST} $(eclass_affected_ebuilds)
+)
+
if [ -n "${PACKAGE_LIST}" ] ; then
info "Candidate package list ${PACKAGE_LIST}"
info "With commit id list ${COMMIT_ID_LIST}"
« 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