2016-09-09 8 views
3

Обнаружено странное поведение (ошибка?) В команде журнала.JGit log странное поведение после слияния

В приведенном ниже тестовом примере создается репо, создается ветка, выполняется ли какая-либо транзакция либо к созданной ветке, либо к мастеру, а затем объединяется с созданной ветвью. После слияния он пытается вычислить количество коммитов между веткой и мастером. Потому что мастер был уже слито - ветвь не за хозяином, то есть соответствующее обязательство количества должна быть 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); 
    } 
} 

выше тест не пройден, behind дает количество фиксаций в мастере минус 1.

Кроме того, если «сон» в строке 43 раскоментирован - ошибка исчезнет, ​​а «позади» равна 0.

Что делать неправильно? Это ошибка в библиотеке JGit или в моем коде?

+0

Соответствующая ошибка в трекер JGit - https://bugs.eclipse.org/bugs/show_bug.cgi?id=501211 –

ответ

1

Запуск кода в Windows, я могу воспроизвести то, что вы описали.

Это похоже на ошибку в JGit для меня. Я рекомендую open a bugzilla или отправлю результаты на mailing list.

+0

Спасибо. Я уже разместил его на форуме JGit: https://www.eclipse.org/forums/index.php/t/1081085/ –

 Смежные вопросы

  • Нет связанных вопросов^_^