gr git log, чтобы получить эквивалент git log --name-status --reverse --pretty = format: '% H' - PullRequest
0 голосов
/ 19 июня 2020

Как я могу использовать gr git для получения измененных путей для фиксации?

В приведенном ниже коде я получаю объект gr git Commit, который имеет метаданные о фиксации, но не список файлов изменен. Я хочу получить эквивалент git log --name-status --reverse --pretty=format:'%H'

Любые идеи по преобразованию sha коммита в объект gr git или j git с подробной информацией о пути и типе модификации?

    def commits =  grgit.log {
        range('sha', 'HEAD')
    }
    commits.each { def change ->
        def description = grgit.describe { commit = change }
        println description
        println change
    }

1 Ответ

0 голосов
/ 21 июня 2020

gr git подходит для того, что он делает, и он также приносит с собой j git + обеспечивает доступ к этому нижнему уровню

Итак, мы можем сделать это

Получить список объектов RevCommit для диапазона

import org.eclipse.jgit.api.Git
import org.eclipse.jgit.treewalk.TreeWalk
import org.eclipse.jgit.diff.DiffFormatter
import org.eclipse.jgit.treewalk.CanonicalTreeParser
import org.eclipse.jgit.diff.DiffEntry
import org.eclipse.jgit.treewalk.filter.PathFilter

def getCommits(def early, def later='HEAD') {
  Git git = grgit.repository.jgit
  def earliest =  git.repository.resolve(early)
  def latest = git.repository.resolve(later)

  return git.log()
        .addRange(earliest, latest)
        .call()
}

Получить информацию о различиях для каждой фиксации

for (def commit in getCommits(earliestCommitId, latestCommitId)) {
    for (DiffEntry diffEntry in diffCommitWithParent(commit, pathFilter)) {
         println diffEntry // you'd want to do something more useful here
    }
}

def diffCommitWithParent(def commit, def pathFilter) {
  Git git = grgit.repository.jgit
  def previousTree = commit.getParentCount() > 0 ? commit.getParent(0).getTree() : null
  def currentTree = commit.getTree()
  def reader = git.repository.newObjectReader()
  def treeParserPrevious = new CanonicalTreeParser(null, reader, previousTree)
  def treeParserCurrent = new CanonicalTreeParser(null, reader, currentTree)
  return git.diff()
        .setOldTree(treeParserPrevious)
        .setNewTree(treeParserCurrent)
        .setPathFilter(new PathFilter(pathFilter))
        .call()
}
...