Merge "Disable caching for revision URLs using "current""

This commit is contained in:
Shawn Pearce
2013-07-15 04:42:56 +00:00
committed by Gerrit Code Review
6 changed files with 33 additions and 7 deletions

View File

@@ -36,6 +36,10 @@ public class FileResource implements RestResource {
return key;
}
public boolean isCacheable() {
return rev.isCacheable();
}
Account.Id getAccountId() {
return rev.getAccountId();
}

View File

@@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestReadView;
import com.google.gerrit.extensions.restapi.RestView;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.server.change.FileInfoJson.FileInfo;
import com.google.gerrit.server.patch.PatchListNotAvailableException;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -31,6 +32,7 @@ import com.google.inject.Provider;
import org.kohsuke.args4j.Option;
import java.util.Map;
import java.util.concurrent.TimeUnit;
class Files implements ChildCollection<RevisionResource, FileResource> {
@@ -77,11 +79,14 @@ class Files implements ChildCollection<RevisionResource, FileResource> {
resource.getChangeResource(), IdString.fromDecoded(base));
basePatchSet = baseResource.getPatchSet();
}
return Response.ok(fileInfoJson.toFileInfoMap(
Response<Map<String, FileInfo>> r = Response.ok(fileInfoJson.toFileInfoMap(
resource.getChange(),
resource.getPatchSet(),
basePatchSet))
.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
basePatchSet));
if (resource.isCacheable()) {
r.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
}
return r;
}
}
}

View File

@@ -35,7 +35,10 @@ public class GetCommit implements RestReadView<RevisionResource> {
@Override
public Response<CommitInfo> apply(RevisionResource resource)
throws OrmException, PatchSetInfoNotAvailableException {
return Response.ok(json.toCommit(resource.getPatchSet()))
.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
Response<CommitInfo> r = Response.ok(json.toCommit(resource.getPatchSet()));
if (resource.isCacheable()) {
r.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
}
return r;
}
}

View File

@@ -152,7 +152,11 @@ public class GetDiff implements RestReadView<FileResource> {
result.diffHeader = ps.getPatchHeader();
}
result.content = content.lines;
return Response.ok(result).caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
Response<Result> r = Response.ok(result);
if (resource.isCacheable()) {
r.caching(CacheControl.PRIVATE(7, TimeUnit.DAYS));
}
return r;
}
static class Result {

View File

@@ -29,12 +29,17 @@ public class RevisionResource implements RestResource {
private final ChangeResource change;
private final PatchSet ps;
private boolean cacheable = true;
public RevisionResource(ChangeResource change, PatchSet ps) {
this.change = change;
this.ps = ps;
}
public boolean isCacheable() {
return cacheable;
}
public ChangeResource getChangeResource() {
return change;
}
@@ -58,4 +63,9 @@ public class RevisionResource implements RestResource {
IdentifiedUser getUser() {
return (IdentifiedUser) getControl().getCurrentUser();
}
RevisionResource doNotCache() {
cacheable = false;
return this;
}
}

View File

@@ -59,7 +59,7 @@ public class Revisions implements ChildCollection<ChangeResource, RevisionResour
PatchSet.Id p = change.getChange().currentPatchSetId();
PatchSet ps = p != null ? dbProvider.get().patchSets().get(p) : null;
if (ps != null && visible(change, ps)) {
return new RevisionResource(change, ps);
return new RevisionResource(change, ps).doNotCache();
}
throw new ResourceNotFoundException(id);
}