OLD | NEW |
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 # Wrapper scripts around cros_mark_as_stable that marks all packages as stable | 7 # Wrapper scripts around cros_mark_as_stable that marks all packages as stable |
8 # that have CROS_WORKON_COMMIT that is different than the current HEAD commit | 8 # that have CROS_WORKON_COMMIT that is different than the current HEAD commit |
9 # of the corresponding git repository. | 9 # of the corresponding git repository. |
10 | 10 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 [ -f "${BLACKLIST_FILE}" ] && \ | 47 [ -f "${BLACKLIST_FILE}" ] && \ |
48 PACKAGE_BLACKLIST=$(cat "${BLACKLIST_FILE}") | 48 PACKAGE_BLACKLIST=$(cat "${BLACKLIST_FILE}") |
49 | 49 |
50 function package_is_blacklisted() { | 50 function package_is_blacklisted() { |
51 # Makes a list that looks like "\|package1\|package2\|...packagen". | 51 # Makes a list that looks like "\|package1\|package2\|...packagen". |
52 local blist_regex=$(for i in ${PACKAGE_BLACKLIST}; do echo -n "\\|${i}"; done) | 52 local blist_regex=$(for i in ${PACKAGE_BLACKLIST}; do echo -n "\\|${i}"; done) |
53 expr "${1}" : "^\(${blist_regex/\\|/}\)$" &> /dev/null && return 0 || return 1 | 53 expr "${1}" : "^\(${blist_regex/\\|/}\)$" &> /dev/null && return 0 || return 1 |
54 } | 54 } |
55 | 55 |
56 function ifs_normalize() { | |
57 for i in $*; do echo "${i}"; done | sort -u |tr '\n' ' ' | |
58 } | |
59 | |
60 function eclass_affected_ebuilds() { | |
61 CHROMIUMOS_OVERLAY="${HOME}/trunk/src/third_party/chromiumos-overlay/" | |
62 | |
63 info "Tracking eclass changes" | |
64 pushd "${CHROMIUMOS_OVERLAY}" 1> /dev/null | |
65 | |
66 # Look at the last time chrome-bot commited anything. | |
67 last_bot_commit=$( | |
68 git log --author=chrome-bot -1|head -n 1|cut -f2 -d' ' | |
69 ) | |
70 info "Last bot commit is: ${last_bot_commit}" | |
71 | |
72 # List of eclasses touched in all commits since that commit. | |
73 eclass_touched=$(ifs_normalize $( | |
74 git diff --name-only ${last_bot_commit}|grep "^eclass\/.*\.eclass" | \ | |
75 sed -e 's,eclass/\(.*\)\.eclass,\1,' | \ | |
76 sort -u | |
77 ) | |
78 ) | |
79 eclass_touched_prev="" | |
80 | |
81 if [ -z "${eclass_touched}" ]; then | |
82 info "No eclasses changed" | |
83 return 0 | |
84 fi | |
85 | |
86 # Iteratively add all eclasses that inherit the current list, until | |
87 # the first iteration that will not add anything. | |
88 while [ "${eclass_touched}" != "${eclass_touched_prev}" ]; do | |
89 eclass_touched_prev=${eclass_touched} | |
90 | |
91 # regexp to search for eclass inheritance | |
92 searchregexp="$(for i in ${eclass_touched}; do echo -n "\|${i}"; done)" | |
93 searchregexp="inherit.*\(${searchregexp/|/}\).*" | |
94 | |
95 # Iterate the current list of eclasses and add immediate dependencies. | |
96 eclass_touched=$(ifs_normalize $( | |
97 find "eclass/" -name '*.eclass' | \ | |
98 xargs grep -l "${searchregexp}" | \ | |
99 sed -e "s,eclass/\(.*\)\.eclass,\1," | |
100 ) ${eclass_touched} | |
101 ) | |
102 done | |
103 | |
104 info "Eclasses changed: ${eclass_touched}" | |
105 | |
106 # Look which ebuilds are affected. | |
107 # NOTE: searchregexp is usable because last two lists of eclasses were the sam
e | |
108 ebuilds_affected=$( | |
109 find . -name '*9999.ebuild' | \ | |
110 xargs grep -l "cros-workon" | \ | |
111 xargs grep -l "${searchregexp}" | \ | |
112 sed -e "s,.\/\(.*\)/.*-9999.ebuild,\1," | |
113 ) | |
114 | |
115 echo "${ebuilds_affected}" | |
116 | |
117 popd 1> /dev/null | |
118 } | |
119 | |
120 # For each package, compares the head commit id to the commit id in the ebuild. | 56 # For each package, compares the head commit id to the commit id in the ebuild. |
121 # If they do not match, add the package and its commit id into ${PACKAGE_LIST} | 57 # If they do not match, add the package and its commit id into ${PACKAGE_LIST} |
122 # and ${COMMIT_ID_LIST} | 58 # and ${COMMIT_ID_LIST} |
123 for package in ${PACKAGES}; do | 59 for package in ${PACKAGES}; do |
124 if package_is_blacklisted ${package}; then | 60 if package_is_blacklisted ${package}; then |
125 info "${package} blacklisted, skipping" | 61 info "${package} blacklisted, skipping" |
126 continue | 62 continue |
127 fi | 63 fi |
128 # We need to pick up any stable ebuilds for any platform. | 64 # We need to pick up any stable ebuilds for any platform. |
129 ebuild_path=$(ACCEPT_KEYWORDS="arm x86 amd64" ${EQUERYCMD} which ${package})\ | 65 ebuild_path=$(ACCEPT_KEYWORDS="arm x86 amd64" ${EQUERYCMD} which ${package})\ |
(...skipping 19 matching lines...) Expand all Loading... |
149 # egrep succeeds if there are important differences between the ebuilds. | 85 # egrep succeeds if there are important differences between the ebuilds. |
150 if diff "${ebuild_path}" "${ebuild_9999_path}" | \ | 86 if diff "${ebuild_path}" "${ebuild_9999_path}" | \ |
151 egrep -v "KEYWORDS|CROS_WORKON_COMMIT|^---|^[<>]\ *$|^[0-9]"; then | 87 egrep -v "KEYWORDS|CROS_WORKON_COMMIT|^---|^[<>]\ *$|^[0-9]"; then |
152 info "Detected 9999 ebuild change for ${package}." | 88 info "Detected 9999 ebuild change for ${package}." |
153 PACKAGE_LIST="${PACKAGE_LIST} ${package}" | 89 PACKAGE_LIST="${PACKAGE_LIST} ${package}" |
154 COMMIT_ID_LIST="${COMMIT_ID_LIST} ${egit_commit}" | 90 COMMIT_ID_LIST="${COMMIT_ID_LIST} ${egit_commit}" |
155 fi | 91 fi |
156 fi | 92 fi |
157 done | 93 done |
158 | 94 |
159 PACKAGE_LIST=$( | |
160 ifs_normalize ${PACKAGE_LIST} $(eclass_affected_ebuilds) | |
161 ) | |
162 | |
163 if [ -n "${PACKAGE_LIST}" ] ; then | 95 if [ -n "${PACKAGE_LIST}" ] ; then |
164 info "Candidate package list ${PACKAGE_LIST}" | 96 info "Candidate package list ${PACKAGE_LIST}" |
165 info "With commit id list ${COMMIT_ID_LIST}" | 97 info "With commit id list ${COMMIT_ID_LIST}" |
166 | 98 |
167 ./cros_mark_as_stable --board ${FLAGS_board} -p "${PACKAGE_LIST}" \ | 99 ./cros_mark_as_stable --board ${FLAGS_board} -p "${PACKAGE_LIST}" \ |
168 -i "${COMMIT_ID_LIST}" -t ${FLAGS_tracking_branch} commit || \ | 100 -i "${COMMIT_ID_LIST}" -t ${FLAGS_tracking_branch} commit || \ |
169 die "Could not mark all packages as stable" | 101 die "Could not mark all packages as stable" |
170 else | 102 else |
171 info "No candidate packages to be marked" | 103 info "No candidate packages to be marked" |
172 fi | 104 fi |
OLD | NEW |