1f6ef4395fe1896ba68c80e52cb24763b0fcfe7f8Caroline Tice#!/usr/bin/env python2 2d6a79af67cea3715984c5acab383e52742ae12d8cmtice# 3d6a79af67cea3715984c5acab383e52742ae12d8cmtice# Copyright 2015 Google Inc. All Rights Reserved 4545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden"""The script to generate a cleanup script after setup.sh. 5e57523abd8f2a5aa0b93f1248d6d969d0865781bRahul Chaudhry 6545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy BurdenThis script takes a set of flags, telling it what setup.sh changed 7e57523abd8f2a5aa0b93f1248d6d969d0865781bRahul Chaudhryduring the set up process. Based on the values of the input flags, it 8545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burdengenerates a cleanup script, named ${BOARD}_cleanup.sh, which will 9545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burdenundo the changes made by setup.sh, returning everything to its 10e57523abd8f2a5aa0b93f1248d6d969d0865781bRahul Chaudhryoriginal state. 11e57523abd8f2a5aa0b93f1248d6d969d0865781bRahul Chaudhry""" 12d6a79af67cea3715984c5acab383e52742ae12d8cmtice 13cbc5a2617f8d63e3319e159eab2c407952df1df9Rahul Chaudhryfrom __future__ import print_function 14cbc5a2617f8d63e3319e159eab2c407952df1df9Rahul Chaudhry 15d6a79af67cea3715984c5acab383e52742ae12d8cmticeimport argparse 16d6a79af67cea3715984c5acab383e52742ae12d8cmticeimport sys 17d6a79af67cea3715984c5acab383e52742ae12d8cmtice 18d6a79af67cea3715984c5acab383e52742ae12d8cmtice 19d6a79af67cea3715984c5acab383e52742ae12d8cmticedef Usage(parser, msg): 20cbc5a2617f8d63e3319e159eab2c407952df1df9Rahul Chaudhry print('ERROR: ' + msg) 21f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano parser.print_help() 22f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano sys.exit(1) 23f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 24d6a79af67cea3715984c5acab383e52742ae12d8cmtice 25d6a79af67cea3715984c5acab383e52742ae12d8cmticedef Main(argv): 26545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden """Generate a script to undo changes done by setup.sh 27647950a869dbc19237843382b38b2e2867a3c73bRahul Chaudhry 28545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden The script setup.sh makes a change that needs to be 29c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice undone, namely it creates a soft link making /build/${board} point 30c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice to /build/${board}.work. To do this, it had to see if 31c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice /build/${board} already existed, and if so, whether it was a real 32c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice tree or a soft link. If it was soft link, it saved the old value 33c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice of the link, then deleted it and created the new link. If it was 34c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice a real tree, it renamed the tree to /build/${board}.save, and then 35c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice created the new soft link. If the /build/${board} did not 36c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice previously exist, then it just created the new soft link. 37d6a79af67cea3715984c5acab383e52742ae12d8cmtice 38545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden This function takes arguments that tell it exactly what setup.sh 39d6a79af67cea3715984c5acab383e52742ae12d8cmtice actually did, then generates a script to undo those exact changes. 40c4d58d04b0f92b52c645f0b8a0fc1d5e5b983e5fCaroline Tice """ 41d6a79af67cea3715984c5acab383e52742ae12d8cmtice 42f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano parser = argparse.ArgumentParser() 434cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden parser.add_argument( 444cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden '--board', 454cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden dest='board', 464cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden required=True, 474cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden help='Chromeos board for packages/image.') 484cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden 494cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden parser.add_argument( 504cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden '--old_tree_missing', 514cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden dest='tree_existed', 524cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden action='store_false', 534cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden help='Did /build/${BOARD} exist.', 544cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden default=True) 554cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden 564cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden parser.add_argument( 574cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden '--renamed_tree', 584cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden dest='renamed_tree', 594cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden action='store_true', 604cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden help='Was /build/${BOARD} saved & renamed.', 614cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden default=False) 624cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden 634cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden parser.add_argument( 644cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden '--old_link', 654cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden dest='old_link', 664cc3dd8a3b2ab04cf861d7c71967de0298746cb9Cassidy Burden help=('The original build tree soft link.')) 67f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 68f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano options = parser.parse_args(argv[1:]) 69f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 70f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if options.old_link or options.renamed_tree: 71f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if not options.tree_existed: 72f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano Usage(parser, 'If --tree_existed is False, cannot have ' 73f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano '--renamed_tree or --old_link') 74f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 75f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if options.old_link and options.renamed_tree: 76f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano Usage(parser, '--old_link and --renamed_tree are incompatible options.') 77f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 78f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if options.tree_existed: 79f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if not options.old_link and not options.renamed_tree: 80f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano Usage(parser, 'If --tree_existed is True, then must have either ' 81f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano '--old_link or --renamed_tree') 82f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 83545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden out_filename = 'cros_pkg/' + options.board + '_cleanup.sh' 84f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 85f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano with open(out_filename, 'w') as out_file: 86f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_file.write('#!/bin/bash\n\n') 87f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano # First, remove the 'new' soft link. 88f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_file.write('sudo rm /build/%s\n' % options.board) 89d6a79af67cea3715984c5acab383e52742ae12d8cmtice if options.tree_existed: 90f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if options.renamed_tree: 91f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano # Old build tree existed and was a real tree, so it got 92f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano # renamed. Move the renamed tree back to the original tree. 93f6ef4395fe1896ba68c80e52cb24763b0fcfe7f8Caroline Tice out_file.write('sudo mv /build/%s.save /build/%s\n' % (options.board, 94f6ef4395fe1896ba68c80e52cb24763b0fcfe7f8Caroline Tice options.board)) 95f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano else: 96f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano # Old tree existed and was already a soft link. Re-create the 97f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano # original soft link. 98f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano original_link = options.old_link 99f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if original_link[0] == "'": 100f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano original_link = original_link[1:] 101f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano if original_link[-1] == "'": 102f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano original_link = original_link[:-1] 103f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_file.write('sudo ln -s %s /build/%s\n' % (original_link, 104f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano options.board)) 105f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_file.write('\n') 106545b947888df1d07f4ad530e1c5eec930fc283c2Cassidy Burden # Remove common.sh file 107c4671bdd601ff945b2cccbfe1aee9f931dc908c7Cassidy Burden out_file.write('rm common/common.sh\n') 108f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 109f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano return 0 110f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 111f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 112f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozanoif __name__ == '__main__': 113f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano retval = Main(sys.argv) 114f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano sys.exit(retval) 115