mirror of
				https://github.com/centreon/centreon-plugins.git
				synced 2025-10-31 03:13:49 +01:00 
			
		
		
		
	Co-authored-by: Roman Morandell <46994680+rmorandell-pgum@users.noreply.github.com> Refs: CTOR-723
		
			
				
	
	
		
			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)
 |