Urgg, precommit does not appear to play well with git gui. I am getting git 
gui hanging on call pre-commit hook


> On Jun 19, 2023, at 9:17 AM, Barry Smith <bsm...@petsc.dev> wrote:
> 
> 
>   I just found out my script was woefully incomplete. It is probably still 
> wrong even with this change but needs
> 
> current_source=$(git diff --staged --name-only | egrep 
> "(\.[chF]'|\.F90|\.hpp|\.cpp|\.cxx|\.cu)" | tr '\n' ' ')
> 
> 
> 
> 
> 
>> On Jun 18, 2023, at 7:51 PM, Barry Smith <bsm...@petsc.dev> wrote:
>> 
>> 
>>   Jacobi,
>> 
>>   Thanks for the reminder about using hooks for this purpose. Perhaps git 
>> hooks are not understood well enough at the time by the masses (that is, 
>> me), or perhaps hooks were presented as THE solution, not as a tool for 
>> helping users to get to the solution?  That is, git-hooks as a way to 
>> enforce rules on the pushed code versus git hooks used by individuals to 
>> make their workflow easier or less bug-prone?
>> 
>>   I found your https://gitlab.com/petsc/petsc/-/merge_requests/4063 but 
>> couldn't find any discussion of pre-commits for clang-format in my mail 
>> searches.
>> 
>>    I discovered a .git/hooks/pre-commit~ which presumably you sent around 
>> (listed at the bottom of this email).  It seems to work as advertised, warns 
>> me, and prevents my commit of badly formatted code. 
>> 
>>    I modified it to 
>> 
>> /bin/bash
>> 
>> current_source=$(git diff --staged --name-only)
>> badsource=$(make -e GITSRC="${current_source}" checkbadSource 2>&1)
>> 
>> if [ "$badsource" != "" ]
>> then
>>     echo "git commit aborted due to violations of basic source code 
>> formatting"
>>     make -e GITSRC="${current_source}" checkbadSource
>>     exit 1
>> fi
>> 
>> clangformatout=$(git clang-format --diff --staged -q)
>> 
>> if [ "$clangformatout" != "" ]
>> then
>>     echo "git commit aborted. Use 'git add -u ; git clang-format --staged' 
>> to fix source code formatting"
>>     exit 1
>> fi
>> 
>> and it seems to suit my needs.
>> 
>> Thanks again for the suggestion
>> 
>> /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  
>>   
>> # Test clang-format  
>> clangformatout=$(git clang-format --diff --staged -q)  
>>   
>> # Redirect output to stderr.  
>> exec 1>&2  
>>   
>> if [ "$clangformatout" != "" ]  
>> then
>>     echo "Format error!"
>>     echo "Use git clang-format"
>>     exit 1
>> fi
>> 
>> 
>>> On Jun 18, 2023, at 4:37 PM, Jacob Faibussowitsch <jacob....@gmail.com> 
>>> wrote:
>>> 
>>>> I want to automatically run make checkclangformat checkbadSource before 
>>>> every git push (because I am an idiot and have too many silly failed CIs 
>>>> due to bad source). 
>>> 
>>> What you *actually* want are git hooks 
>>> (https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) combined with 
>>> clang-format-diff 
>>> (https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting).
>>> 
>>> I floated the idea of adding git hooks ages ago, but it was shot down for 
>>> some reason.
>>> 
>>> Best regards,
>>> 
>>> Jacob Faibussowitsch
>>> (Jacob Fai - booss - oh - vitch)
>>> 
>>>> On Jun 18, 2023, at 16:33, Barry Smith <bsm...@petsc.dev> wrote:
>>>> 
>>>> 
>>>> I have never understood how to do make rule dependencies when one is not 
>>>> explicitly generating new files from old ones. For example, .o from .c
>>>> 
>>>> I want to automatically run make checkclangformat checkbadSource before 
>>>> every git push (because I am an idiot and have too many silly failed CIs 
>>>> due to bad source). 
>>>> 
>>>> Currently, we use git ls-files and check every single file each time, even 
>>>> though I have not changed all 5,000 source files in PETSc before a push.
>>>> Is there someone who understands make dependencies when no files are 
>>>> generated who could reduce make checkclangformat and checkbadSource to 
>>>> under a second?
>>>> 
>>>> 
>>>> Thanks
>>>> 
>>>> Barry
>>>> 
>>> 
>> 
> 

Reply via email to