Running sparse on each commit in the provided range can be very time consuming for large series.
With --fast switch we treat the whole range as a single change that gets checked for any new sparse errors. Cc: Jani Nikula <[email protected]> Signed-off-by: Arkadiusz Hiler <[email protected]> --- dim | 21 ++++++++++++++++++--- dim.rst | 8 +++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/dim b/dim index 1e61fe2..5264049 100755 --- a/dim +++ b/dim @@ -1786,8 +1786,14 @@ function _restore_head_on_exit function dim_sparse { - local range rv sr prev_sr prev_remapped diff_result remap_log commits + local range rv sr prev_sr prev_remapped diff_result remap_log commits fast prev_rev + if [ "$1" == "--fast" ]; then + fast=1 + shift + fi + + prev_rev="HEAD~" range=$(rangeish "${1:-}") remap_log=$DIM_PREFIX/maintainer-tools/remap-log @@ -1806,6 +1812,13 @@ function dim_sparse make olddefconfig > /dev/null 2>&1 make -j8 drivers/gpu/drm/ > /dev/null 2>&1 + if [ "$fast" == 1 ]; then + prev_rev="${commits[0]}~" + commits=( "${commits[-1]}" ) + + echo "Fast mode used, each commit won't be checked separately." + fi + for commit in "${commits[@]}"; do touch --no-create $(git diff --name-only $commit~...$commit) prev_sr="$(make C=1 -j$(nproc) drivers/gpu/drm/ 2>&1 1>/dev/null)" @@ -1814,10 +1827,12 @@ function dim_sparse make olddefconfig > /dev/null 2>&1 sr="$(make C=1 -j$(nproc) drivers/gpu/drm/ 2>&1 1>/dev/null)" - prev_remapped="$(echo "$prev_sr" | $remap_log <(git diff HEAD~ | $remap_log))" + prev_remapped="$(echo "$prev_sr" | $remap_log <(git diff $prev_rev | $remap_log))" diff_result="$(diff -u <(echo "$prev_remapped" | sort) <(echo "$sr" | sort) || true)" - echo "Commit: $(git log -n1 --format='%s' $commit)" + if [ "$fast" != 1 ]; then + echo "Commit: $(git log -n1 --format='%s' $commit)" + fi if [ -n "$diff_result" ]; then echo "$diff_result" | grep -E '^[+-]' | grep -E -v '^[+-]{3}' else diff --git a/dim.rst b/dim.rst index 792c99f..22d6f56 100644 --- a/dim.rst +++ b/dim.rst @@ -79,13 +79,15 @@ filtering. Current profiles are "default", "branch", "drm-intel", and "drm-misc". The "branch" profile maps the current git branch to the appropriate profile, or if the branch is not known, to "default". -sparse [*commit-ish* [.. *commit-ish*]] ---------------------------------------- -Run sparse on the files changed by the given commit range. +sparse [--fast] [*commit-ish* [.. *commit-ish*]] +------------------------------------------------ +Run sparse for each commit in the given commit range. If no commit-ish is passed, defaults to HEAD^..HEAD. If one commit-ish is passed instead of a range, the range commit-ish..HEAD is used. +If --fast is passed we treat the whole range as a single change. + checker ------- Run sparse on drm/i915. -- 2.25.4 _______________________________________________ dim-tools mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dim-tools
