]> git.apps.os.sepia.ceph.com Git - ceph-build.git/commitdiff
Rework changed-files test (doc-only, container-only) 2326/head
authorDan Mick <dan.mick@redhat.com>
Sat, 15 Feb 2025 02:02:57 +0000 (18:02 -0800)
committerDan Mick <dan.mick@redhat.com>
Mon, 17 Feb 2025 22:51:39 +0000 (14:51 -0800)
Take an array of patterns to compare each changed file against.
For docs, use the current suggestions from
https://tracker.ceph.com/issues/69650

Signed-off-by: Dan Mick <dan.mick@redhat.com>
scripts/build_utils.sh

index 0100c34a06c334bc7743280af69e4b0a3802f089..c4c5d6d61658ae1bb945124767493e6bbf06257b 100755 (executable)
@@ -1686,10 +1686,12 @@ maybe_reset_ci_container() {
 
 # NOTE: These functions will only work on a Pull Request job!
 pr_only_for() {
-  local egrep_pattern=$1
-
+  # $1 is passed by reference to avoid having to call with ${array[@]} and
+  # receive by creating another local array ("$@")
+  local -n local_patterns=$1
+  local files
   pushd .
-  # Only try to cd to ceph repo if we need to.
+  # cd to ceph repo if we need to.
   # The ceph-pr-commits job checks out ceph.git and ceph-build.git but most
   # other jobs do not.
   if ! [[ "$(git config --get remote.origin.url)" =~ "ceph/ceph.git" ]]; then
@@ -1703,20 +1705,44 @@ pr_only_for() {
   fi
   popd
   echo -e "changed files:\n$files"
-  if [ $(echo "$files" | egrep -v $egrep_pattern | wc -l) -gt 0 ]; then
-    return 1
-  fi
-  return 0
+  # 0 is true, 1 is false
+  local all_match=0
+  for f in $files; do
+    local match=1
+    for p in "${local_patterns[@]}"; do
+      # pattern loop: if one pattern matches, skip the others
+      if [[ $f == $p ]]; then match=0; break; fi
+    done
+    # file loop: if this file matched no patterns, the group fails
+    # (one mismatch spoils the whole bushel)
+    if [[ $match -eq 1 ]] ; then all_match=1; break; fi
+  done
+  return $all_match
 }
 
 docs_pr_only() {
   DOCS_ONLY=false
-  if pr_only_for '^(doc/|admin/)'; then DOCS_ONLY=true; fi
+  local patterns=(
+    'doc/*'
+    'admin/*'
+    'src/sample.ceph.conf'
+    'CodingStyle'
+    '*.rst'
+    '*.md'
+    'COPYING*'
+    'README.*'
+    'SubmittingPatches'
+    '.readthedocs.yml'
+  )
+  if pr_only_for patterns; then DOCS_ONLY=true; fi
 }
 
 container_pr_only() {
   CONTAINER_ONLY=false
-  if pr_only_for '^container/'; then CONTAINER_ONLY=true; fi
+  local patterns=(
+    'container/*'
+  )
+  if pr_only_for patterns; then CONTAINER_ONLY=true; fi
 }
 
 function ssh_exec() {