@@ -6,6 +6,8 @@ DIR_REBUILT=$2 # Directory containing rebuilt rpms
66EXCLUDE_RPMS=$3 # Comma-separated list of patterns to exclude from comparison
77EXCLUDE_PATTERNS=(" ${EXCLUDE_RPMS// ,/ } " ) # Convert to array
88REQUIRES_DIR=" rpm_requires" # Directory to store rpm requires output
9+ PACKAGE_CONTENT_DIR=" package_content" # Directory to store package content output
10+ EXIT_LATER=0 # Flag to indicate if we should exit later due to differences
911
1012# === Function: Validate directory existence and non-empty (simple ls check) ===
1113validate_directory () {
@@ -33,53 +35,74 @@ get_filtered_file_list() {
3335 " ${FIND_CMD[@]} " | xargs -r -n1 basename | sort
3436}
3537
36- # === Function: Run rpm requires on each file in both directories and save outputs ===
37- run_rpm_requires () {
38- local FILES=" $1 " # multiline string of filenames
39- mkdir -p " $REQUIRES_DIR /CI"
40- mkdir -p " $REQUIRES_DIR /REBUILT"
41-
42- echo " Running rpm requires queries..."
38+ # === Function: Collect rpm requires or content ===
39+ get_rpm_info () {
40+ local FILES=" $1 "
41+ local MODE=" $2 "
42+
43+ if [ " $MODE " == " requires" ]; then
44+ mkdir -p " $REQUIRES_DIR /CI"
45+ mkdir -p " $REQUIRES_DIR /REBUILT"
46+ elif [ " $MODE " == " content" ]; then
47+ mkdir -p " $PACKAGE_CONTENT_DIR /CI"
48+ mkdir -p " $PACKAGE_CONTENT_DIR /REBUILT"
49+ else
50+ echo " Error: Invalid mode specified. Use 'requires' or 'content'."
51+ exit 1
52+ fi
4353
4454 while IFS= read -r FILENAME; do
4555 local FILEPATH_CI=" $DIR_CI /$FILENAME "
4656 local FILEPATH_REBUILT=" $DIR_REBUILT /$FILENAME "
47- rpm -q --requires -p " $FILEPATH_CI " 2> /dev/null | sed -e ' s/>=.*/>=/' -e ' s/\([A-Z0-9._]*\)\([0-9]*bit\)$//' -e ' /MariaDB-compat/d' -e ' /rpmlib(FileCaps)/d' > " $REQUIRES_DIR /CI/$FILENAME .requires"
48- rpm -q --requires -p " $FILEPATH_REBUILT " 2> /dev/null | sed -e ' s/>=.*/>=/' -e ' s/\([A-Z0-9._]*\)\([0-9]*bit\)$//' -e ' /MariaDB-compat/d' -e ' /rpmlib(FileCaps)/d' > " $REQUIRES_DIR /REBUILT/$FILENAME .requires"
57+
58+ if [ " $MODE " == " requires" ]; then
59+ rpm -q --requires -p " $FILEPATH_CI " 2> /dev/null | sed -e ' s/>=.*/>=/' -e ' s/\([A-Z0-9._]*\)\([0-9]*bit\)$//' -e ' /MariaDB-compat/d' -e ' /rpmlib(FileCaps)/d' > " $REQUIRES_DIR /CI/$FILENAME .requires"
60+ rpm -q --requires -p " $FILEPATH_REBUILT " 2> /dev/null | sed -e ' s/>=.*/>=/' -e ' s/\([A-Z0-9._]*\)\([0-9]*bit\)$//' -e ' /MariaDB-compat/d' -e ' /rpmlib(FileCaps)/d' > " $REQUIRES_DIR /REBUILT/$FILENAME .requires"
61+ elif [ " $MODE " == " content" ]; then
62+ # src_1 to src_0 replacement is to account for in-source (CI build) vs out-of-source (rebuild)
63+ # build-id paths are unique per build, so we exclude them
64+ rpm -qlp " $FILEPATH_CI " 2> /dev/null | sed -e ' /\.build-id/d; s@/src_1@/src_0@' | sort -u > " $PACKAGE_CONTENT_DIR /CI/$FILENAME .content"
65+ rpm -qlp " $FILEPATH_REBUILT " 2> /dev/null | sed -e ' /\.build-id/d; s@/src_1@/src_0@' | sort -u > " $PACKAGE_CONTENT_DIR /REBUILT/$FILENAME .content"
66+ fi
4967 done <<< " $FILES"
5068}
5169
52- # === Function: Compare rpm requires output files and report differences ===
53- compare_requires () {
70+
71+ # === Function: Compare rpm requires or content ===
72+ compare_rpm_info () {
73+ local MODE=" $1 "
74+ local DIR=" $2 "
75+ local OTHER_DIR=" $3 "
5476 local DIFFS_FOUND=0
55- echo " Comparing rpm requires files..."
5677
57- for REQFILE_CI in " $REQUIRES_DIR /CI/" * .requires; do
58- FILENAME=$( basename " $REQFILE_CI " .requires)
59- REQFILE_REBUILT=" $REQUIRES_DIR /REBUILT/$FILENAME .requires"
78+ touch " ${MODE} _DIFFS.txt"
79+
80+ for FILE in " $DIR " /* ." $MODE " ; do
81+ FILENAME=$( basename " $FILE " " .$MODE " )
82+ OTHER_FILE=" $OTHER_DIR /$FILENAME .$MODE "
6083
61- if [ ! -f " $REQFILE_REBUILT " ]; then
62- echo " File '$FILENAME ' missing in REBUILT requires output ."
84+ if [ ! -f " $OTHER_FILE " ]; then
85+ echo " File '$FILENAME ' missing in $OTHER_DIR ."
6386 DIFFS_FOUND=1
6487 continue
6588 fi
6689
67- # Compare ignoring order and whitespace by sorting lines before diff
68- if ! diff -q <( sort " $REQFILE_CI " ) <( sort " $REQFILE_REBUILT " ) > /dev/null; then
69- echo " =================================================================="
70- echo " Difference found in requires for '$FILENAME ':"
71- echo " =================================================================="
72- diff -u <( sort " $REQFILE_CI " ) <( sort " $REQFILE_REBUILT " )
90+ if ! diff -q <( sort " $FILE " ) <( sort " $OTHER_FILE " ) > /dev/null; then
91+ echo " ==================================================================" >> ${MODE} _DIFFS.txt
92+ echo " Difference found in rpm $MODE for '$FILENAME ':" >> ${MODE^^} _DIFFS.txt
93+ echo " ==================================================================" >> ${MODE} _DIFFS.txt
94+ diff -u <( sort " $FILE " ) <( sort " $OTHER_FILE " ) >> ${MODE} _DIFFS.txt || true
7395 DIFFS_FOUND=1
7496 fi
7597 done
7698
7799 if [ $DIFFS_FOUND -eq 0 ]; then
78- echo " All rpm requires outputs match."
100+ echo " All rpm $MODE outputs match."
79101 else
80- echo " Some differences detected in rpm requires outputs."
81- exit 1
102+ echo " Some differences detected in rpm $MODE outputs."
103+ EXIT_LATER= 1
82104 fi
105+
83106}
84107
85108# === Main script execution ===
@@ -107,8 +130,21 @@ if [ -n "$ONLY_IN_CI" ] || [ -n "$ONLY_IN_REBUILT" ]; then
107130else
108131 echo " Success: Files match by name. Continuing processing..."
109132 echo " $FILES_CI " > rpms_to_compare.txt
110- # Run rpm requires queries and save outputs with filtering
111- run_rpm_requires " $FILES_CI "
112- # Compare rpm requires outputs
113- compare_requires
133+
134+ # Compare rpm requires
135+ get_rpm_info " $FILES_CI " " requires"
136+ compare_rpm_info " requires" " $REQUIRES_DIR /CI" " $REQUIRES_DIR /REBUILT"
137+
138+ # Compare rpm content
139+ get_rpm_info " $FILES_CI " " content"
140+ compare_rpm_info " content" " $PACKAGE_CONTENT_DIR /CI" " $PACKAGE_CONTENT_DIR /REBUILT"
141+
142+ if [ $EXIT_LATER -eq 1 ]; then
143+ echo " Exiting with error due to differences found."
144+ cat requires_DIFFS.txt package_content_DIFFS.txt
145+ exit 1
146+ else
147+ echo " All checks passed successfully."
148+ exit 0
149+ fi
114150fi
0 commit comments