gitblit钩子脚本实现代码提交后自动获取提交的md文件内容

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)
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiah2li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值