private GitCommit getCommit(VirtualFile gitRepositoryRoot, String revisionId) throws VcsException { // -1: limit; log exactly this commit; git show would do this job also, but there is no api in GitHistoryUtils // ("git show hash" <-> "git log hash -1") List<GitCommit> history = GitHistoryUtils.history(project, gitRepositoryRoot, revisionId, "-1"); return Iterables.getOnlyElement(history); }
@NotNull public Pair<List<GitCommit>, List<GitCommit>> loadCommitsToCompare(@NotNull GitRepository repository, @NotNull final String branchName, @NotNull final Project project) { final List<GitCommit> headToBranch; final List<GitCommit> branchToHead; try { headToBranch = GitHistoryUtils.history(project, repository.getRoot(), ".." + branchName); branchToHead = GitHistoryUtils.history(project, repository.getRoot(), branchName + ".."); } catch (VcsException e) { // we treat it as critical and report an error throw new GitExecutionException("Couldn't get [git log .." + branchName + "] on repository [" + repository.getRoot() + "]", e); } return Pair.create(headToBranch, branchToHead); }
@NotNull private DiffInfo doLoadDiffInfo(@NotNull final BranchInfo from, @NotNull final BranchInfo to) throws VcsException { String currentBranch = from.getFullName(); String targetBranch = to.getFullRemoteName(); List<GitCommit> commits1 = GitHistoryUtils.history(project, gitRepository.getRoot(), ".." + targetBranch); List<GitCommit> commits2 = GitHistoryUtils.history(project, gitRepository.getRoot(), targetBranch + ".."); Collection<Change> diff = GitChangeUtils.getDiff(project, gitRepository.getRoot(), targetBranch, currentBranch, null); GitCommitCompareInfo info = new GitCommitCompareInfo(GitCommitCompareInfo.InfoType.BRANCH_TO_HEAD); info.put(gitRepository, diff); info.put(gitRepository, Couple.of(commits1, commits2)); return new DiffInfo(info, currentBranch, targetBranch); }
@Test(expected = VcsException.class) public void testGetLastCommitHash_NoHistory() throws VcsException { PowerMockito.mockStatic(GitHistoryUtils.class); Mockito.when(GitHistoryUtils.history(Mockito.eq(mockProject), Mockito.eq(mockVirtualFile), Mockito.any(String.class))).thenReturn(Collections.EMPTY_LIST); GeneralGitHelper.getLastCommitHash(mockProject, mockGitRepository, mockGitBranch); } }
@Test public void testGetLastCommitHash_Happy() throws VcsException { final String lastHash = "935b168d0601bd05d57489fae04d5c6ec439cfea"; final String secondToLastHash = "9afa081effdaeafdff089b2aa3543415f6cdb1fb"; GitCommit lastCommit = PRGitObjectMockHelper.getCommit(mockProject, mockVirtualFile, "subject", "message", lastHash); GitCommit secondToLastCommit = PRGitObjectMockHelper.getCommit(mockProject, mockVirtualFile, "subject", "message", secondToLastHash); PowerMockito.mockStatic(GitHistoryUtils.class); Mockito.when(GitHistoryUtils.history(Mockito.eq(mockProject), Mockito.eq(mockVirtualFile), Mockito.any(String.class))).thenReturn(Arrays.asList(lastCommit, secondToLastCommit)); Assert.assertEquals(lastHash, GeneralGitHelper.getLastCommitHash(mockProject, mockGitRepository, mockGitBranch)); }