This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 7a59a20a7e GH-50535: [CI][Dev] Fix shellcheck errors in the 
ci/scripts/python_test.sh (#50536)
7a59a20a7e is described below

commit 7a59a20a7e2a5353ae25cef6efb90576c1152f8e
Author: Hiroyuki Sato <[email protected]>
AuthorDate: Tue Jul 21 05:30:06 2026 +0900

    GH-50535: [CI][Dev] Fix shellcheck errors in the ci/scripts/python_test.sh 
(#50536)
    
    ### Rationale for this change
    
    This is the sub issue #44748.
    
    * SC2034: `test_dir` appears unused. Verify it or export it.
    * SC1091: Not following: (error message here)
    * SC2086: Double quote to prevent globbing and word splitting.
    
    ```
    shellcheck ci/scripts/python_test.sh
    
    In ci/scripts/python_test.sh line 23:
    test_dir=${1}/python/build/dist
    ^------^ SC2034 (warning): test_dir appears unused. Verify use (or export 
if used externally).
    
    In ci/scripts/python_test.sh line 26:
      . "${ARROW_PYTHON_VENV}/bin/activate"
        ^-- SC1091 (info): Not following: ./bin/activate: openBinaryFile: does 
not exist (No such file or directory)
    
    In ci/scripts/python_test.sh line 45:
    : ${PYARROW_TEST_ACERO:=${ARROW_ACERO:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 46:
    : ${PYARROW_TEST_AZURE:=${ARROW_AZURE:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 47:
    : ${PYARROW_TEST_CUDA:=${ARROW_CUDA:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 48:
    : ${PYARROW_TEST_DATASET:=${ARROW_DATASET:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 49:
    : ${PYARROW_TEST_FLIGHT:=${ARROW_FLIGHT:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 50:
    : ${PYARROW_TEST_GANDIVA:=${ARROW_GANDIVA:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 51:
    : ${PYARROW_TEST_GCS:=${ARROW_GCS:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 52:
    : ${PYARROW_TEST_HDFS:=${ARROW_HDFS:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 53:
    : ${PYARROW_TEST_ORC:=${ARROW_ORC:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 54:
    : ${PYARROW_TEST_PARQUET:=${ARROW_PARQUET:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 55:
    : ${PYARROW_TEST_PARQUET_ENCRYPTION:=${PARQUET_REQUIRE_ENCRYPTION:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 56:
    : ${PYARROW_TEST_S3:=${ARROW_S3:-ON}}
      ^-- SC2223 (info): This default assignment may cause DoS due to globbing. 
Quote it.
    
    In ci/scripts/python_test.sh line 72:
    pytest -r s ${PYTEST_ARGS} --pyargs pyarrow
                ^------------^ SC2086 (info): Double quote to prevent globbing 
and word splitting.
    
    Did you mean:
    pytest -r s "${PYTEST_ARGS}" --pyargs pyarrow
    
    In ci/scripts/python_test.sh line 76:
      pytest ${PYTEST_RST_ARGS} ${arrow_dir}/docs/source/python
             ^----------------^ SC2086 (info): Double quote to prevent globbing 
and word splitting.
                                ^----------^ SC2086 (info): Double quote to 
prevent globbing and word splitting.
    
    Did you mean:
      pytest "${PYTEST_RST_ARGS}" "${arrow_dir}"/docs/source/python
    
    For more information:
      https://www.shellcheck.net/wiki/SC2034 -- test_dir appears unused. Verify 
u...
      https://www.shellcheck.net/wiki/SC1091 -- Not following: ./bin/activate: 
op...
      https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent 
globbing ...
    ```
    
    ### What changes are included in this PR?
    
    * SC2034: Add a ShellCheck directive to disable the unused variable check.
    * SC1091: Add a ShellCheck directive to disable source file checking.
    * SC2086: Quote variables.
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    No.
    * GitHub Issue: #50535
    
    Lead-authored-by: Hiroyuki Sato <[email protected]>
    Co-authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 .pre-commit-config.yaml   |  1 +
 ci/scripts/python_test.sh | 51 +++++++++++++++++++++++++++--------------------
 2 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index cd81d6e23e..3d346ce1b4 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -334,6 +334,7 @@ repos:
           ?^ci/scripts/python_sdist_test\.sh$|
           ?^ci/scripts/python_wheel_unix_test\.sh$|
           ?^ci/scripts/python_test_type_annotations\.sh$|
+          ?^ci/scripts/python_test\.sh$|
           ?^ci/scripts/r_build\.sh$|
           ?^ci/scripts/r_revdepcheck\.sh$|
           ?^ci/scripts/release_test\.sh$|
diff --git a/ci/scripts/python_test.sh b/ci/scripts/python_test.sh
index 962501d7b5..43b871be6a 100755
--- a/ci/scripts/python_test.sh
+++ b/ci/scripts/python_test.sh
@@ -19,19 +19,19 @@
 
 set -ex
 
-arrow_dir=${1}
-test_dir=${1}/python/build/dist
+arrow_dir="${1}"
 
 if [ -n "${ARROW_PYTHON_VENV:-}" ]; then
+  # shellcheck source=/dev/null
   . "${ARROW_PYTHON_VENV}/bin/activate"
 fi
 
-export ARROW_SOURCE_DIR=${arrow_dir}
-export ARROW_TEST_DATA=${arrow_dir}/testing/data
-export PARQUET_TEST_DATA=${arrow_dir}/cpp/submodules/parquet-testing/data
-export LD_LIBRARY_PATH=${ARROW_HOME}/lib:${LD_LIBRARY_PATH}
-export 
DYLD_LIBRARY_PATH=${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}
-export ARROW_GDB_SCRIPT=${arrow_dir}/cpp/gdb_arrow.py
+export ARROW_SOURCE_DIR="${arrow_dir}"
+export ARROW_TEST_DATA="${arrow_dir}/testing/data"
+export PARQUET_TEST_DATA="${arrow_dir}/cpp/submodules/parquet-testing/data"
+export LD_LIBRARY_PATH="${ARROW_HOME}/lib:${LD_LIBRARY_PATH}"
+export 
DYLD_LIBRARY_PATH="${ARROW_HOME}/lib:${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}"
+export ARROW_GDB_SCRIPT="${arrow_dir}/cpp/gdb_arrow.py"
 
 # Enable some checks inside Python itself
 export PYTHONDEVMODE=1
@@ -42,18 +42,18 @@ if [ -z "${ARROW_DEBUG_MEMORY_POOL}" ]; then
 fi
 
 # By default, force-test all optional components
-: ${PYARROW_TEST_ACERO:=${ARROW_ACERO:-ON}}
-: ${PYARROW_TEST_AZURE:=${ARROW_AZURE:-ON}}
-: ${PYARROW_TEST_CUDA:=${ARROW_CUDA:-ON}}
-: ${PYARROW_TEST_DATASET:=${ARROW_DATASET:-ON}}
-: ${PYARROW_TEST_FLIGHT:=${ARROW_FLIGHT:-ON}}
-: ${PYARROW_TEST_GANDIVA:=${ARROW_GANDIVA:-ON}}
-: ${PYARROW_TEST_GCS:=${ARROW_GCS:-ON}}
-: ${PYARROW_TEST_HDFS:=${ARROW_HDFS:-ON}}
-: ${PYARROW_TEST_ORC:=${ARROW_ORC:-ON}}
-: ${PYARROW_TEST_PARQUET:=${ARROW_PARQUET:-ON}}
-: ${PYARROW_TEST_PARQUET_ENCRYPTION:=${PARQUET_REQUIRE_ENCRYPTION:-ON}}
-: ${PYARROW_TEST_S3:=${ARROW_S3:-ON}}
+: "${PYARROW_TEST_ACERO:=${ARROW_ACERO:-ON}}"
+: "${PYARROW_TEST_AZURE:=${ARROW_AZURE:-ON}}"
+: "${PYARROW_TEST_CUDA:=${ARROW_CUDA:-ON}}"
+: "${PYARROW_TEST_DATASET:=${ARROW_DATASET:-ON}}"
+: "${PYARROW_TEST_FLIGHT:=${ARROW_FLIGHT:-ON}}"
+: "${PYARROW_TEST_GANDIVA:=${ARROW_GANDIVA:-ON}}"
+: "${PYARROW_TEST_GCS:=${ARROW_GCS:-ON}}"
+: "${PYARROW_TEST_HDFS:=${ARROW_HDFS:-ON}}"
+: "${PYARROW_TEST_ORC:=${ARROW_ORC:-ON}}"
+: "${PYARROW_TEST_PARQUET:=${ARROW_PARQUET:-ON}}"
+: "${PYARROW_TEST_PARQUET_ENCRYPTION:=${PARQUET_REQUIRE_ENCRYPTION:-ON}}"
+: "${PYARROW_TEST_S3:=${ARROW_S3:-ON}}"
 
 export PYARROW_TEST_ACERO
 export PYARROW_TEST_AZURE
@@ -68,10 +68,17 @@ export PYARROW_TEST_PARQUET
 export PYARROW_TEST_PARQUET_ENCRYPTION
 export PYARROW_TEST_S3
 
+# Convert the space-separated options into a Bash array.
+# This avoids ShellCheck SC2086 and preserves argument boundaries.
+read -r -a PYTEST_ARGS_ARRAY <<< "$PYTEST_ARGS"
+
 # Testing PyArrow
-pytest -r s ${PYTEST_ARGS} --pyargs pyarrow
+pytest -r s "${PYTEST_ARGS_ARRAY[@]}" --pyargs pyarrow
 
 # Testing RST documentation examples (if PYTEST_RST_ARGS is set)
 if [ -n "${PYTEST_RST_ARGS}" ]; then
-  pytest ${PYTEST_RST_ARGS} ${arrow_dir}/docs/source/python
+  # Convert the space-separated options into a Bash array.
+  # This avoids ShellCheck SC2086 and preserves argument boundaries.
+  read -r -a PYTEST_RST_ARGS_ARRAY <<< "$PYTEST_RST_ARGS"
+  pytest "${PYTEST_RST_ARGS_ARRAY[@]}" "${arrow_dir}/docs/source/python"
 fi

Reply via email to