From 0cdfad3731699fc423faa40e80916976b88fe5fa Mon Sep 17 00:00:00 2001 From: Ayaz Salikhov Date: Mon, 12 May 2025 17:42:29 +0100 Subject: [PATCH] fix: Make fix-local-includes.sh work with multiple files (#2102) --- pre-commit-hooks/fix-local-includes.sh | 40 +++++++++++++++++--------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/pre-commit-hooks/fix-local-includes.sh b/pre-commit-hooks/fix-local-includes.sh index 9f5780c9..812d4f43 100755 --- a/pre-commit-hooks/fix-local-includes.sh +++ b/pre-commit-hooks/fix-local-includes.sh @@ -2,26 +2,38 @@ # Note: This script is intended to be run from the root of the repository. # -# This script checks will fix local includes in the C++ code. +# This script will fix local includes in the C++ code for a given file. +# Usage: ./pre-commit-hooks/fix-local-includes.sh ... -file_path="$1" - -echo "+ Fixing includes in $file_path..." +files="$@" +echo "+ Fixing includes in $files..." GNU_SED=$(sed --version 2>&1 | grep -q 'GNU' && echo true || echo false) if [[ "$GNU_SED" == "false" ]]; then # macOS sed - # make all includes to be <...> style - sed -i '' -E 's|#include "(.*)"|#include <\1>|g' "$file_path" - - # make local includes to be "..." style main_src_dirs=$(find ./src -maxdepth 1 -type d -exec basename {} \; | tr '\n' '|' | sed 's/|$//' | sed 's/|/\\|/g') - sed -i '' -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" "$file_path" else - # make all includes to be <...> style - sed -i -E 's|#include "(.*)"|#include <\1>|g' "$file_path" - - # make local includes to be "..." style main_src_dirs=$(find ./src -maxdepth 1 -type d -exec basename {} \; | paste -sd '|' | sed 's/|/\\|/g') - sed -i -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" "$file_path" fi + +fix_includes() { + file_path="$1" + + if [[ "$GNU_SED" == "false" ]]; then # macOS sed + # make all includes to be <...> style + sed -i '' -E 's|#include "(.*)"|#include <\1>|g' "$file_path" + + # make local includes to be "..." style + sed -i '' -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" "$file_path" + else + # make all includes to be <...> style + sed -i -E 's|#include "(.*)"|#include <\1>|g' "$file_path" + + # make local includes to be "..." style + sed -i -E "s|#include <(($main_src_dirs)/.*)>|#include \"\1\"|g" "$file_path" + fi +} + +for file in $files; do + fix_includes "$file" +done