diff --git a/.buckconfig b/.buckconfig
deleted file mode 100644
index b606c45..0000000
--- a/.buckconfig
+++ /dev/null
@@ -1,14 +0,0 @@
-[alias]
-  gitiles = //:gitiles
-  plugin = //:gitiles
-
-[java]
-  src_roots = java, resources
-
-[project]
-  ignore = .git
-
-[cache]
-  mode = dir
-  dir = buck-out/cache
-
diff --git a/BUCK b/BUCK
deleted file mode 100644
index d81cf11..0000000
--- a/BUCK
+++ /dev/null
@@ -1,174 +0,0 @@
-include_defs('//bucklets/gerrit_plugin.bucklet')
-include_defs('//bucklets/maven_jar.bucklet')
-
-define_license('commonmark')
-define_license('autolink')
-
-genrule(
-  name = 'gitiles',
-  cmd = ' && '.join([
-    'cp $(location :gitiles__base) $OUT',
-    'unzip -qd $TMP $(location :gitiles-servlet) "com/google/gitiles/static/*"',
-    'cd $TMP/com/google/gitiles',
-    'mv static +static',
-    'zip -Drq $OUT -g . -i "+static/*"',
-  ]),
-  visibility = ['PUBLIC'],
-  out = 'gitiles.jar',
-)
-
-gerrit_plugin(
-  name = 'gitiles',
-  srcs = glob(['src/main/java/**/*.java']),
-  deps = [
-    ':gitiles-servlet',
-
-    # Deps only needed by Gitiles.
-    ':commons-lang3',
-    ':guice-multibindings',
-    ':nullable-jsr305',
-    ':soy',
-    ':commonmark',
-    ':cm-autolink',
-    ':gfm-tables',
-    ':gfm-strikethrough',
-
-  ],
-  resources = glob(['src/main/resources/**/*']),
-  manifest_entries = [
-    'Gerrit-PluginName: gitiles',
-    'Gerrit-Module: com.googlesource.gerrit.plugins.gitiles.Module',
-    'Gerrit-HttpModule: com.googlesource.gerrit.plugins.gitiles.HttpModule',
-
-    # Gitiles uses /repo to access a repo, so the default plugin layout would
-    # disallow repos named "static" or "Documentation". Paths starting with +
-    # are reserved by Gitiles and can't match repos.
-    'Gerrit-HttpStaticPrefix: +static',
-    'Gerrit-HttpDocumentationPrefix: +Documentation',
-  ],
-  visibility = [],
-  target_suffix = '__base'
-)
-
-java_library(
-  name = 'classpath',
-  deps = [':gitiles__plugin'],
-)
-
-maven_jar(
-  name = 'gitiles-servlet',
-  id = 'com.google.gitiles:gitiles-servlet:0.1-11',
-  sha1 = 'c8fe6a48472a51607103a4b10214867bcc1c63f5',
-  deps = [':prettify'],
-  license = 'Apache2.0',
-  repository = GERRIT,
-  visibility = [],
-)
-
-# prettify must match the version used in Gitiles
-maven_jar(
-  name = 'prettify',
-  id = 'prettify:java-prettify:1.2.1',
-  sha1 = '29ad8d072f9d0b83d1a2e9aa6ccb0905e6d543c6',
-  license = 'Apache2.0',
-  repository = GERRIT,
-  visibility = [],
-)
-
-maven_jar(
-  name = 'commons-lang3',
-  id = 'org.apache.commons:commons-lang3:3.1',
-  sha1 = '905075e6c80f206bbe6cf1e809d2caa69f420c76',
-  license = 'Apache2.0',
-  visibility = [],
-)
-
-# soy version must match version used in Gitiles
-maven_jar(
-  name = 'soy',
-  id = 'com.google.template:soy:2015-04-10',
-  sha1 = 'f2a260c0eafbc5756ccec546efd2ffd5b0a583cb',
-  deps = [':icu4j'],
-  license = 'Apache2.0',
-  visibility = [],
-)
-
-maven_jar(
-  name = 'icu4j',
-  id = 'com.ibm.icu:icu4j:51.1',
-  sha1 = '8ce396c4aed83c0c3de9158dc72c834fd283d5a4',
-  license = 'Apache2.0',
-)
-
-# guice-multibindings must match Guice version used in Gerrit
-maven_jar(
-  name = 'guice-multibindings',
-  id = 'com.google.inject.extensions:guice-multibindings:4.0',
-  sha1 = 'f4509545b4470bbcc865aa500ad6fef2e97d28bf',
-  license = 'Apache2.0',
-  exclude_java_sources = True,
-  exclude = [
-    'META-INF/DEPENDENCIES',
-    'META-INF/LICENSE',
-    'META-INF/NOTICE',
-    'META-INF/maven/com.google.guava/guava/pom.properties',
-    'META-INF/maven/com.google.guava/guava/pom.xml',
-  ],
-  visibility = [],
-)
-
-maven_jar(
-  name = 'nullable-jsr305',
-  id = 'com.google.code.findbugs:jsr305:3.0.0',
-  sha1 = '5871fb60dc68d67da54a663c3fd636a10a532948',
-  license = 'Apache2.0',
-  exclude_java_sources = True,
-  visibility = [],
-)
-
-COMMONMARK_VERSION = '0.6.0'
-maven_jar(
-  name = 'commonmark',
-  id = 'com.atlassian.commonmark:commonmark:' + COMMONMARK_VERSION,
-  sha1 = '5df3f6fa3073966620685924aa22d08ece7213f2',
-  license = 'commonmark',
-  local_license = True,
-)
-
-maven_jar(
-  name = 'cm-autolink',
-  id = 'com.atlassian.commonmark:commonmark-ext-autolink:' + COMMONMARK_VERSION,
-  sha1 = '4d7e828a4651e2f590b4a059925991be58e62da6',
-  license = 'commonmark',
-  local_license = True,
-  deps = [
-    ':commonmark',
-    ':autolink',
-  ],
-  )
-
-maven_jar(
-  name = 'autolink',
-  id = 'org.nibor.autolink:autolink:0.4.0',
-  sha1 = '764f7b0147a0675d971a34282dce9ec76b8307c9',
-  license = 'autolink',
-  local_license = True,
-)
-
-maven_jar(
-  name = 'gfm-strikethrough',
-  id = 'com.atlassian.commonmark:commonmark-ext-gfm-strikethrough:' + COMMONMARK_VERSION,
-  sha1 = '75a95aaec77810496de41239bcc773adfb13285f',
-  license = 'commonmark',
-  local_license = True,
-  deps = [':commonmark'],
-)
-
-maven_jar(
-  name = 'gfm-tables',
-  id = 'com.atlassian.commonmark:commonmark-ext-gfm-tables:' + COMMONMARK_VERSION,
-  sha1 = 'ae1c701517e8116bc205b561b9b215a53df8abc7',
-  license = 'commonmark',
-  local_license = True,
-  deps = [':commonmark'],
-)
diff --git a/BUILD b/BUILD
new file mode 100644
index 0000000..b5c7a38
--- /dev/null
+++ b/BUILD
@@ -0,0 +1,46 @@
+load("//tools/bzl:plugin.bzl", "gerrit_plugin")
+
+genrule(
+    name = "gitiles",
+    srcs = [
+        ":gitiles__base",
+        "@gitiles_servlet//jar",
+    ],
+    outs = ["gitiles.jar"],
+    cmd = " && ".join([
+        "ROOT=$$PWD",
+        "TMP=$$(mktemp -d || mktemp -d -t bazel-tmp)",
+        "cp $(location :gitiles__base) $@",
+        "chmod +w $@",
+        "unzip -qd $$TMP $(location @gitiles_servlet//jar) \"com/google/gitiles/static/*\"",
+        "cd $$TMP/com/google/gitiles",
+        "mv static +static",
+        "zip -Drq $$ROOT/$@ -g . -i \"+static/*\"",
+    ]),
+)
+
+gerrit_plugin(
+    name = "gitiles",
+    srcs = glob(["src/main/java/**/*.java"]),
+    manifest_entries = [
+        "Gerrit-PluginName: gitiles",
+        "Gerrit-Module: com.googlesource.gerrit.plugins.gitiles.Module",
+        "Gerrit-HttpModule: com.googlesource.gerrit.plugins.gitiles.HttpModule",
+        # Gitiles uses /repo to access a repo, so the default plugin layout would
+        # disallow repos named "static" or "Documentation". Paths starting with +
+        # are reserved by Gitiles and can't match repos.
+        "Gerrit-HttpStaticPrefix: +static",
+        "Gerrit-HttpDocumentationPrefix: +Documentation",
+    ],
+    resources = glob(["src/main/resources/**/*"]),
+    target_suffix = "__base",
+    deps = [
+        "@autolink//jar",
+        "@cm_autolink//jar",
+        "@commonmark//jar",
+        "@gfm_strikethrough//jar",
+        "@gfm_tables//jar",
+        "@gitiles_servlet//jar",
+        "@prettify//jar",
+    ],
+)
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
new file mode 100644
index 0000000..94464da
--- /dev/null
+++ b/external_plugin_deps.bzl
@@ -0,0 +1,49 @@
+load("//tools/bzl:maven_jar.bzl", "maven_jar", "GERRIT", "MAVEN_CENTRAL")
+
+COMMONMARK_VERSION = '0.6.0'
+
+def external_plugin_deps():
+  maven_jar(
+    name = 'gitiles_servlet',
+    artifact = 'com.google.gitiles:gitiles-servlet:0.2',
+    sha1 = 'e5530e0c53e24aa814c7f83de644be0ae1cbc193',
+    repository = GERRIT,
+  )
+
+  # prettify must match the version used in Gitiles
+  maven_jar(
+    name = 'prettify',
+    artifact = 'prettify:java-prettify:1.2.1',
+    sha1 = '29ad8d072f9d0b83d1a2e9aa6ccb0905e6d543c6',
+    repository = GERRIT,
+  )
+
+  maven_jar(
+    name = 'commonmark',
+    artifact = 'com.atlassian.commonmark:commonmark:' + COMMONMARK_VERSION,
+    sha1 = '5df3f6fa3073966620685924aa22d08ece7213f2',
+  )
+
+  maven_jar(
+    name = 'cm_autolink',
+    artifact = 'com.atlassian.commonmark:commonmark-ext-autolink:' + COMMONMARK_VERSION,
+    sha1 = '4d7e828a4651e2f590b4a059925991be58e62da6',
+  )
+
+  maven_jar(
+    name = 'autolink',
+    artifact = 'org.nibor.autolink:autolink:0.4.0',
+    sha1 = '764f7b0147a0675d971a34282dce9ec76b8307c9',
+  )
+
+  maven_jar(
+    name = 'gfm_strikethrough',
+    artifact = 'com.atlassian.commonmark:commonmark-ext-gfm-strikethrough:' + COMMONMARK_VERSION,
+    sha1 = '75a95aaec77810496de41239bcc773adfb13285f',
+  )
+
+  maven_jar(
+    name = 'gfm_tables',
+    artifact = 'com.atlassian.commonmark:commonmark-ext-gfm-tables:' + COMMONMARK_VERSION,
+    sha1 = 'ae1c701517e8116bc205b561b9b215a53df8abc7',
+  )
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
deleted file mode 100644
index a7ab54e..0000000
--- a/lib/gerrit/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-VER = '2.13'
-REPO = MAVEN_CENTRAL
-
-maven_jar(
-  name = 'plugin-api',
-  id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = 'e25d55b8f41627c4ae6b9d2069ec398638b219a3',
-  attach_source = False,
-  repository = REPO,
-  license = 'Apache2.0',
-)
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
deleted file mode 100644
index 01dc375..0000000
--- a/lib/jgit/BUCK
+++ /dev/null
@@ -1,41 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-REPO = MAVEN_CENTRAL # Leave here even if set to MAVEN_CENTRAL.
-VERS = '4.5.0.201609210915-r'
-
-maven_jar(
-  name = 'jgit',
-  id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS,
-  bin_sha1 = '3e3d0b73dcf4ad649f37758ea8502d92f3d299de',
-  src_sha1 = 'fc352952db91a4046e4b832145eb2dc8afce8db1',
-  license = 'jgit',
-  repository = REPO,
-  unsign = True,
-  deps = [':ewah'],
-  exclude = [
-    'META-INF/eclipse.inf',
-    'about.html',
-    'plugin.properties',
-  ],
-)
-
-maven_jar(
-  name = 'jgit-servlet',
-  id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS,
-  sha1 = '6e36638888918d9941dddec7e2abe1f162cc74d9',
-  license = 'jgit',
-  repository = REPO,
-  deps = [':jgit'],
-  unsign = True,
-  exclude = [
-    'about.html',
-    'plugin.properties',
-  ],
-)
-
-maven_jar(
-  name = 'ewah',
-  id = 'com.googlecode.javaewah:JavaEWAH:0.7.9',
-  sha1 = 'eceaf316a8faf0e794296ebe158ae110c7d72a5a',
-  license = 'Apache2.0',
-)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
index 098910c..de023e0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/FilteredRepository.java
@@ -21,15 +21,17 @@
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.SearchingChangeCacheImpl;
 import com.google.gerrit.server.git.TagCache;
 import com.google.gerrit.server.git.VisibleRefFilter;
-import com.google.gerrit.server.git.SearchingChangeCacheImpl;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.attributes.AttributesNodeProvider;
 import org.eclipse.jgit.lib.ObjectDatabase;
 import org.eclipse.jgit.lib.Ref;
@@ -41,10 +43,6 @@
 import org.eclipse.jgit.lib.RepositoryBuilder;
 import org.eclipse.jgit.lib.StoredConfig;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
 class FilteredRepository extends Repository {
   static class Factory {
     private final Provider<ReviewDb> db;
@@ -56,7 +54,8 @@
     private final SearchingChangeCacheImpl changeCache;
 
     @Inject
-    Factory(Provider<ReviewDb> db,
+    Factory(
+        Provider<ReviewDb> db,
         ProjectControl.GenericFactory projectControlFactory,
         Provider<CurrentUser> userProvider,
         GitRepositoryManager repoManager,
@@ -72,24 +71,24 @@
       this.changeCache = changeCache;
     }
 
-    FilteredRepository create(Project.NameKey name)
-        throws NoSuchProjectException, IOException {
+    FilteredRepository create(Project.NameKey name) throws NoSuchProjectException, IOException {
       ProjectControl ctl = projectControlFactory.controlFor(name, userProvider.get());
       if (!ctl.isVisible()) {
         throw new NoSuchProjectException(name);
       }
       Repository repo = repoManager.openRepository(name);
-      return new FilteredRepository(ctl, repo,
-          new VisibleRefFilter(tagCache, changeNotesFactory, changeCache, repo,
-              ctl, db.get(), true));
+      return new FilteredRepository(
+          ctl,
+          repo,
+          new VisibleRefFilter(
+              tagCache, changeNotesFactory, changeCache, repo, ctl, db.get(), true));
     }
   }
 
   private final Repository delegate;
   private final RefDatabase refdb;
 
-  private FilteredRepository(ProjectControl ctl, Repository delegate,
-      VisibleRefFilter refFilter) {
+  private FilteredRepository(ProjectControl ctl, Repository delegate, VisibleRefFilter refFilter) {
     super(toBuilder(delegate));
     this.delegate = delegate;
     if (ctl.allRefsAreVisible()) {
@@ -100,8 +99,8 @@
   }
 
   private static RepositoryBuilder toBuilder(Repository repo) {
-    RepositoryBuilder b = new RepositoryBuilder().setGitDir(repo.getDirectory())
-      .setFS(repo.getFS());
+    RepositoryBuilder b =
+        new RepositoryBuilder().setGitDir(repo.getDirectory()).setFS(repo.getFS());
     if (!repo.isBare()) {
       b.setWorkTree(repo.getWorkTree()).setIndexFile(repo.getIndexFile());
     }
@@ -185,8 +184,7 @@
     }
 
     @Override
-    public RefRename newRename(String fromName, String toName)
-        throws IOException {
+    public RefRename newRename(String fromName, String toName) throws IOException {
       throw new UnsupportedOperationException(); // Gitiles is read-only.
     }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
index d7af64e..4e7e612 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GerritGitilesAccess.java
@@ -31,18 +31,15 @@
 import com.google.gitiles.RepositoryDescription;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
-import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
-
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
+import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 
 class GerritGitilesAccess implements GitilesAccess {
   // Assisted injection doesn't work with the overridden method, so write the
@@ -56,7 +53,8 @@
     private final String anonymousCowardName;
 
     @Inject
-    Factory(ProjectCache projectCache,
+    Factory(
+        ProjectCache projectCache,
         ProjectJson projectJson,
         Provider<ListProjects> listProjects,
         GitilesUrls urls,
@@ -97,8 +95,8 @@
 
   @Override
   public Map<String, RepositoryDescription> listRepositories(
-      @Nullable String prefix, Set<String> branches) throws ServiceNotEnabledException,
-      ServiceNotAuthorizedException, IOException  {
+      @Nullable String prefix, Set<String> branches)
+      throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException {
     ListProjects lp = listProjects.get();
     lp.setShowDescription(true);
     lp.setAll(true);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
index 5933929..4ec8a2d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/GitilesWeblinks.java
@@ -14,62 +14,77 @@
 
 package com.googlesource.gerrit.plugins.gitiles;
 
+import com.google.common.base.MoreObjects;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.WebLinkInfo;
 import com.google.gerrit.extensions.webui.BranchWebLink;
 import com.google.gerrit.extensions.webui.FileHistoryWebLink;
 import com.google.gerrit.extensions.webui.FileWebLink;
+import com.google.gerrit.extensions.webui.ParentWebLink;
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 import com.google.gerrit.server.config.PluginConfigFactory;
 import com.google.inject.Inject;
-import com.google.common.base.MoreObjects;
-
 import org.eclipse.jgit.lib.Config;
 
-public class GitilesWeblinks implements BranchWebLink, FileWebLink,
-    PatchSetWebLink, ProjectWebLink, FileHistoryWebLink {
+public class GitilesWeblinks
+    implements BranchWebLink,
+        FileWebLink,
+        PatchSetWebLink,
+        ProjectWebLink,
+        FileHistoryWebLink,
+        ParentWebLink {
   private final String name;
   private final String baseUrl;
+  private final String target;
 
   @Inject
-  public GitilesWeblinks(@PluginName String pluginName,
-                         PluginConfigFactory configFactory) {
+  public GitilesWeblinks(@PluginName String pluginName, PluginConfigFactory configFactory) {
     Config config = configFactory.getGlobalPluginConfig("gitiles");
-    name = MoreObjects.firstNonNull(
-                          config.getString("gerrit", null, "linkname"),
-                          "browse");
+    name = MoreObjects.firstNonNull(config.getString("gerrit", null, "linkname"), "browse");
     baseUrl = "plugins/" + pluginName;
+
+    target = MoreObjects.firstNonNull(config.getString("gerrit", null, "target"), Target.BLANK);
   }
 
   @Override
   public WebLinkInfo getProjectWeblink(String projectName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s", baseUrl,
-        projectName), Target.BLANK);
+    return new WebLinkInfo(name, null, String.format("%s/%s", baseUrl, projectName), target);
   }
 
   @Override
   public WebLinkInfo getPatchSetWebLink(String projectName, String commit) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s", baseUrl,
-        projectName, commit), Target.BLANK);
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, commit), target);
   }
 
   @Override
-  public WebLinkInfo getFileWebLink(String projectName, String revision,
-      String fileName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s/%s", baseUrl,
-        projectName, revision, fileName), Target.BLANK);
+  public WebLinkInfo getParentWebLink(String projectName, String commit) {
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, commit), target);
+  }
+
+  @Override
+  public WebLinkInfo getFileWebLink(String projectName, String revision, String fileName) {
+    return new WebLinkInfo(
+        name,
+        null,
+        String.format("%s/%s/+/%s/%s", baseUrl, projectName, revision, fileName),
+        target);
   }
 
   @Override
   public WebLinkInfo getBranchWebLink(String projectName, String branchName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+/%s", baseUrl,
-        projectName, branchName), Target.BLANK);
+    return new WebLinkInfo(
+        name, null, String.format("%s/%s/+/%s", baseUrl, projectName, branchName), target);
   }
 
   @Override
   public WebLinkInfo getFileHistoryWebLink(String projectName, String revision, String fileName) {
-    return new WebLinkInfo(name, null, String.format("%s/%s/+log/%s/%s", baseUrl,
-        projectName, revision, fileName), Target.BLANK);
+    return new WebLinkInfo(
+        name,
+        null,
+        String.format("%s/%s/+log/%s/%s", baseUrl, projectName, revision, fileName),
+        target);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
index c1163cf..9402bf4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/HttpModule.java
@@ -26,20 +26,10 @@
 import com.google.inject.Singleton;
 import com.google.inject.name.Named;
 import com.google.inject.servlet.ServletModule;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.storage.file.FileBasedConfig;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-import org.eclipse.jgit.util.FS;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -48,6 +38,13 @@
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
+import org.eclipse.jgit.util.FS;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class HttpModule extends ServletModule {
   private final Provider<CurrentUser> userProvider;
@@ -62,8 +59,8 @@
   protected Filter createPathFilter() {
     return new Filter() {
       @Override
-      public void doFilter(ServletRequest request, ServletResponse response,
-          FilterChain chain) throws IOException, ServletException {
+      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+          throws IOException, ServletException {
         HttpServletRequestWrapper wrappedRequest =
             new HttpServletRequestWrapper((HttpServletRequest) request) {
               @Override
@@ -89,8 +86,7 @@
     };
   }
 
-  private static final Logger log = LoggerFactory
-      .getLogger(HttpModule.class);
+  private static final Logger log = LoggerFactory.getLogger(HttpModule.class);
 
   @Override
   protected void configureServlets() {
@@ -109,11 +105,14 @@
 
   @Provides
   @Singleton
-  GitilesServlet getServlet(@Named("gitiles") Config cfg, GitilesUrls urls,
+  GitilesServlet getServlet(
+      @Named("gitiles") Config cfg,
+      GitilesUrls urls,
       GitilesAccess.Factory accessFactory,
       RepositoryResolver<HttpServletRequest> resolver,
       MenuFilter menuFilter) {
-    GitilesServlet s = new GitilesServlet(cfg, null, urls, accessFactory, resolver, null, null, null, null);
+    GitilesServlet s =
+        new GitilesServlet(cfg, null, urls, accessFactory, resolver, null, null, null, null);
     for (GitilesView.Type view : GitilesView.Type.values()) {
       s.addFilter(view, menuFilter);
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
index 42d1837..7009f1a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginFilter.java
@@ -20,9 +20,7 @@
 import com.google.gitiles.GitilesUrls;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -44,40 +42,39 @@
   }
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     final HttpServletRequest req = (HttpServletRequest) request;
-    HttpServletResponseWrapper rsp = new HttpServletResponseWrapper((HttpServletResponse) response) {
-      @Override
-      public void sendError(int sc) throws IOException {
-        CurrentUser user = userProvider.get();
-        if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
-          sendRedirect(getLoginRedirectUrl(req));
-          return;
-        }
-        super.sendError(sc);
-      }
+    HttpServletResponseWrapper rsp =
+        new HttpServletResponseWrapper((HttpServletResponse) response) {
+          @Override
+          public void sendError(int sc) throws IOException {
+            CurrentUser user = userProvider.get();
+            if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
+              sendRedirect(getLoginRedirectUrl(req));
+              return;
+            }
+            super.sendError(sc);
+          }
 
-      @Override
-      public void sendError(int sc, String msg) throws IOException {
-        CurrentUser user = userProvider.get();
-        if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
-          sendRedirect(getLoginRedirectUrl(req));
-          return;
-        }
-        super.sendError(sc, msg);
-      }
-    };
+          @Override
+          public void sendError(int sc, String msg) throws IOException {
+            CurrentUser user = userProvider.get();
+            if (sc == SC_UNAUTHORIZED && !(user instanceof IdentifiedUser)) {
+              sendRedirect(getLoginRedirectUrl(req));
+              return;
+            }
+            super.sendError(sc, msg);
+          }
+        };
     chain.doFilter(request, rsp);
   }
 
   @Override
-  public void init(FilterConfig filterConfig) throws ServletException {
-  }
+  public void init(FilterConfig filterConfig) throws ServletException {}
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 
   private String getLoginRedirectUrl(HttpServletRequest req) {
     String baseUrl = urls.getBaseGerritUrl(req);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
index 76e3584..058dd2b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
@@ -21,10 +21,8 @@
 import com.google.gitiles.GitilesUrls;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
 import java.io.IOException;
 import java.util.List;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -44,30 +42,25 @@
   }
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     HttpServletRequest req = (HttpServletRequest) request;
     CurrentUser user = userProvider.get();
     List<Object> entries = Lists.newArrayListWithCapacity(3);
     entries.add(BaseServlet.menuEntry("Code Review", urls.getBaseGerritUrl(req)));
     if (user instanceof IdentifiedUser) {
-      entries
-          .add(BaseServlet.menuEntry(((IdentifiedUser) user).getName(), null));
-      entries.add(BaseServlet.menuEntry("Sign Out", urls.getBaseGerritUrl(req)
-          + "logout"));
+      entries.add(BaseServlet.menuEntry(((IdentifiedUser) user).getName(), null));
+      entries.add(BaseServlet.menuEntry("Sign Out", urls.getBaseGerritUrl(req) + "logout"));
     } else {
-      entries.add(BaseServlet.menuEntry("Sign In", urls.getBaseGerritUrl(req)
-          + "login"));
+      entries.add(BaseServlet.menuEntry("Sign In", urls.getBaseGerritUrl(req) + "login"));
     }
     BaseServlet.putSoyData(req, "menuEntries", entries);
     chain.doFilter(request, response);
   }
 
   @Override
-  public void init(FilterConfig filterConfig) throws ServletException {
-  }
+  public void init(FilterConfig filterConfig) throws ServletException {}
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
index 82ded08..343e716 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Module.java
@@ -20,6 +20,7 @@
 import com.google.gerrit.extensions.webui.BranchWebLink;
 import com.google.gerrit.extensions.webui.FileHistoryWebLink;
 import com.google.gerrit.extensions.webui.FileWebLink;
+import com.google.gerrit.extensions.webui.ParentWebLink;
 import com.google.gerrit.extensions.webui.PatchSetWebLink;
 import com.google.gerrit.extensions.webui.ProjectWebLink;
 import com.google.gerrit.lifecycle.LifecycleModule;
@@ -34,17 +35,14 @@
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
 import com.google.inject.TypeLiteral;
-
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-
 import java.net.InetAddress;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.List;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 
 class Module extends LifecycleModule {
   @Override
@@ -52,6 +50,7 @@
     DynamicSet.bind(binder(), BranchWebLink.class).to(GitilesWeblinks.class);
     DynamicSet.bind(binder(), FileHistoryWebLink.class).to(GitilesWeblinks.class);
     DynamicSet.bind(binder(), FileWebLink.class).to(GitilesWeblinks.class);
+    DynamicSet.bind(binder(), ParentWebLink.class).to(GitilesWeblinks.class);
     DynamicSet.bind(binder(), PatchSetWebLink.class).to(GitilesWeblinks.class);
     DynamicSet.bind(binder(), ProjectWebLink.class).to(GitilesWeblinks.class);
     bind(GitilesAccess.Factory.class).to(GerritGitilesAccess.Factory.class);
@@ -60,7 +59,8 @@
   }
 
   @Provides
-  GitilesUrls getGitilesUrls(@GerritServerConfig Config gerritConfig,
+  GitilesUrls getGitilesUrls(
+      @GerritServerConfig Config gerritConfig,
       @Nullable @CanonicalWebUrl String gerritUrl,
       @SshAdvertisedAddresses List<String> advertisedSshAddresses)
       throws MalformedURLException, UnknownHostException {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
index f47d7c0..4b08996 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/Resolver.java
@@ -21,20 +21,16 @@
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-
+import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.ServiceMayNotContinueException;
 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
 
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-
 class Resolver implements RepositoryResolver<HttpServletRequest> {
-  private static final String NAME_KEY_ATTRIBUTE = Resolver.class.getName()
-      + "/NameKey";
+  private static final String NAME_KEY_ATTRIBUTE = Resolver.class.getName() + "/NameKey";
   private final Provider<CurrentUser> userProvider;
 
   static Project.NameKey getNameKey(HttpServletRequest req) {
@@ -44,8 +40,7 @@
   private final FilteredRepository.Factory repoFactory;
 
   @Inject
-  Resolver(FilteredRepository.Factory repoFactory,
-      Provider<CurrentUser> userProvider) {
+  Resolver(FilteredRepository.Factory repoFactory, Provider<CurrentUser> userProvider) {
     this.repoFactory = repoFactory;
     this.userProvider = userProvider;
   }
@@ -53,10 +48,14 @@
   @Override
   public Repository open(HttpServletRequest req, String name)
       throws RepositoryNotFoundException, ServiceMayNotContinueException,
-      ServiceNotAuthorizedException {
+          ServiceNotAuthorizedException {
     Project.NameKey oldName = getNameKey(req);
-    checkState(oldName == null, "Resolved multiple repositories on %s: %s, %s",
-        req.getRequestURL(), oldName, name);
+    checkState(
+        oldName == null,
+        "Resolved multiple repositories on %s: %s, %s",
+        req.getRequestURL(),
+        oldName,
+        name);
     Project.NameKey nameKey = new Project.NameKey(name);
     req.setAttribute(NAME_KEY_ATTRIBUTE, nameKey);
     try {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
index e14454f..40baabd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/SetContextClassLoader.java
@@ -15,9 +15,7 @@
 package com.googlesource.gerrit.plugins.gitiles;
 
 import com.google.inject.Singleton;
-
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -29,12 +27,11 @@
 public class SetContextClassLoader implements Filter {
 
   @Override
-  public void init(FilterConfig arg0) throws ServletException {
-  }
+  public void init(FilterConfig arg0) throws ServletException {}
 
   @Override
-  public void doFilter(ServletRequest request, ServletResponse response,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+      throws IOException, ServletException {
     Thread t = Thread.currentThread();
     ClassLoader old = t.getContextClassLoader();
     try {
@@ -46,6 +43,5 @@
   }
 
   @Override
-  public void destroy() {
-  }
+  public void destroy() {}
 }
diff --git a/src/main/resources/+Documentation/build.md b/src/main/resources/+Documentation/build.md
index 46d0f53..7b18329 100644
--- a/src/main/resources/+Documentation/build.md
+++ b/src/main/resources/+Documentation/build.md
@@ -1,74 +1,40 @@
 Build
 =====
 
-This plugin can be built with Buck.
+This plugin is built with Bazel.
 
-Buck
-----
+Clone (or link) this plugin to the `plugins` directory of Gerrit's source tree.
 
-Two build modes are supported: Standalone and in Gerrit tree.
-The standalone build mode is recommended, as this mode doesn't require
-the Gerrit tree to exist locally.
-
-
-### Build standalone
-
-Clone bucklets library:
+Put the external dependency Bazel build file into the Gerrit /plugins directory,
+replacing the existing empty one.
 
 ```
-  git clone https://gerrit.googlesource.com/bucklets
-
-```
-and link it to gitiles plugin directory:
-
-```
-  cd gitiles && ln -s ../bucklets .
+  cd gerrit/plugins
+  rm external_plugin_deps.bzl
+  ln -s gitiles/external_plugin_deps.bzl .
 ```
 
-Add link to the .buckversion file:
+Then issue
 
 ```
-  cd gitiles && ln -s bucklets/buckversion .buckversion
+  cd ..
+  bazel build plugins/gitiles
 ```
 
-Add link to the .watchmanconfig file:
-
-```
-  cd gitiles && ln -s bucklets/watchmanconfig .watchmanconfig
-```
-
-To build the plugin, issue the following command:
-
-```
-  buck build plugin
-```
+in the root of Gerrit's source tree to build
 
 The output is created in
 
 ```
-  buck-out/gen/gitiles.jar
+  bazel-genfiles/plugins/gitiles/gitiles.jar
 ```
 
-### Build in Gerrit tree
-
-Clone or link this plugin to the plugins directory of Gerrit's source
-tree, and issue the command:
-
-```
-  buck build plugins/gitiles
-```
-
-The output is created in
-
-```
-  buck-out/gen/plugins/gitiles/gitiles/gitiles.jar
-```
-
-This project can be imported into the Eclipse IDE:
+This project can be imported into the Eclipse IDE. Add the plugin name to the
+`CUSTOM_PLUGINS` set in Gerrit core in `tools/bzl/plugins.bzl`, and execute:
 
 ```
   ./tools/eclipse/project.py
 ```
 
 How to build the Gerrit Plugin API is described in the [Gerrit
-documentation](../../../Documentation/dev-buck.html#_extension_and_plugin_api_jar_files).
+documentation](../../../Documentation/dev-bazel.html#_extension_and_plugin_api_jar_files).
diff --git a/src/main/resources/+Documentation/config.md b/src/main/resources/+Documentation/config.md
index c5e9b54..abb6b71 100644
--- a/src/main/resources/+Documentation/config.md
+++ b/src/main/resources/+Documentation/config.md
@@ -30,9 +30,14 @@
 to the gitiles plugin can also be configured.
 
 The name of the link that appears in Gerrit can be configured with
-`gerrit.linkname`.
+`gerrit.linkname`. Defaults to `browse` if not set.
+
+The link frame target name can be configured with `gerrit.target`. Valid values
+are defined in the [W3C HTML Specification](https://www.w3.org/TR/1999/REC-html401-19991224/types.html#type-frame-target).
+Defaults to `_blank` if not set.
 
 ```
   [gerrit]
-    linkname = browse
+    linkname = gitiles
+    target = _self
 ```
