| #!/usr/bin/env python |
| # Copyright (c) 2018 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import os |
| import re |
| import shutil |
| import sys |
| |
| |
| CIPD_SUBDIR_RE = '@Subdir (.*)' |
| |
| |
| def parse_cipd(root, contents): |
| tree = {} |
| current_subdir = None |
| for line in contents: |
| line = line.strip() |
| match = re.match(CIPD_SUBDIR_RE, line) |
| if match: |
| current_subdir = os.path.join(root, *match.group(1).split('/')) |
| elif line and current_subdir: |
| tree.setdefault(current_subdir, []).append(line) |
| return tree |
| |
| |
| def main(): |
| assert sys.argv[1] == 'ensure' |
| parser = argparse.ArgumentParser() |
| parser.add_argument('-ensure-file') |
| parser.add_argument('-root') |
| args, _ = parser.parse_known_args() |
| |
| with open(args.ensure_file) as f: |
| new_content = parse_cipd(args.root, f.readlines()) |
| |
| # Install new packages |
| for path, packages in new_content.items(): |
| if not os.path.exists(path): |
| os.makedirs(path) |
| with open(os.path.join(path, '_cipd'), 'wb') as f: |
| f.write('\n'.join(packages).encode('utf-8', 'replace')) |
| |
| # Save the ensure file that we got |
| shutil.copy(args.ensure_file, os.path.join(args.root, '_cipd')) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |