Gitiles: Implement Buck driven build

Until extension system is released by Buck team [1], factor out
existing Buck building blocks as Bucklets in standalone git
repository and reuse it as Git submodule to implement Buck driven
build [2].

To build gitiles `gitiles` target is used:

  buck build gitiles

To build servlet, sources and javadoc in addition, `all` target is used:

  buck build all

that produces:

  buck-out/gen/gitiles.war
  buck-out/gen/servlet.jar
  buck-out/gen/src.jar
  buck-out/gen/javadoc.jar

To execute the tests:

  buck test --all

To generate eclipse project:

  bucklets/tools/eclipse.py

To fetch sources for all dependent libraries too:

  bucklets/tools/eclipse.py --src

To install gitiles-servlet into local Maven repository:

  buck build mvn_install

To deploy gitiles-servlet into remote Maven repository:

  buck build mvn_deploy

[1] http://stackoverflow.com/questions/16681527/buck-vs-gradle-pros-and-cons-for-android-build-systems
[2] https://gerrit.googlesource.com/bucklets

Change-Id: Ib824dac6423d69c298f9c30ed7a0c05b4d6447c0
diff --git a/gitiles-dev/BUCK b/gitiles-dev/BUCK
new file mode 100644
index 0000000..b50f58b
--- /dev/null
+++ b/gitiles-dev/BUCK
@@ -0,0 +1,17 @@
+java_library(
+  name = 'dev',
+  srcs = glob(['src/main/java/**/*.java']),
+  deps = [
+    '//gitiles-servlet:servlet',
+    '//lib:guava',
+    '//lib/jgit:jgit',
+    '//lib/jgit:jgit-servlet',
+    '//lib/jetty:server',
+    '//lib/jetty:servlet',
+    '//lib/slf4j:slf4j-api',
+    '//lib/slf4j:slf4j-simple',
+    '//lib:servlet-api_3_0',
+    '//lib:soy',
+  ],
+  visibility = ['PUBLIC'],
+)
diff --git a/gitiles-dev/pom.xml b/gitiles-dev/pom.xml
deleted file mode 100644
index e89732a..0000000
--- a/gitiles-dev/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright 2012 Google Inc. All Rights Reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>com.google.gitiles</groupId>
-    <artifactId>gitiles-parent</artifactId>
-    <version>1.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>gitiles-dev</artifactId>
-  <packaging>jar</packaging>
-  <name>Gitiles - Development</name>
-
-  <description>
-    Gitiles running with an embedded Jetty server.
-  </description>
-
-  <properties>
-    <jettyVersion>8.1.7.v20120910</jettyVersion>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.gitiles</groupId>
-      <artifactId>gitiles-servlet</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.eclipse.jetty.orbit</groupId>
-      <artifactId>javax.servlet</artifactId>
-      <!-- The bulk of Gitiles is designed to compile and run against Servlet API
-        2.5, but the embedded Jetty 8 in this module only requires Servlet API
-        3.0. -->
-      <version>3.0.0.v201112011016</version>
-      <scope>compile</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-servlet</artifactId>
-      <version>${jettyVersion}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.eclipse.jetty</groupId>
-      <artifactId>jetty-server</artifactId>
-      <version>${jettyVersion}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <version>${slf4jVersion}</version>
-      <scope>runtime</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>1.7.1</version>
-        <configuration>
-          <transformers>
-            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-              <mainClass>com.google.gitiles.dev.Main</mainClass>
-            </transformer>
-          </transformers>
-          <createDependencyReducedPom>false</createDependencyReducedPom>
-          <filters>
-            <filter>
-              <artifact>*:*</artifact>
-              <excludes>
-                <exclude>META-INF/*.SF</exclude>
-                <exclude>META-INF/*.DSA</exclude>
-                <exclude>META-INF/*.RSA</exclude>
-              </excludes>
-            </filter>
-          </filters>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
index 273873d..c32cd8e 100644
--- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
+++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -110,9 +110,9 @@
       throw badSourceRoot(targetUri);
     }
     String targetPath = targetUri.getPath();
-    // targetPath is an arbitrary path under gitiles-dev/target in the standard
-    // Maven package layout.
-    int targetIndex = targetPath.lastIndexOf("gitiles-dev/target/");
+    // targetPath is an arbitrary path under buck-out/ in our Buck package
+    // layout.
+    int targetIndex = targetPath.lastIndexOf("buck-out/");
     if (targetIndex < 0) {
       throw badSourceRoot(targetUri);
     }