diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java index 3629e2912a..e8b29241de 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/revision/RevisionIT.java @@ -52,7 +52,6 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ETagView; import com.google.gerrit.extensions.restapi.ResourceConflictException; -import com.google.gerrit.extensions.restapi.ResourceNotFoundException; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.reviewdb.client.Patch; import com.google.gerrit.server.change.GetRevisionActions; @@ -567,16 +566,19 @@ public class RevisionIT extends AbstractDaemonTest { } @Test - public void diffNonExistingFile() throws Exception { - PushOneCommit.Result r = createChange(); - - exception.expect(ResourceNotFoundException.class); - exception.expectMessage("non-existing"); - gApi.changes() + public void diffDeletedFile() throws Exception { + pushFactory.create(db, admin.getIdent(), testRepo) + .to("refs/heads/master"); + PushOneCommit.Result r = + pushFactory.create(db, admin.getIdent(), testRepo) + .rm("refs/for/master"); + DiffInfo diff = gApi.changes() .id(r.getChangeId()) .revision(r.getCommit().name()) - .file("non-existing") + .file(FILE_NAME) .diff(); + assertThat(diff.metaA.lines).isEqualTo(1); + assertThat(diff.metaB).isNull(); } @Test diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java index a71ab370dd..2731476935 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/api/changes/RevisionApi.java @@ -47,7 +47,7 @@ public interface RevisionApi { Map files() throws RestApiException; Map files(String base) throws RestApiException; Map files(int parentNum) throws RestApiException; - FileApi file(String path) throws RestApiException; + FileApi file(String path); MergeableInfo mergeable() throws RestApiException; MergeableInfo mergeableOtherBranches() throws RestApiException; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java index 213f90d9ff..6b5e83c635 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java @@ -321,13 +321,9 @@ class RevisionApiImpl implements RevisionApi { } @Override - public FileApi file(String path) throws RestApiException { - try { - return fileApi.create(files.parse(revision, - IdString.fromDecoded(path))); - } catch (IOException e) { - throw new RestApiException("Cannot retrieve file", e); - } + public FileApi file(String path) { + return fileApi.create(files.parse(revision, + IdString.fromDecoded(path))); } @Override diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java index 1631d48aac..f736ce0848 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Files.java @@ -49,7 +49,6 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; -import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.filter.PathFilterGroup; @@ -69,15 +68,11 @@ import java.util.concurrent.TimeUnit; public class Files implements ChildCollection { private final DynamicMap> views; private final Provider list; - private final GitRepositoryManager repoManager; @Inject - Files(DynamicMap> views, - Provider list, - GitRepositoryManager repoManager) { + Files(DynamicMap> views, Provider list) { this.views = views; this.list = list; - this.repoManager = repoManager; } @Override @@ -91,20 +86,8 @@ public class Files implements ChildCollection { } @Override - public FileResource parse(RevisionResource rev, IdString id) - throws ResourceNotFoundException, IOException { - if (Patch.COMMIT_MSG.equals(id.get())) { - return new FileResource(rev, id.get()); - } - try (Repository repo = repoManager.openRepository(rev.getProject()); - RevWalk rw = new RevWalk(repo)) { - RevTree tree = rw.parseTree( - ObjectId.fromString(rev.getPatchSet().getRevision().get())); - if (TreeWalk.forPath(repo, id.get(), tree) != null) { - return new FileResource(rev, id.get()); - } - } - throw new ResourceNotFoundException(id); + public FileResource parse(RevisionResource rev, IdString id) { + return new FileResource(rev, id.get()); } public static final class ListFiles implements RestReadView {