@@ -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,72 @@ 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 > " $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 > " $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+ for FILE in " $DIR " / * . " $MODE " ; do
79+ FILENAME=$( basename " $FILE " " . $MODE " )
80+ OTHER_FILE =" $OTHER_DIR / $FILENAME .$MODE "
6081
61- if [ ! -f " $REQFILE_REBUILT " ]; then
62- echo " File '$FILENAME ' missing in REBUILT requires output ."
82+ if [ ! -f " $OTHER_FILE " ]; then
83+ echo " File '$FILENAME ' missing in $OTHER_DIR ."
6384 DIFFS_FOUND=1
6485 continue
6586 fi
6687
67- # Compare ignoring order and whitespace by sorting lines before diff
68- if ! diff -q <( sort " $REQFILE_CI " ) <( sort " $REQFILE_REBUILT " ) > /dev/null; then
88+ if ! diff -q <( sort " $FILE " ) <( sort " $OTHER_FILE " ) > /dev/null; then
6989 echo " =================================================================="
70- echo " Difference found in requires for '$FILENAME ':"
90+ echo " Difference found in rpm $MODE for '$FILENAME ':"
7191 echo " =================================================================="
72- diff -u <( sort " $REQFILE_CI " ) <( sort " $REQFILE_REBUILT " )
92+ diff -u <( sort " $FILE " ) <( sort " $OTHER_FILE " ) || true
7393 DIFFS_FOUND=1
7494 fi
7595 done
7696
7797 if [ $DIFFS_FOUND -eq 0 ]; then
78- echo " All rpm requires outputs match."
98+ echo " All rpm $MODE outputs match."
7999 else
80- echo " Some differences detected in rpm requires outputs."
81- exit 1
100+ echo " Some differences detected in rpm $MODE outputs."
101+ EXIT_LATER= 1
82102 fi
103+
83104}
84105
85106# === Main script execution ===
@@ -107,8 +128,20 @@ if [ -n "$ONLY_IN_CI" ] || [ -n "$ONLY_IN_REBUILT" ]; then
107128else
108129 echo " Success: Files match by name. Continuing processing..."
109130 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
131+
132+ # Compare rpm requires
133+ get_rpm_info " $FILES_CI " " requires"
134+ compare_rpm_info " requires" " $REQUIRES_DIR /CI" " $REQUIRES_DIR /REBUILT"
135+
136+ # Compare rpm content
137+ get_rpm_info " $FILES_CI " " content"
138+ compare_rpm_info " content" " $PACKAGE_CONTENT_DIR /CI" " $PACKAGE_CONTENT_DIR /REBUILT"
139+
140+ if [ $EXIT_LATER -eq 1 ]; then
141+ echo " Exiting with error due to differences found."
142+ exit 1
143+ else
144+ echo " All checks passed successfully."
145+ exit 0
146+ fi
114147fi
0 commit comments