aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/chroot.py
blob: b10ddbac67fe2cead1c6db41a295bc0711eaf067 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/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.

"""Chroot helper functions."""

from __future__ import print_function

import os
import subprocess
import collections

CommitContents = collections.namedtuple('CommitContents', ['url', 'cl_number'])


def InChroot():
  """Returns True if currently in the chroot."""
  return 'CROS_WORKON_SRCROOT' in os.environ


def VerifyOutsideChroot():
  """Checks whether the script invoked was executed in the chroot.

  Raises:
    AssertionError: The script was run inside the chroot.
  """

  assert not InChroot(), 'Script should be run outside the chroot.'


def GetChrootEbuildPaths(chromeos_root, packages):
  """Gets the chroot path(s) of the package(s).

  Args:
    chromeos_root: The absolute path to the chroot to
    use for executing chroot commands.
    packages: A list of a package/packages to
    be used to find their chroot path.

  Returns:
    A list of chroot paths of the packages' ebuild files.

  Raises:
    ValueError: Failed to get the chroot path of a package.
  """

  chroot_paths = []

  # Find the chroot path for each package's ebuild.
  for package in packages:
    chroot_path = subprocess.check_output(
        ['cros_sdk', '--', 'equery', 'w', package],
        cwd=chromeos_root,
        encoding='utf-8')
    chroot_paths.append(chroot_path.strip())

  return chroot_paths


def ConvertChrootPathsToAbsolutePaths(chromeos_root, chroot_paths):
  """Converts the chroot path(s) to absolute symlink path(s).

  Args:
    chromeos_root: The absolute path to the chroot.
    chroot_paths: A list of chroot paths to convert to absolute paths.

  Returns:
    A list of absolute path(s).

  Raises:
    ValueError: Invalid prefix for the chroot path or
    invalid chroot paths were provided.
  """

  abs_paths = []

  chroot_prefix = '/mnt/host/source/'

  # Iterate through the chroot paths.
  #
  # For each chroot file path, remove '/mnt/host/source/' prefix
  # and combine the chroot path with the result and add it to the list.
  for chroot_path in chroot_paths:
    if not chroot_path.startswith(chroot_prefix):
      raise ValueError('Invalid prefix for the chroot path: %s' % chroot_path)

    rel_path = chroot_path[len(chroot_prefix):]

    # combine the chromeos root path + '/src/...'
    abs_path = os.path.join(chromeos_root, rel_path)

    abs_paths.append(abs_path)

  return abs_paths