Обнаружено странное поведение (ошибка?) В команде журнала.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 или в моем коде?
Соответствующая ошибка в трекер JGit - https://bugs.eclipse.org/bugs/show_bug.cgi?id=501211 –