Skip to content

Commit 26e9f46

Browse files
author
Vladimir Kotal
committed
fix/remove TODOs, add tests
1 parent 2b637ad commit 26e9f46

File tree

2 files changed

+55
-14
lines changed

2 files changed

+55
-14
lines changed

opengrok-indexer/src/main/java/org/opengrok/indexer/history/GitRepository.java

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -606,8 +606,6 @@ History getHistory(File file, String sinceRevision) throws HistoryException {
606606
try (org.eclipse.jgit.lib.Repository repository = getJGitRepository(getDirectoryName());
607607
RevWalk walk = new RevWalk(repository)) {
608608

609-
// TODO: does the walk take current branch into account ?
610-
611609
if (sinceRevision != null) {
612610
walk.markUninteresting(walk.lookupCommit(repository.resolve(sinceRevision)));
613611
}
@@ -622,16 +620,7 @@ History getHistory(File file, String sinceRevision) throws HistoryException {
622620
FollowFilter followFilter = FollowFilter.create(getRepoRelativePath(file), dc);
623621
walk.setTreeFilter(followFilter);
624622
} else {
625-
// TODO: untested, should be simpler (taken from LogCommand)
626-
List<PathFilter> pathFilters = new ArrayList<>();
627-
pathFilters.add(PathFilter.create(getRepoRelativePath(file)));
628-
List<TreeFilter> filters = new ArrayList<>();
629-
filters.add(AndTreeFilter.create(PathFilterGroup.create(pathFilters), TreeFilter.ANY_DIFF));
630-
if (filters.size() == 1) {
631-
filters.add(TreeFilter.ANY_DIFF);
632-
}
633-
634-
walk.setTreeFilter(AndTreeFilter.create(filters));
623+
walk.setTreeFilter(PathFilter.create(getRepoRelativePath(file)));
635624
}
636625
}
637626

@@ -650,7 +639,7 @@ History getHistory(File file, String sinceRevision) throws HistoryException {
650639
SortedSet<String> files = new TreeSet<>();
651640
if (numParents == 1) {
652641
getFiles(repository, commit.getParent(0), commit, files, renamedFiles);
653-
} else if (numParents == 0) { // first commit (TODO: could be dangling ?)
642+
} else if (numParents == 0) { // first commit
654643
try (TreeWalk treeWalk = new TreeWalk(repository)) {
655644
treeWalk.addTree(commit.getTree());
656645
treeWalk.setRecursive(true);
@@ -699,7 +688,7 @@ private void getFiles(org.eclipse.jgit.lib.Repository repository,
699688
if (diff.getChangeType() != DiffEntry.ChangeType.DELETE) {
700689
files.add(getDirectoryNameRelative() + "/" + diff.getNewPath());
701690
}
702-
if (diff.getChangeType() == DiffEntry.ChangeType.RENAME && isHandleRenamedFiles()) { // TODO: add COPY ?
691+
if (diff.getChangeType() == DiffEntry.ChangeType.RENAME && isHandleRenamedFiles()) {
703692
renamedFiles.add(diff.getNewPath());
704693
}
705694
}

opengrok-indexer/src/test/java/org/opengrok/indexer/history/GitRepositoryTest.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.File;
2828
import java.io.IOException;
2929
import java.io.InputStream;
30+
import java.lang.reflect.InvocationTargetException;
3031
import java.nio.file.Paths;
3132
import java.text.ParseException;
3233
import java.util.Arrays;
@@ -54,6 +55,7 @@
5455
import org.opengrok.indexer.configuration.CommandTimeoutType;
5556
import org.opengrok.indexer.configuration.RuntimeEnvironment;
5657
import org.opengrok.indexer.util.FileUtilities;
58+
import org.opengrok.indexer.util.ForbiddenSymlinkException;
5759
import org.opengrok.indexer.util.TestRepository;
5860

5961
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -209,6 +211,43 @@ public void testDetermineBranchAfterChange() throws Exception {
209211
}
210212
}
211213

214+
@Test
215+
public void testGetHistoryInBranch() throws Exception {
216+
// Clone the test repository and create new branch there.
217+
// Clone under source root to avoid problems with prohibited symlinks.
218+
File root = new File(repository.getSourceRoot(), "git");
219+
File localPath = new File(repository.getSourceRoot(), "gitCloneTestDetermineBranch");
220+
GitRepository gitrepo = (GitRepository) RepositoryFactory.getRepository(root);
221+
String branch;
222+
String cloneUrl = root.toURI().toString();
223+
try (Git gitClone = Git.cloneRepository()
224+
.setURI(cloneUrl)
225+
.setDirectory(localPath)
226+
.call()) {
227+
228+
Ref ref = gitClone.checkout().setCreateBranch(true).setName("foo").call();
229+
assertNotNull(ref);
230+
231+
File cloneRoot = gitClone.getRepository().getWorkTree();
232+
gitrepo = (GitRepository) RepositoryFactory.getRepository(cloneRoot);
233+
234+
History history = gitrepo.getHistory(cloneRoot);
235+
assertNotNull(history);
236+
int numEntries = history.getHistoryEntries().size();
237+
assertTrue(numEntries > 0);
238+
239+
RevCommit commit = gitClone.commit().
240+
setAuthor("Snufkin", "[email protected]").
241+
setMessage("fresh commit on a new branch").setAllowEmpty(true).call();
242+
assertNotNull(commit);
243+
244+
history = gitrepo.getHistory(cloneRoot);
245+
assertEquals(numEntries + 1, history.getHistoryEntries().size());
246+
247+
FileUtilities.removeDirs(cloneRoot);
248+
}
249+
}
250+
212251
@Test
213252
public void testDetermineParentEmpty() throws Exception {
214253
File root = new File(repository.getSourceRoot(), "git");
@@ -579,6 +618,19 @@ public void testHistory(boolean renamedHandling) throws Exception {
579618
assertEquals(expectedHistory, history);
580619
}
581620

621+
@Test
622+
public void testSingleHistory() throws Exception {
623+
RuntimeEnvironment.getInstance().setHandleHistoryOfRenamedFiles(false);
624+
File root = new File(repository.getSourceRoot(), "git");
625+
GitRepository gitrepo = (GitRepository) RepositoryFactory.getRepository(root);
626+
627+
History history = gitrepo.getHistory(new File(root.getAbsolutePath(), "moved2/renamed2.c"));
628+
assertNotNull(history);
629+
assertNotNull(history.getHistoryEntries());
630+
assertEquals(1, history.getHistoryEntries().size());
631+
assertEquals("84599b3c", history.getHistoryEntries().get(0).getRevision());
632+
}
633+
582634
@Test
583635
public void testRenamedSingleHistory() throws Exception {
584636
RuntimeEnvironment.getInstance().setHandleHistoryOfRenamedFiles(true);

0 commit comments

Comments
 (0)