| #!/usr/bin/python |
| # |
| # Copyright 2015 Google Inc. All Rights Reserved |
| # |
| # This script takes a set of flags, telling it what cros_pkg_setup.sh changed |
| # during the set up process. Based on the values of the input flags, it |
| # generates a cleanup script, named cros_pkg_${BOARD}_cleanup.sh, which will |
| # undo the changes made by cros_pkg_setup.sh, returning everything to its |
| # original state. |
| # |
| |
| import argparse |
| import os |
| import sys |
| |
| |
| def Usage(parser, msg): |
| print "ERROR: " + msg |
| parser.print_help() |
| sys.exit(1) |
| |
| def Main(argv): |
| """ |
| The script cros_pkg_setup.sh make two main changes that need to be |
| undone: 1). It creates a soft link making /build/${board} point to |
| /build/${board}.work, and 2). It saves a copy of the build_image |
| script, then updates build_image to not execute 'eclean'. For the first |
| change, it had to see if /build/${board} already existed, and if so, whether |
| it was a real tree or a soft link. If it was soft link, it saved the old |
| value of the link, then deleted it and created the new link. If it was a |
| real tree, it renamed the tree to /build/${board}.save, and then created the |
| new soft link. If the /build/${board} did not previously exist, then it just |
| created the new soft link. |
| |
| This function takes arguments that tell it exactly what cros_pkg_setup.sh |
| actually did, then generates a script to undo those exact changes. |
| """ |
| |
| parser = argparse.ArgumentParser() |
| parser.add_argument("--board", dest="board", required=True, |
| help="Chromeos board for packages/image.") |
| |
| parser.add_argument("--old_tree_missing", dest="tree_existed", |
| action="store_false", |
| help="Did /build/${BOARD} exist.", default=True) |
| |
| parser.add_argument("--renamed_tree", dest="renamed_tree", |
| action="store_true", |
| help="Was /build/${BOARD} saved & renamed.", |
| default=False) |
| |
| parser.add_argument("--old_link", dest="old_link", |
| help=("The original build tree soft link.")) |
| |
| options = parser.parse_args(argv[1:]) |
| |
| if options.old_link or options.renamed_tree: |
| if not options.tree_existed: |
| Usage(parser, "If --tree_existed is False, cannot have " |
| "--renamed_tree or --old_link") |
| |
| if options.old_link and options.renamed_tree: |
| Usage(parser, "--old_link and --renamed_tree are incompatible options.") |
| |
| if options.tree_existed: |
| if not options.old_link and not options.renamed_tree: |
| Usage(parser, "If --tree_existed is True, then must have either " |
| "--old_link or --renamed_tree") |
| |
| out_filename = "cros_pkg_" + options.board + "_cleanup.sh" |
| |
| with open(out_filename, "w") as out_file: |
| out_file.write("#!/bin/bash\n\n") |
| # First, remove the 'new' soft link. |
| out_file.write("sudo rm /build/%s\n" % options.board) |
| if options.tree_existed: |
| if options.renamed_tree: |
| # Old build tree existed and was a real tree, so it got |
| # renamed. Move the renamed tree back to the original tree. |
| out_file.write("sudo mv /build/%s.save /build/%s\n" |
| % (options.board, options.board)) |
| else: |
| # Old tree existed and was already a soft link. Re-create the |
| # original soft link. |
| original_link = options.old_link |
| if original_link[0] == "'": |
| original_link = original_link[1:] |
| if original_link[-1] == "'": |
| original_link = original_link[:-1] |
| out_file.write("sudo ln -s %s /build/%s\n" % (original_link, |
| options.board)) |
| out_file.write("\n") |
| # Restore the original saved version of build_image script. |
| out_file.write("mv ~/trunk/src/scripts/build_image.save " |
| "~/trunk/src/scripts/build_image\n\n") |
| # Remove cros_pkg_common.sh file |
| out_file.write("rm cros_pkg_common.sh\n") |
| |
| return 0 |
| |
| |
| if __name__ == "__main__": |
| retval = Main(sys.argv) |
| sys.exit(retval) |