gpt4 book ai didi

java - 检查 Java Class 是否在 SVN Precommit hook 中被注释

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:48 24 4
gpt4 key购买 nike

我想确保在有人将某些内容提交到 SVN 存储库之前对 Java 类进行注释。所以我想实现以下工作流程:

  1. 用户在类里面改变了一些东西
  2. 用户想要提交类(class)
  3. 在执行对存储库的提交之前,SVN 或其他东西会检查类之前和public 方法(对于 Java AutoDoc)之前是否有注释。
  4. 如果有评论=>提交,否则返回错误信息

我怎样才能意识到这一点?我发现了很多关于预提交 Hook 的信息。但一切都是为了检查提交消息/评论是否已设置。

如果有人能为这个问题提供解决方案,那将是非常好的和有帮助的。

最佳答案

是的,你可以做到,使用CheckStyle .

首先,下载 CheckStyle jar,并将其安装在某处。然后,创建一个新的 xml config file让 CheckStyle 检查您的公共(public)方法/类是否有一些 JavaDoc(例如,您可以将其称为 javadoc_check.xml):

<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<module name="Checker">
<module name="TreeWalker">
<module name="JavadocMethod">
<property name="scope" value="public"/>
</module>
<module name="JavadocType">
<property name="scope" value="public"/>
</module>
</module>
</module>

完成后,您可以像这样创建 pre_commit Hook :

#!/bin/bash

REPOS="$1"
TXN="$2"

CHECKSTYLEJAR=/path/to/checkstyle-5.7/checkstyle-5.7-all.jar
CHECKSTYLECONFIG=/path/to/javadoc_check.xml

SVNLOOK=/usr/bin/svnlook
JAVA=/usr/bin/java

EXITSTATUS=0
ERRORMARKER=__ERROR_MARKER__

# Create temporary dir
TMPDIR=$(mktemp -d)

# Iterate on the files commited
while read changeline;
do
# Get the filename
file=${changeline:4}

# Check if it's an Updated or Added java file
if [[ $file == *.java && ($changeline == U* || $changeline == A*) ]] ; then
# Get the file content in a temporary file
$SVNLOOK cat -t "$TXN" "$REPOS" "$file" > $TMPDIR/${file##*/}

echo -e "\n=> Checking $file"
# Check the file with checkstyle
( $JAVA -jar $CHECKSTYLEJAR -c $CHECKSTYLECONFIG $TMPDIR/${file##*/} 2>&1 || echo "$ERRORMARKER" 1>&2 ) | sed -e "s{$TMPDIR/{{"

# Delete the temporary file
rm $TMPDIR/${file##*/}
fi
done < <($SVNLOOK changed -t "$TXN" "$REPOS") 3>&2 2>&1 1>&3 | grep "$ERRORMARKER" && EXITSTATUS=1 # Check for errors

# Delete temporary dir
rmdir $TMPDIR

exit $EXITSTATUS

不要忘记更改 CheckStyle jar 和 CheckStyle 配置的路径。

下次您尝试在公共(public)方法/类上提交没有 JavaDoc 注释的 java 文件时,提交将被取消,并且您将收到一条错误消息:

$ svn commit
Sending test.java
Transmitting file data .svn: E165001: Commit failed (details follow):
svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:

=> Checking test.java
Starting audit...
test.java:9:1: Missing a Javadoc comment.
Audit done.

svn: E165001: Your commit message was left in a temporary file:
svn: E165001: '/path/to/project/svn-commit.1.tmp'
$

如果提交多个文件,将检查所有文件,只有所有修改/添加的java文件都有JavaDoc注释,才会授权提交。

关于java - 检查 Java Class 是否在 SVN Precommit hook 中被注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21796264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com