2016-10-11 1 views
0

Je reçois la différence entre les deux branches en utilisant JGit comme suit:JGit Comment obtenir la liste des RevCommit pour DiffEntry

ObjectReader reader = git.getRepository().newObjectReader(); 

CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); 
CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); 

Ref master = git.getRepository().exactRef(getRefBranchName(branchMaster)); 
RevTree masterTree = new RevWalk(git.getRepository()).parseTree(master.getObjectId()); 
    oldTreeIter.reset(reader, masterTree.getId()); 

Ref release = git.getRepository().exactRef(getRefBranchName(branchRelease)); 
RevTree releaseTree = new RevWalk(git.getRepository()).parseTree(release.getObjectId()); 
    newTreeIter.reset(reader, releaseTree.getId()); 

List<DiffEntry> diffs = git.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call(); 

Ensuite, je peux imprimer des différences dans les fichiers comme suit:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
DiffFormatter formatter = new DiffFormatter (outputStream); 
formatter.setRepository(git.getRepository()); 
for (DiffEntry entry: diffs){    
    System.out.println("Diff Entry: " + entry + ", from: " + entry.getOldId()+", to: " + entry.getNewId()); 
    formatter.format(entry); 
    String diffText = outputStream.toString("UTF-8"); 
    System.out.println(diffText); 
    outputStream.reset(); 
}    

J'ai vu toutes les différences entre deux fichiers dans cette branche, mais comment puis-je obtenir tous les commits pour ces différences pour certains DiffEntry? Je n'ai pas trouvé un moyen de le faire

Répondre

0

Un DiffEntry n'a pas 'une liste de RevCommit s'. Il représente une seule modification apportée à un fichier et indique si un fichier a été ajouté, modifié ou supprimé. Et un engagement ne doit pas nécessairement être la source du changement. Cependant, vous avez déjà des pointeurs vers les validations à partir desquelles les DiffEntries sont calculées. C'est master et release.

Avec ref.getObjectId(), vous pouvez obtenir l'ID du commit vers lequel pointe le ref.

Pour obtenir un RevCommit qui contient toutes les métadonnées des commits et des points à son arbre, vous devez utiliser un RevWalk comme ceci:

try(RevWalk walk = new RevWalk(repository)) { 
    RevCommit commit = walk.parseCommit(master.getObjectId()); 
}  

Pour plus d'informations de JGit API diff vous pouvez lire l'article What’s the Difference? Creating Diffs with JGit

+0

merci pour l'aide – Evens