【指导】iOS代码静态检查 -- clang format (+ git pre-commit hook + jenkins)
来源:互联网 发布:手机fc2最新域名设置 编辑:程序博客网 时间:2024/05/16 17:23
Xcode IDE中可以安装Clang format插件,格式化iOS代码。可总是有人会忘,故再加上Git客户端pre-commit hook一枚用于防呆,在执行git commit命令后检查,检查通过后正常完成commit:)
可是有些人懒得连hook都不配,所以再加上Jenkins验证,竟然不改就想上库?哼╭(╯^╰)╮,打回去重来~~~~
如下,Git hook采用全局hook的形式(当然你也可以自己每次克隆后拷到单仓下用,如果你时间比较多的话:))
【使用前提】
本地需要安装clang-format工具,.clangformat文件已放好
【部署方法】
1,建立全局hook目录(有了请执行第2步):
$mkdir -p~/.git_template/hooks/2,将如下两行拷贝到~/.gitconfig文件的最后(有了请执行第3步):
$git config --global init.templatedir ~/.git_template3,增加pre-commit脚本,并添加可执行权限。这个脚本会检查有没有格式化,没有做会帮他改了直接提交:
#!/bin/bash STYLE=$(git config --get hooks.clangformat.style) if [ -n "${STYLE}" ] ; then STYLEARG="-style=${STYLE}" else STYLEARG="" fi format_file() { file="${1}" if [ "${file##*.}" = "c" ] || [ "${file##*.}" = "m" ] || [ "${file##*.}" = "mm" ] || [ "${file##*.}" = "h" ]; then clang-format -i ${STYLEARG} ${1} git add ${1} fi } case "${1}" in --about ) echo "Runs clang-format on source files" ;; * ) for file in `git diff-index --cached --diff-filter=ACMR --name-only HEAD` ; do format_file "${file}" done ;; esac
4,配置Jenkins gerrit trigger,脚本如下,没有做格式化的禁止提交,但是不帮他改,只打负分:
#!/bin/shif [ -d "checkstyle_dir" ]; then rm -fr checkstyle_dir mkdir checkstyle_direlse mkdir checkstyle_dirfi# get json string:GERRIT_CHANGE_ID="$1"ssh -p 29418 jenkins@x.x.x.x gerrit query --files --current-patch-set $GERRIT_CHANGE_ID --format=json > checkstyle_dir/string.json# delete line 2 to the end (cat xx | wc -l)sed -i '' '2,$d' checkstyle_dir/string.json# read filelist by change-id:cat checkstyle_dir/string.json | jq '.currentPatchSet | .files | map(select(.type != "DELETED")) | .[] | .file' | sed 's/"//g' > checkstyle_dir/filelistwhile read ONE_LINEdo if [[ ${ONE_LINE} = "Libraries"* ]] || [[ ${ONE_LINE} = *".framework"* ]]; then echo "skip $ONE_LINE" elif [ "${ONE_LINE##*.}" = "c" ] || [ "${ONE_LINE##*.}" = "m" ] || [ "${ONE_LINE##*.}" = "mm" ] || [ "${ONE_LINE##*.}" = "h" ]; then #cp --parents $ONE_LINE checkstyle_dir cp $ONE_LINE checkstyle_dir fidone < checkstyle_dir/filelist# checkstylecp ~/.clang-format .RESULT=`ls checkstyle_dir/*.[chm] | xargs clang-format -style=file -output-replacements-xml | grep -c "<replacement "`if [ $RESULT -ne 0 ]; then echo "====================================================================================================" echo "Commit did not match clang-format, please use git commit --amend to modify and push to gerrit again!" echo "====================================================================================================" exit 1;fi
【使用方法】
1,部署前,已克隆的仓,请手工拷贝到本地工程的hooks目录中去:
$cp~/.git_template/hooks/pre-commit .git/hooks/.2,部署后,新克隆的仓,无需任何操作,可直接使用:)
【参考】
http://stackoverflow.com/questions/22866609/can-clang-format-tell-me-if-formatting-changes-are-necessary
https://github.com/andrewseidl/githook-clang-format/blob/master/clang-format.hook
0 0
- 【指导】iOS代码静态检查 -- clang format (+ git pre-commit hook + jenkins)
- 【指导】iOS代码静态检查 -- oclint (+ xcodebuild + xcpretty + jenkins)
- Go:git gofmt pre-commit hook
- SVN pre-commit hook
- SVN configurable pre-commit hook
- git pre-commit 默认设置
- svn: Commit blocked by pre-commit hook (exit code 1) with output: Log format error 提交Log格式错误
- svn: Commit blocked by pre-commit hook (exit code 1) with output: Log format error 提交Log格式错误
- git之pre-commit 同步提交代码实现
- 基于python开发pre-commit hook达到对git提交时间的控制
- Jenkins 添加sonar对代码静态检查
- 使用clang-format对iOS项目代码进行格式化
- 使用clang-format对iOS项目代码进行格式化
- SVN pre-commit hooks检查needs-lock
- Clang &IOS 静态代码分析工具scan-build
- 使用Sonar集成Jenkins进行代码静态检查
- Jenkins Maven checkstyle findbugs pmd静态代码检查
- eclipse svn commit 报错 Commit blocked by pre-commit hook
- linux实时监控或查看系统资源使用情况的工具——TOP
- 关于 Fatal error: ‘SpringBoard/SpringBoard.h’ file not found
- 针对JCO运行在window2003 R2 32bit
- 快速提高Android开发效率的工具
- weblogic虚拟目录映射
- 【指导】iOS代码静态检查 -- clang format (+ git pre-commit hook + jenkins)
- 时间不够用,不知道去哪了
- 元素的出栈、入栈顺序的合法性。
- DockManager实现模块自动隐藏
- spring boot 连接mongodb
- centos下memecached安装笔记
- Eclipse doesn't remember source lookup path,走断点时显示source not found
- 防止div被里边的table撑大
- SDwebImage更新即实现原理