(export ROS_PACKAGE_PATH=$(pwd)/src; for dir in install/share/*; do pkg=$(basename $dir); echo -e "\n\n$pkg"; echo diff -r install/share/$pkg $(rospack find $pkg) --exclude CMakeLists.txt --exclude .gitignore --exclude setup.py --exclude README.md --exclude CHANGELOG.rst --exclude cmake ; ./check.py $(basename $dir); done > diff.dir)
where check.py is
import sys
import os
import copy
import filecmp
import rospkg
def compare_directories(install_dir, src_dir, ignore=None):
# Initialize dictionaries to store results
results = {
'unique_to_dir1': [],
'unique_to_dir2': [],
'differences': [],
'common_files': []
}
# Recursively compare directory structures and files
comparison = filecmp.dircmp(install_dir, src_dir, ignore=ignore)
# Files only in dir1
results['unique_to_dir1'] = comparison.left_only
# Files only in dir2
results['unique_to_dir2'] = comparison.right_only
# Files present in both directories but different
results['differences'] = comparison.diff_files
# Files that are identical in both directories
results['common_files'] = comparison.same_files
return results
def list_all_subdirectories(root_dir):
subdirectories = []
for dirpath, dirnames, _ in os.walk(root_dir):
for dirname in dirnames:
subdirectories.append(os.path.join(dirpath, dirname))
return subdirectories
if __name__ == '__main__':
rospack = rospkg.RosPack()
pkg_name = sys.argv[1]
pkg_path = rospack.get_path(pkg_name)
print("## Check [{}]".format(pkg_name))
for dir in ['.'] + [os.path.relpath(dir, pkg_path) for dir in list_all_subdirectories(pkg_path)]:
install_dir = os.path.join('install/share/', pkg_name, dir)
src_dir = os.path.join(pkg_path, dir)
if os.path.exists(install_dir):
differences = compare_directories(install_dir, src_dir,
ignore=['env-hooks', 'cmake', '.gitignore', 'CMakeLists.txt', 'CHANGELOG.rst', 'README.md', 'setup.py'])
else:
print('> Only in {}'.format(src_dir))
continue
# Display the results
for file in differences['unique_to_dir1']:
print("> Files only in directory 1: {}".format([os.path.join(dir, file)]))
for file in copy.copy(differences['unique_to_dir2']):
if os.path.exists(os.path.join('install/lib/', pkg_name, file)):
differences['unique_to_dir2'].remove(file)
for file in differences['unique_to_dir2']:
print("> Files only in directory 2: {}".format([os.path.join(dir, file)]))
for file in differences['differences']:
print("> Different files: {}".format([os.path.join(dir, file)]))
#print("Common files (identical):", differences['common_files'])
we checked that necessary files are installed
where
check.py
is