From 8944a337eaaf3717b11e0e877c38bfec00d3b6bd Mon Sep 17 00:00:00 2001 From: yexin Date: Mon, 30 Jul 2018 21:34:10 +0800 Subject: Fix: commit-msg hook conflicts with git-review Fix bug that the original commit-msg hook will conflict with the one from git-review. Also add an option (RMWS) to CMakelists to enable autoremove trailing whitespace when commit changes. Change-Id: I78a34758d1cf2501814e60b403a25df40de833f9 Signed-off-by: yexin --- CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++------ scripts/git/commit-msg-hook.py | 2 +- scripts/git/pre-commit | 14 ++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100755 scripts/git/pre-commit diff --git a/CMakeLists.txt b/CMakeLists.txt index adb0670..e63100f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,11 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11) PROJECT(nStack) + +option(RMWS "automatically remove trailing whitespace using git pre-commit hook" OFF) +option(WITH_SECUREC_LIB "Option description" OFF) +option(WITH_HAL_LIB "Option description" OFF) + SET(CMAKE_C_COMPILER "gcc") SET(EXECUTABLE_PATH ${CMAKE_CURRENT_LIST_DIR}/release/bin) SET(LIB_PATH_STATIC ${PROJECT_BINARY_DIR}) @@ -51,14 +56,35 @@ if(commit_template STREQUAL "") message(STATUS "Setting git commit template...done") endif() -if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg") - message(STATUS "Setting git commit hook...") - execute_process(COMMAND ln -s ${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-hook.py ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg) - message(STATUS "Setting git commit hook...done") +find_program(GIT_REVIEW git-review) +if(NOT GIT_REVIEW) + if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg") + message(STATUS "git-review not found!") + message(STATUS "Setting git commit hook...") + execute_process(COMMAND ln -s ${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-hook.py ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg) + message(STATUS "Setting git commit hook...done") + endif() +else() + if(NOT EXISTS "${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg") + execute_process(COMMAND git-review -s + RESULT_VARIABLE git_review_ret) + if(${git_review_ret} EQUAL 0) + file(APPEND ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg "${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-hook.py $1") + endif() + else() + file(READ ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg contents) + string(FIND "${contents}" "commit-msg-hook.py" match_ret) + if(${match_ret} EQUAL -1) + file(APPEND ${CMAKE_SOURCE_DIR}/.git/hooks/commit-msg "${CMAKE_SOURCE_DIR}/scripts/git/commit-msg-hook.py $1") + endif() + endif() endif() -option(WITH_SECUREC_LIB "Option description" OFF) -option(WITH_HAL_LIB "Option description" OFF) +if(RMWS) + message(STATUS "Setting git pre-commit hook...") + execute_process(COMMAND ln -sf ${CMAKE_SOURCE_DIR}/scripts/git/pre-commit ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit) + message(STATUS "Setting git pre-commit hook...done") +endif() if(WITH_SECUREC_LIB) add_definitions(-DSECUREC_LIB) diff --git a/scripts/git/commit-msg-hook.py b/scripts/git/commit-msg-hook.py index 719ff22..9c397ed 100755 --- a/scripts/git/commit-msg-hook.py +++ b/scripts/git/commit-msg-hook.py @@ -123,7 +123,7 @@ with open(sys.argv[1], 'r') as commit_msg: for line in contents: dup = line.lstrip() - if dup.startswith('#'): + if dup.startswith('#') or dup.startswith("Change-Id") or dup.startswith("Signed-of-by"): continue if subject is True: ret = check_subject(line) diff --git a/scripts/git/pre-commit b/scripts/git/pre-commit new file mode 100755 index 0000000..58cd14f --- /dev/null +++ b/scripts/git/pre-commit @@ -0,0 +1,14 @@ +#!/bin/bash + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# autoremove trailing whitespace +for file in `git diff-index --check --cached $against -- | sed '/^[-+]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do + sed -i 's/[ \t]*$//g' $file +done -- cgit 1.2.3-korg