内容简介:有时候多个项目在一个代码仓库中,可能每个文件夹都是一个项目。如果每次使用CI自动部署的话就需要判断最近的改动属于哪个文件夹/项目。通过JGit直接获取两个commit之间的diff然后判断是比较直接的方法,具体使用哪两个commit就看需要的。可以使用CI系统上一次成功构建的commit sha,也可以直接使用最近两天的commit的。代码如下:
有时候多个项目在一个代码仓库中,可能每个文件夹都是一个项目。如果每次使用CI自动部署的话就需要判断最近的改动属于哪个文件夹/项目。
通过JGit直接获取两个commit之间的diff然后判断是比较直接的方法,具体使用哪两个commit就看需要的。可以使用CI系统上一次成功构建的commit sha,也可以直接使用最近两天的commit的。
代码如下:
Repository repo = FileRepositoryBuilder.create(new File(basePath + ".git"));
Git git = new Git(repo);
ObjectReader reader = repo.newObjectReader();
ObjectId newObjectId = repo.resolve("HEAD^{tree}");
ObjectId oldObjectId = repo.resolve(successSha + "^{tree}");
System.out.println("Starting diff " + oldObjectId + " : " + newObjectId);
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, oldObjectId);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, newObjectId);
List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
for (DiffEntry entry : diffs) {
System.out.println("Entry: " + entry);
for (String folderName : folderNames) {
if (entry.getNewPath().contains(folderName) || entry.getOldPath().contains(folderName)) {
System.out.println("Need deploy folder: " + folderName);
foldersNeedDeploy.add(folderName);
}
}
}
其中的successSha是上一次成功部署过的commit sha值,也可以使用类似HEAD^^^^^的表达式直接使用倒数第四次commit。
如果是Groovy脚本的话需要引入依赖
@Grapes([
@Grab(group = 'org.eclipse.jgit', module = 'org.eclipse.jgit', version = '5.2.1.201812262042-r')
])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms for Image Processing and Computer Vision
Parker, J. R. / 2010-12 / 687.00元
A cookbook of algorithms for common image processing applications Thanks to advances in computer hardware and software, algorithms have been developed that support sophisticated image processing with......一起来看看 《Algorithms for Image Processing and Computer Vision》 这本书的介绍吧!
HTML 编码/解码
HTML 编码/解码
URL 编码/解码
URL 编码/解码