2022-08-02 03:32:57 -07:00
|
|
|
# Returns a list of all files that has been changed in current branch compared
|
|
|
|
# to master branch. This includes unstaged, staged and committed files.
|
|
|
|
function(get_changed_files outvar)
|
|
|
|
set(default_branch master)
|
|
|
|
|
|
|
|
execute_process(
|
|
|
|
COMMAND git branch --show-current
|
|
|
|
OUTPUT_VARIABLE current_branch
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
|
|
|
|
execute_process(
|
|
|
|
COMMAND git merge-base ${default_branch} ${current_branch}
|
|
|
|
OUTPUT_VARIABLE ancestor_commit
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
|
|
|
|
# Changed files that have been committed
|
|
|
|
execute_process(
|
2023-05-18 07:28:46 -07:00
|
|
|
COMMAND git diff --diff-filter=d --name-only ${ancestor_commit}...${current_branch}
|
2022-08-02 03:32:57 -07:00
|
|
|
OUTPUT_VARIABLE committed_files
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
separate_arguments(committed_files NATIVE_COMMAND ${committed_files})
|
|
|
|
|
|
|
|
# Unstaged files
|
|
|
|
execute_process(
|
2023-05-18 07:28:46 -07:00
|
|
|
COMMAND git diff --diff-filter=d --name-only
|
2022-08-02 03:32:57 -07:00
|
|
|
OUTPUT_VARIABLE unstaged_files
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
separate_arguments(unstaged_files NATIVE_COMMAND ${unstaged_files})
|
|
|
|
|
|
|
|
# Staged files
|
|
|
|
execute_process(
|
2023-05-18 07:28:46 -07:00
|
|
|
COMMAND git diff --diff-filter=d --cached --name-only
|
2022-08-02 03:32:57 -07:00
|
|
|
OUTPUT_VARIABLE staged_files
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
separate_arguments(staged_files NATIVE_COMMAND ${staged_files})
|
|
|
|
|
|
|
|
set(files ${committed_files} ${unstaged_files} ${staged_files})
|
|
|
|
list(REMOVE_DUPLICATES files)
|
|
|
|
|
|
|
|
set(${outvar} "${files}" PARENT_SCOPE)
|
|
|
|
endfunction()
|
|
|
|
|
|
|
|
get_changed_files(changed_files)
|
|
|
|
|
|
|
|
if(LANG STREQUAL c)
|
|
|
|
list(FILTER changed_files INCLUDE REGEX "\\.[ch]$")
|
|
|
|
list(FILTER changed_files INCLUDE REGEX "^src/nvim/")
|
|
|
|
|
|
|
|
if(changed_files)
|
|
|
|
if(FORMAT_PRG)
|
|
|
|
execute_process(COMMAND ${FORMAT_PRG} -c "src/uncrustify.cfg" --replace --no-backup ${changed_files})
|
|
|
|
else()
|
|
|
|
message(STATUS "Uncrustify not found. Skip formatting C files.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
elseif(LANG STREQUAL lua)
|
|
|
|
list(FILTER changed_files INCLUDE REGEX "\\.lua$")
|
|
|
|
list(FILTER changed_files INCLUDE REGEX "^runtime/")
|
|
|
|
|
|
|
|
if(changed_files)
|
|
|
|
if(FORMAT_PRG)
|
|
|
|
execute_process(COMMAND ${FORMAT_PRG} ${changed_files})
|
|
|
|
else()
|
|
|
|
message(STATUS "Stylua not found. Skip formatting lua files.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|