69 lines
2.3 KiB
Python
69 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from sys import argv
|
|
import re
|
|
import os
|
|
import json
|
|
|
|
common = argv[1] == 'true'
|
|
|
|
with open('package_directories.txt') as f:
|
|
line_packages = f.readline().strip('\n')
|
|
n = len(line_packages)
|
|
a = line_packages[1:n-1]
|
|
input_packages = a.split(',')
|
|
packages = set()
|
|
for package in input_packages:
|
|
packages.add(package.strip('"/').removeprefix('src/'))
|
|
|
|
with open('plugins.txt') as f:
|
|
line_plugins = f.readline().strip('\n')
|
|
n = len(line_plugins)
|
|
a = line_plugins[1:n-1]
|
|
input_plugins = a.split(',')
|
|
plugins = set()
|
|
for plugin in input_plugins:
|
|
plugins.add(plugin.strip('"/').removeprefix('src/'))
|
|
|
|
list_plugins = set()
|
|
list_packages = set()
|
|
|
|
for plugin in plugins:
|
|
list_plugins.add(plugin)
|
|
try:
|
|
found = re.search('(.*)\/(?:plugin\.pm|(?:lib|mode|custom)\/.+)', plugin).group(1)
|
|
list_plugins.add(found)
|
|
except AttributeError:
|
|
pass
|
|
|
|
for filepath in os.popen('find packaging -type f -name pkg.json').read().split('\n')[0:-1]:
|
|
packaging_file = open(filepath)
|
|
packaging = json.load(packaging_file)
|
|
packaging_file.close()
|
|
packaging_path = packaging["pkg_name"]
|
|
|
|
directory_path = re.search('^(.+)\/pkg.json', filepath).group(1)
|
|
|
|
if common:
|
|
# if the common flag is true, then all packages are included
|
|
list_packages.add(packaging_path)
|
|
elif directory_path in packages:
|
|
# if a package file is changed or created, then the package is included
|
|
list_packages.add(packaging_path)
|
|
else:
|
|
# if we don't build all the plugins and no modification have been made to this package's
|
|
# specification, then examine if its source code has been changed
|
|
for pkg_file in packaging["files"]:
|
|
# for each source code file or directory included in the current package
|
|
pkg_file_dir = pkg_file.strip('/').removeprefix('src/')
|
|
# the current package is impacted by the changes if one of the changed files
|
|
# is located inside one of the directories of the package
|
|
for modified_file in list_plugins:
|
|
# if the beginning of the changed file path includes one of the package's directories
|
|
if modified_file.find(pkg_file_dir) == 0:
|
|
# then the package is included
|
|
list_packages.add(packaging_path)
|
|
break
|
|
|
|
print(*list_packages)
|