2016-09-09 4 views
3

Gefunden ein seltsames Verhalten (Bug?) In einem Protokollbefehl.JGit Protokoll seltsames Verhalten nach der Zusammenführung

Der folgende Test erstellt ein Repo, erstellt eine Verzweigung, führt einige Commits entweder zum erstellten Zweig und zum Master durch und führt dann den Master zum erstellten Zweig zusammen. Nach der Zusammenführung versucht es die Anzahl der Commits zwischen dem Zweig und dem Master zu berechnen. Weil Meister war bereits verschmolzen - die Filiale ist nicht hinter dem Master, dh entsprechende Zählung begehen sollte 0.

public class JGitBugTest { 

    @Rule 
    public TemporaryFolder tempFolder = new TemporaryFolder(); 

    @Test 
    public void testJGitLogBug() throws Exception { 
    final String BRANCH_NAME = "TST-2"; 
    final String MASTER_BRANCH_NAME = Constants.MASTER; 
    File folder = tempFolder.newFolder(); 
    // Create a Git repository 
    Git api = Git.init().setBare(false).setDirectory(folder).call(); 
    Repository repository = api.getRepository(); 
    // Add an initial commit 
    api.commit().setMessage("Initial commit").call(); 
    // Create a new branch and add some commits to it 
    api.checkout().setCreateBranch(true).setName(BRANCH_NAME).call(); 
    api.commit().setMessage("TST-2 Added files 1").call(); 
    // Add some commits to master branch too 
    api.checkout().setName(MASTER_BRANCH_NAME).call(); 
    api.commit().setMessage("TST-1 Added files 1").call(); 
    api.commit().setMessage("TST-1 Added files 2").call(); 
    // If this delay is commented out -- test fails and 
    // 'behind' is equal to "the number of commits to master - 1". 
//  Thread.sleep(1000); 
    // Checkout the branch and merge master to it 
    api.checkout().setName(BRANCH_NAME).call(); 
    api.merge() 
     .include(repository.resolve(MASTER_BRANCH_NAME)) 
     .setStrategy(MergeStrategy.RECURSIVE) 
     .call() 
     .getNewHead() 
     .name(); 
    // Calculate the number of commits the branch behind of the master 
    // It should be zero because we have merged master into the branch already. 
    Iterable<RevCommit> iterable = api.log() 
     .add(repository.resolve(MASTER_BRANCH_NAME)) 
     .not(repository.resolve(BRANCH_NAME)) 
     .call(); 
    int behind = 0; 
    for(RevCommit commit : iterable) { 
     behind++; 
    } 
    Assert.assertEquals(0, behind); 
    } 
} 

Der obige Test versagt sein, behind die Zahl der Commits im Master ergibt minus 1.

Darüber hinaus, wenn "Schlaf" in Zeile 43 unkommentiert ist - der Fehler wird weg, und "hinter" ist gleich 0.

Was mache ich falsch? Ist es ein Fehler in der JGit-Bibliothek oder in meinem Code?

+0

Der entsprechende Fehler im JGit-Tracker - https://bugs.eclipse.org/bugs/show_bug.cgi?id=501211 –

Antwort

1

Ausführen des Codes unter Windows, ich kann reproduzieren, was Sie beschreiben.

Das sieht aus wie ein Bug in JGit zu mir. Ich empfehle open a bugzilla oder posten Sie Ihre Ergebnisse an die mailing list.

+0

Vielen Dank. Ich habe es bereits auf dem JGit-Forum gepostet: https://www.eclipse.org/forums/index.php/t/1081085/ –