From f4d4ce0da1e515a9bcf8ee975b5f2ed00ac883ac Mon Sep 17 00:00:00 2001 From: Marc Egea i Sala Date: Fri, 3 Jun 2016 15:40:48 +0100 Subject: [PATCH] Build RepositoryObjectTreeWalker only once per commit --- .../main/java/uk/ac/ic/wlgitbridge/data/model/DataStore.java | 4 +++- .../uk/ac/ic/wlgitbridge/data/model/ResourceFetcher.java | 4 ++-- .../uk/ac/ic/wlgitbridge/data/model/ResourceFetcherTest.java | 5 ++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/DataStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/DataStore.java index 8df74088fa..567732b990 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/DataStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/DataStore.java @@ -12,6 +12,7 @@ import uk.ac.ic.wlgitbridge.data.filestore.RawDirectory; import uk.ac.ic.wlgitbridge.data.filestore.RawFile; import uk.ac.ic.wlgitbridge.data.model.db.PersistentStore; import uk.ac.ic.wlgitbridge.data.model.db.SqlitePersistentStore; +import uk.ac.ic.wlgitbridge.git.util.RepositoryObjectTreeWalker; import uk.ac.ic.wlgitbridge.snapshot.base.ForbiddenException; import uk.ac.ic.wlgitbridge.snapshot.getforversion.SnapshotAttachment; import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException; @@ -75,6 +76,7 @@ public class DataStore { List snapshots) throws IOException, GitAPIException, SnapshotPostException { for (Snapshot snapshot : snapshots) { + Map fileTable = new RepositoryObjectTreeWalker(repository).getDirectoryContents().getFileTable(); List files = new LinkedList(); files.addAll(snapshot.getSrcs()); Map fetchedUrls = new HashMap(); @@ -84,7 +86,7 @@ public class DataStore { name, snapshotAttachment.getUrl(), snapshotAttachment.getPath(), - repository, + fileTable, fetchedUrls ) ); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcher.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcher.java index 0e08ecccc4..257033088b 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcher.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcher.java @@ -29,7 +29,7 @@ public class ResourceFetcher { this.persistentStore = persistentStore; } - public RawFile get(String projectName, String url, String newPath, Repository repository, Map fetchedUrls) throws IOException, SnapshotPostException { + public RawFile get(String projectName, String url, String newPath, Map fileTable, Map fetchedUrls) throws IOException, SnapshotPostException { String path = persistentStore.getPathForURLInProject(projectName, url); byte[] contents; if (path == null) { @@ -41,7 +41,7 @@ public class ResourceFetcher { Log.info("At (" + projectName + "): " + path); contents = fetchedUrls.get(url); if (contents == null) { - RawFile rawFile = new RepositoryObjectTreeWalker(repository).getDirectoryContents().getFileTable().get(path); + RawFile rawFile = fileTable.get(path); if (rawFile == null) { Log.warn( "File " + path + " was not in the current commit, or the git tree, yet path was not null. " + diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcherTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcherTest.java index 17cfcf8584..d171c21cd7 100644 --- a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcherTest.java +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/data/model/ResourceFetcherTest.java @@ -9,7 +9,9 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.mockserver.client.server.MockServerClient; import org.mockserver.junit.MockServerRule; +import uk.ac.ic.wlgitbridge.data.filestore.RawFile; import uk.ac.ic.wlgitbridge.data.model.db.PersistentStore; +import uk.ac.ic.wlgitbridge.git.util.RepositoryObjectTreeWalker; import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException; import java.io.IOException; @@ -62,8 +64,9 @@ public class ResourceFetcherTest { TemporaryFolder repositoryFolder = new TemporaryFolder(); repositoryFolder.create(); Repository repository = new FileRepositoryBuilder().setWorkTree(repositoryFolder.getRoot()).build(); + Map fileTable = new RepositoryObjectTreeWalker(repository).getDirectoryContents().getFileTable(); Map fetchedUrls = new HashMap(); - resourceFetcher.get(testProjectName, testUrl, newTestPath, repository, fetchedUrls); + resourceFetcher.get(testProjectName, testUrl, newTestPath, fileTable, fetchedUrls); // We don't bother caching in this case, at present. assertEquals(0, fetchedUrls.size());