blob: abfea5ebd87a441fea569d49bcabc78413a9257c [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS Authors
# 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.
"""
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)