in src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java [406:464]
static ResourceKey fromPath(String path) {
String project;
String file = null;
String revision = null;
String revisionB = null;
DiffMode diffMode = DiffMode.NO_DIFF;
if (!path.startsWith(PATH_PREFIX)) {
// should not happen since this servlet is only registered to handle
// paths that start with this prefix
throw new IllegalStateException("path must start with '" + PATH_PREFIX + "'");
}
path = path.substring(PATH_PREFIX.length());
int i = path.indexOf('/');
if (i != -1 && i != path.length() - 1) {
project = IdString.fromUrl(path.substring(0, i)).get();
String rest = path.substring(i + 1);
if (rest.startsWith("rev/")) {
if (rest.length() > 4) {
rest = rest.substring(4);
i = rest.indexOf('/');
if (i != -1 && i != path.length() - 1) {
revision = IdString.fromUrl(rest.substring(0, i)).get();
file = rest.substring(i + 1);
} else {
revision = IdString.fromUrl(rest).get();
}
}
} else {
file = rest;
}
} else {
project = IdString.fromUrl(CharMatcher.is('/').trimTrailingFrom(path)).get();
}
if (revision != null) {
if (revision.contains("<->")) {
diffMode = DiffMode.UNIFIED;
int p = revision.indexOf("<->");
revisionB = revision.substring(p + 3);
revision = Strings.emptyToNull(revision.substring(0, p));
} else if (revision.contains("<-")) {
diffMode = DiffMode.SIDEBYSIDE_A;
int p = revision.indexOf("<-");
revisionB = revision.substring(p + 2);
revision = revision.substring(0, p);
} else if (revision.contains("->")) {
diffMode = DiffMode.SIDEBYSIDE_B;
int p = revision.indexOf("->");
revisionB = revision.substring(p + 2);
revision = Strings.emptyToNull(revision.substring(0, p));
}
}
return new ResourceKey(project, file, revision, revisionB, diffMode);
}