summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2020-06-03 14:29:03 -0700
committerPhilip Chimento <philip.chimento@gmail.com>2020-06-03 15:49:41 -0700
commitd38db7f29e585acbd2b344333179bbfd2e2fa45b (patch)
tree226ad17863d3c4000a88db9bbf2a592bf804d31b /tools
parentc7f8123d6ec9d8e0b535bcc1f8faecf43bc3182e (diff)
downloadgjs-d38db7f29e585acbd2b344333179bbfd2e2fa45b.tar.gz
CI: Fix exit code of IWYU script
When this was mainly being run manually, the exit code didn't matter much since the main thing was to look at the output. Running in CI, it does matter, so make sure it is correct everywhere.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/process_iwyu.py7
-rwxr-xr-xtools/run_iwyu.sh80
2 files changed, 61 insertions, 26 deletions
diff --git a/tools/process_iwyu.py b/tools/process_iwyu.py
index f91778a2..dd6656b2 100755
--- a/tools/process_iwyu.py
+++ b/tools/process_iwyu.py
@@ -22,6 +22,7 @@ file = None
add = {}
remove = {}
all_includes = {}
+there_were_errors = False
# When encountering one of these lines, move to a different state
MATCHERS = {
@@ -69,7 +70,7 @@ FALSE_POSITIVES = (
def output():
- global file, state, add_fwd_header
+ global file, state, add_fwd_header, there_were_errors
if add_fwd_header:
if FWD_HEADER not in all_includes:
@@ -88,6 +89,7 @@ def output():
if why:
why = ' // ' + why
print(f'{Colors.RED}-{line}{Colors.NORMAL}{why}')
+ there_were_errors = True
state = None
file = None
@@ -143,3 +145,6 @@ for line in sys.stdin:
remove[line] = why
elif state == FULL:
all_includes[line] = why
+
+if there_were_errors:
+ sys.exit(1)
diff --git a/tools/run_iwyu.sh b/tools/run_iwyu.sh
index 0ff6a5e1..f46d807c 100755
--- a/tools/run_iwyu.sh
+++ b/tools/run_iwyu.sh
@@ -44,6 +44,7 @@ IWYU="python3 $(which iwyu_tool) -p ."
PRIVATE_MAPPING="-Xiwyu --mapping_file=$SRCDIR/tools/gjs-private-iwyu.imp -Xiwyu --keep=config.h"
PUBLIC_MAPPING="-Xiwyu --mapping_file=$SRCDIR/tools/gjs-public-iwyu.imp"
POSTPROCESS="python3 $SRCDIR/tools/process_iwyu.py"
+EXIT=0
for FILE in $SRCDIR/gi/*.cpp $SRCDIR/gjs/atoms.cpp $SRCDIR/gjs/byteArray.cpp \
$SRCDIR/gjs/coverage.cpp $SRCDIR/gjs/debugger.cpp \
@@ -55,40 +56,69 @@ for FILE in $SRCDIR/gi/*.cpp $SRCDIR/gjs/atoms.cpp $SRCDIR/gjs/byteArray.cpp \
$SRCDIR/modules/system.cpp $SRCDIR/test/*.cpp $SRCDIR/util/*.cpp \
$SRCDIR/libgjs-private/*.c
do
- should_analyze $FILE && $IWYU $FILE -- $PRIVATE_MAPPING | $POSTPROCESS
+ if should_analyze $FILE; then
+ if ! $IWYU $FILE -- $PRIVATE_MAPPING | $POSTPROCESS; then
+ EXIT=1
+ fi
+ fi
done
-should_analyze $SRCDIR/gjs/context.cpp && \
-$IWYU $SRCDIR/gjs/context.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/gjs/context-private.h | $POSTPROCESS
+if should_analyze $SRCDIR/gjs/context.cpp; then
+ if ! $IWYU $SRCDIR/gjs/context.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/gjs/context-private.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
-( should_analyze $SRCDIR/gjs/jsapi-dynamic-class.cpp || \
- should_analyze $SRCDIR/gjs/jsapi-class.h ) && \
-$IWYU $SRCDIR/gjs/jsapi-dynamic-class.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/gjs/jsapi-class.h | $POSTPROCESS
+if ( should_analyze $SRCDIR/gjs/jsapi-dynamic-class.cpp || \
+ should_analyze $SRCDIR/gjs/jsapi-class.h ); then
+ if ! $IWYU $SRCDIR/gjs/jsapi-dynamic-class.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/gjs/jsapi-class.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
-( should_analyze $SRCDIR/gjs/jsapi-util.cpp ||
+if ( should_analyze $SRCDIR/gjs/jsapi-util.cpp ||
should_analyze $SRCDIR/gjs/jsapi-util-args.h || \
- should_analyze $SRCDIR/gjs/jsapi-util-root.h ) && \
-$IWYU $SRCDIR/gjs/jsapi-util.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/gjs/jsapi-util-args.h \
- -Xiwyu --check_also=*/gjs/jsapi-util-root.h | $POSTPROCESS
+ should_analyze $SRCDIR/gjs/jsapi-util-root.h ); then
+ if ! $IWYU $SRCDIR/gjs/jsapi-util.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/gjs/jsapi-util-args.h \
+ -Xiwyu --check_also=*/gjs/jsapi-util-root.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
-should_analyze $SRCDIR/gjs/mem.cpp && \
-$IWYU $SRCDIR/gjs/mem.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/gjs/mem-private.h | $POSTPROCESS
+if should_analyze $SRCDIR/gjs/mem.cpp; then
+ if ! $IWYU $SRCDIR/gjs/mem.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/gjs/mem-private.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
-should_analyze $SRCDIR/gjs/profiler.cpp && \
-$IWYU $SRCDIR/gjs/profiler.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/gjs/profiler-private.h | $POSTPROCESS
+if should_analyze $SRCDIR/gjs/profiler.cpp; then
+ if ! $IWYU $SRCDIR/gjs/profiler.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/gjs/profiler-private.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
-( should_analyze $SRCDIR/modules/cairo.cpp ||
- should_analyze $SRCDIR/modules/cairo-module.h ) && \
-$IWYU $SRCDIR/modules/cairo.cpp -- $PRIVATE_MAPPING \
- -Xiwyu --check_also=*/modules/cairo-module.h \
- -Xiwyu --check_also=*/modules/cairo-private.h | $POSTPROCESS
+if ( should_analyze $SRCDIR/modules/cairo.cpp ||
+ should_analyze $SRCDIR/modules/cairo-module.h ); then
+ if ! $IWYU $SRCDIR/modules/cairo.cpp -- $PRIVATE_MAPPING \
+ -Xiwyu --check_also=*/modules/cairo-module.h \
+ -Xiwyu --check_also=*/modules/cairo-private.h | $POSTPROCESS; then
+ EXIT=1
+ fi
+fi
for FILE in $SRCDIR/gjs/console.cpp $SRCDIR/installed-tests/minijasmine.cpp
do
- should_analyze $FILE && $IWYU $FILE -- $PUBLIC_MAPPING | $POSTPROCESS
+ if should_analyze $FILE; then
+ if ! $IWYU $FILE -- $PUBLIC_MAPPING | $POSTPROCESS; then
+ EXIT=1
+ fi
+ fi
done
+
+if test $EXIT -eq 0; then echo "No changes needed."; fi
+exit $EXIT