gitblit钩子脚本
gitblit钩子脚本语言是groovy,需要编写groovy文件
主要使用的是jgit的jar包
脚本写法:
import com.gitblit.GitBlit
import org.slf4j.Logger
import org.eclipse.jgit.lib.Repository
import org.eclipse.jgit.lib.ObjectReader
import org.eclipse.jgit.lib.ObjectId
import org.eclipse.jgit.lib.ObjectLoader
import org.eclipse.jgit.lib.AbbreviatedObjectId
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.diff.DiffEntry
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
import org.apache.http.NameValuePair
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.client.methods.CloseableHttpResponse
import org.apache.http.client.methods.HttpPost
import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.message.BasicNameValuePair
import org.apache.http.util.EntityUtils
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
logger.info("gitblit hook triggered by ${user.username} for ${repository.name}")
//获取仓库
Repository r = gitblit.getRepository(repository.name)
for (command in commands){
// 从command中,获取提交的分支名
String refName = command.refName
//resolve方法可以传多种类型,这里传入分支名,可以获取对应分支的ObjectId
//获取上一个,和当前的tree
ObjectId oldHead = r.resolve(refName+"^^{tree}")
ObjectId head = r.resolve(refName+"^{tree}")
//new一个ObjectReader
ObjectReader reader = r.newObjectReader()
CanonicalTreeParser oldTreeIter=new CanonicalTreeParser()
oldTreeIter.reset(reader,oldHead)
CanonicalTreeParser newTreeIter=new CanonicalTreeParser()
newTreeIter.reset(reader,head)
Git git = new Git(r)
//获取差异
List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
// 遍历差异
for(entry in diffs){
String filePath = entry.getNewPath()
// 判断是否是md文件
if(filePath.endsWith("md")){
AbbreviatedObjectId fileId = entry.getNewId()
ObjectLoader loader =r.open(fileId.toObjectId())
byte[] bytes = loader.getBytes();
if (bytes != null){
println new String(bytes)
}
}
}
}