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
97
98
99
100
101
102
103
|
# Copyright (C) 2023 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import glob
import os
import re
import subprocess
import sys
import version_resolver as resolver
androidx_package_name = 'chromium/third_party/androidx'
def subprocessCall(args):
print(args)
return subprocess.call(args)
def subprocessCheckOutput(args):
print(args)
return subprocess.check_output(args).decode()
class PackageDEPSParser(resolver.DEPSParser):
def __init__(self):
super().__init__()
def createEntitiesFromScope(self, scope):
entities = []
for dep in scope:
if (type(scope[dep]) == dict and 'packages' in scope[dep] \
and 'dep_type' in scope[dep] and scope[dep]['dep_type'] == 'cipd'):
subdir = self.subdir(dep)
if subdir is None:
continue
entity = CIPDEntity(subdir, sp=self.topmost_supermodule_path_prefix)
path = entity.pathRelativeToTopMostSupermodule()
for pkg in scope[dep]['packages']:
p = Package(pkg['package'], pkg['version'], path)
entity.packages.append(p)
entities.append(entity)
return entities
def parse(self, deps_content, module_whitelist = []):
exec(deps_content, self.global_scope, self.local_scope)
entities = []
entities.extend(self.createEntitiesFromScope(self.local_scope['deps']))
return entities
class Package:
def __init__(self, name, version, path):
self.name = name
self.version = version
self.path = path
self.fileName = name.replace('/','.') + '.pkg'
def fetchAndDeploy(self):
if os.path.isdir(self.path):
currentDir = os.getcwd()
os.chdir(self.path)
subprocessCall(['cipd', 'pkg-fetch', self.name ,'-out' , self.fileName, '-version', self.version ])
subprocessCall(['cipd', 'pkg-deploy', self.fileName , '-root', '.' ])
os.chdir(currentDir)
else:
print('-- missing directory' + self.path + ' skipping')
def listFiles(self):
if os.path.isdir(self.path):
currentDir = os.getcwd()
os.chdir(self.path)
files = []
if os.path.isfile(self.fileName):
files = subprocessCheckOutput(['cipd', 'pkg-inspect', self.fileName]).splitlines()
files = map( lambda x: x.replace( ' F ', self.path + '/'), files)
else:
print('-- missing package file ' + self.path + ' skipping')
os.chdir(currentDir)
return files
else:
print('-- missing directory' + self.path + ' skipping')
return []
class CIPDEntity:
def __init__(self, path='', packages=[], os=[], sp=''):
self.path = path
self.packages = []
self.topmost_supermodule_path_prefix = sp
def pathRelativeToTopMostSupermodule(self):
return os.path.normpath(os.path.join(self.topmost_supermodule_path_prefix, self.path))
def findPackage(self, package):
pkg = [p for p in self.packages if p.name == package]
if len(pkg) > 1:
raise Exception(package + " is ambiguous package name for" + self.path)
return pkg[0] if pkg else None
def readEntities(self):
cipd_packages = []
cipd_packages = resolver.read(PackageDEPSParser)
print('DEPS file provides the following packages:')
for cipd_package in cipd_packages:
print(cipd_package.pathRelativeToTopMostSupermodule() + ':')
for package in cipd_package.packages:
print(' * {:<80}'.format(package.name) + package.version)
return cipd_packages
|