|  | #!/usr/bin/env python | 
|  | # | 
|  | # Copyright (C) 2012 The Android Open Source Project | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | #      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  |  | 
|  | """ | 
|  | Prints to stdout the package names that have overlay changes between | 
|  | current_overlays.txt and previous_overlays.txt. | 
|  |  | 
|  | Usage: diff_package_overlays.py <current_packages.txt> <current_overlays.txt> <previous_overlays.txt> | 
|  | current_packages.txt contains all package names separated by space in the current build. | 
|  | This script modfies current_packages.txt if necessary: if there is a package in | 
|  | previous_overlays.txt but absent from current_packages.txt, we copy that line | 
|  | from previous_overlays.txt over to current_packages.txt. Usually that means we | 
|  | just don't care that package in the current build (for example we are switching | 
|  | from a full build to a partial build with mm/mmm), and we should carry on the | 
|  | previous overlay config so current_overlays.txt always reflects the current | 
|  | status of the entire tree. | 
|  |  | 
|  | Format of current_overlays.txt and previous_overlays.txt: | 
|  | <package_name> <resource_overlay> [resource_overlay ...] | 
|  | <package_name> <resource_overlay> [resource_overlay ...] | 
|  | ... | 
|  | """ | 
|  |  | 
|  | import sys | 
|  |  | 
|  | def main(argv): | 
|  | if len(argv) != 4: | 
|  | print >> sys.stderr, __doc__ | 
|  | sys.exit(1) | 
|  |  | 
|  | f = open(argv[1]) | 
|  | all_packages = set(f.read().split()) | 
|  | f.close() | 
|  |  | 
|  | def load_overlay_config(filename): | 
|  | f = open(filename) | 
|  | result = {} | 
|  | for line in f: | 
|  | line = line.strip() | 
|  | if not line or line.startswith("#"): | 
|  | continue | 
|  | words = line.split() | 
|  | result[words[0]] = " ".join(words[1:]) | 
|  | f.close() | 
|  | return result | 
|  |  | 
|  | current_overlays = load_overlay_config(argv[2]) | 
|  | previous_overlays = load_overlay_config(argv[3]) | 
|  |  | 
|  | result = [] | 
|  | carryon = [] | 
|  | for p in current_overlays: | 
|  | if p not in previous_overlays: | 
|  | result.append(p) | 
|  | elif current_overlays[p] != previous_overlays[p]: | 
|  | result.append(p) | 
|  | for p in previous_overlays: | 
|  | if p not in current_overlays: | 
|  | if p in all_packages: | 
|  | # overlay changed | 
|  | result.append(p) | 
|  | else: | 
|  | # we don't build p in the current build. | 
|  | carryon.append(p) | 
|  |  | 
|  | # Add carryon to the current overlay config file. | 
|  | if carryon: | 
|  | f = open(argv[2], "a") | 
|  | for p in carryon: | 
|  | f.write(p + " " + previous_overlays[p] + "\n") | 
|  | f.close() | 
|  |  | 
|  | # Print out the package names that have overlay change. | 
|  | for r in result: | 
|  | print r | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main(sys.argv) |