| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| # Copyright 2020 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. |
| |
| """The script to generate a cleanup script after setup.sh. |
| |
| This script takes a set of flags, telling it what setup.sh changed |
| during the set up process. Based on the values of the input flags, it |
| generates a cleanup script, named ${BOARD}_cleanup.sh, which will |
| undo the changes made by setup.sh, returning everything to its |
| original state. |
| """ |
| |
| from __future__ import print_function |
| |
| import argparse |
| import sys |
| |
| |
| def Usage(parser, msg): |
| print('ERROR: ' + msg) |
| parser.print_help() |
| sys.exit(1) |
| |
| |
| def Main(argv): |
| """Generate a script to undo changes done by setup.sh |
| |
| The script setup.sh makes a change that needs to be |
| undone, namely it creates a soft link making /build/${board} point |
| to /build/${board}.work. To do this, 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 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', encoding='utf-8') 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') |
| # Remove common.sh file |
| out_file.write('rm common/common.sh\n') |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| retval = Main(sys.argv) |
| sys.exit(retval) |