[etcd] Update to 0.4.6 from https://github.com/projectatomic/etcd-package - resolves: #1047194

Jan Chaloupka jchaloup at fedoraproject.org
Mon Sep 22 11:14:20 UTC 2014


commit 88090db2d774d2b34af3a6f767374d499987ad64
Author: Jan Chaloupka <jchaloup at redhat.com>
Date:   Mon Sep 22 13:11:31 2014 +0200

    Update to 0.4.6 from https://github.com/projectatomic/etcd-package
    - resolves: #1047194

 .gitignore                                         |    3 +-
 0001-De-bundle-third_party.patch                   | 1405 ++++++++++++++++++++
 ...001-feat-activation-add-socket-activation.patch |  172 ---
 etcd-0002-Switch-to-goraft-raft.patch              |  124 --
 etcd.conf                                          |   34 +
 etcd.socket                                        |    9 -
 etcd.spec                                          |  106 ++-
 sources                                            |    2 +-
 8 files changed, 1529 insertions(+), 326 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index b359a9a..e194d9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-/etcd-v0.1.1.tar.gz
-/etcd-v0.1.2.tar.gz
+/etcd-0.4.6.tar.gz
diff --git a/0001-De-bundle-third_party.patch b/0001-De-bundle-third_party.patch
new file mode 100644
index 0000000..57230f7
--- /dev/null
+++ b/0001-De-bundle-third_party.patch
@@ -0,0 +1,1405 @@
+From 7fed1d8e85661bfa62b347ce25862fe37a46e4ea Mon Sep 17 00:00:00 2001
+From: Colin Walters <walters at verbum.org>
+Date: Thu, 17 Jul 2014 13:05:39 -0400
+Subject: [PATCH] De-bundle third_party
+
+---
+ config/config.go                                                    | 2 +-
+ config/config_test.go                                               | 4 ++--
+ etcd/etcd.go                                                        | 4 ++--
+ log/log.go                                                          | 2 +-
+ metrics/metrics.go                                                  | 2 +-
+ metrics/nil.go                                                      | 2 +-
+ metrics/standard.go                                                 | 2 +-
+ mod/leader/v2/delete_handler.go                                     | 2 +-
+ mod/leader/v2/get_handler.go                                        | 2 +-
+ mod/leader/v2/handler.go                                            | 2 +-
+ mod/leader/v2/set_handler.go                                        | 2 +-
+ mod/lock/v2/acquire_handler.go                                      | 2 +-
+ mod/lock/v2/get_index_handler.go                                    | 2 +-
+ mod/lock/v2/handler.go                                              | 2 +-
+ mod/lock/v2/release_handler.go                                      | 2 +-
+ mod/lock/v2/renew_handler.go                                        | 2 +-
+ mod/lock/v2/tests/mod_lock_test.go                                  | 2 +-
+ mod/mod.go                                                          | 2 +-
+ server/peer_server.go                                               | 2 +-
+ server/peer_server_handlers.go                                      | 2 +-
+ server/server.go                                                    | 2 +-
+ server/transporter.go                                               | 2 +-
+ server/v1/delete_key_handler.go                                     | 2 +-
+ server/v1/get_key_handler.go                                        | 2 +-
+ server/v1/set_key_handler.go                                        | 2 +-
+ server/v1/tests/delete_handler_test.go                              | 2 +-
+ server/v1/tests/get_handler_test.go                                 | 2 +-
+ server/v1/tests/put_handler_test.go                                 | 2 +-
+ server/v1/watch_key_handler.go                                      | 2 +-
+ server/v2/delete_handler.go                                         | 2 +-
+ server/v2/get_handler.go                                            | 2 +-
+ server/v2/post_handler.go                                           | 2 +-
+ server/v2/put_handler.go                                            | 2 +-
+ server/v2/tests/delete_handler_test.go                              | 2 +-
+ server/v2/tests/get_handler_test.go                                 | 2 +-
+ server/v2/tests/post_handler_test.go                                | 2 +-
+ server/v2/tests/put_handler_test.go                                 | 2 +-
+ store/stats_test.go                                                 | 2 +-
+ store/store_test.go                                                 | 2 +-
+ tests/functional/cluster_config_test.go                             | 2 +-
+ tests/functional/discovery_test.go                                  | 2 +-
+ tests/functional/kill_leader_test.go                                | 4 ++--
+ tests/functional/multi_node_kill_all_and_recovery_test.go           | 2 +-
+ tests/functional/remove_node_test.go                                | 2 +-
+ tests/functional/standby_test.go                                    | 2 +-
+ tests/functional/v1_migration_test.go                               | 2 +-
+ third_party/code.google.com/p/gogoprotobuf/proto/all_test.go        | 2 +-
+ third_party/code.google.com/p/gogoprotobuf/proto/clone_test.go      | 2 +-
+ third_party/code.google.com/p/gogoprotobuf/proto/equal_test.go      | 2 +-
+ third_party/code.google.com/p/gogoprotobuf/proto/lib.go             | 4 ++--
+ third_party/code.google.com/p/gogoprotobuf/proto/size_test.go       | 2 +-
+ .../code.google.com/p/gogoprotobuf/proto/testdata/test.pb.go        | 2 +-
+ .../code.google.com/p/gogoprotobuf/proto/text_parser_test.go        | 2 +-
+ third_party/code.google.com/p/gogoprotobuf/proto/text_test.go       | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/all_test.go          | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/clone_test.go        | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/equal_test.go        | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/size_test.go         | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/testdata/test.pb.go  | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/text_parser_test.go  | 2 +-
+ third_party/code.google.com/p/goprotobuf/proto/text_test.go         | 2 +-
+ third_party/github.com/BurntSushi/toml/_examples/example.go         | 2 +-
+ third_party/github.com/BurntSushi/toml/toml-test-encoder/main.go    | 2 +-
+ third_party/github.com/BurntSushi/toml/toml-test-go/main.go         | 2 +-
+ third_party/github.com/BurntSushi/toml/tomlv/main.go                | 2 +-
+ third_party/github.com/coreos/go-etcd/etcd/client_test.go           | 2 +-
+ third_party/github.com/coreos/go-log/log/logger.go                  | 2 +-
+ third_party/github.com/coreos/go-log/log/sinks_unix.go              | 2 +-
+ third_party/github.com/goraft/raft/append_entries.go                | 2 +-
+ third_party/github.com/goraft/raft/log_entry.go                     | 2 +-
+ .../github.com/goraft/raft/protobuf/append_entries_request.pb.go    | 6 +++---
+ .../github.com/goraft/raft/protobuf/append_entries_responses.pb.go  | 6 +++---
+ third_party/github.com/goraft/raft/protobuf/log_entry.pb.go         | 6 +++---
+ .../github.com/goraft/raft/protobuf/request_vote_request.pb.go      | 6 +++---
+ .../github.com/goraft/raft/protobuf/request_vote_responses.pb.go    | 6 +++---
+ .../github.com/goraft/raft/protobuf/snapshot_recovery_request.pb.go | 6 +++---
+ .../goraft/raft/protobuf/snapshot_recovery_response.pb.go           | 6 +++---
+ third_party/github.com/goraft/raft/protobuf/snapshot_request.pb.go  | 6 +++---
+ third_party/github.com/goraft/raft/protobuf/snapshot_response.pb.go | 6 +++---
+ third_party/github.com/goraft/raft/request_vote.go                  | 2 +-
+ third_party/github.com/goraft/raft/snapshot.go                      | 2 +-
+ third_party/github.com/gorilla/mux/mux.go                           | 2 +-
+ third_party/github.com/gorilla/mux/mux_test.go                      | 2 +-
+ .../rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go          | 2 +-
+ .../rcrowley/go-metrics/cmd/metrics-example/metrics-example.go      | 2 +-
+ third_party/github.com/rcrowley/go-metrics/librato/librato.go       | 2 +-
+ third_party/github.com/rcrowley/go-metrics/stathat/stathat.go       | 2 +-
+ 87 files changed, 109 insertions(+), 109 deletions(-)
+
+diff --git a/config/config.go b/config/config.go
+index b4cd8c7..1204bbc 100644
+--- a/config/config.go
++++ b/config/config.go
+@@ -14,7 +14,7 @@ import (
+ 	"strings"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
++	"github.com/BurntSushi/toml"
+ 
+ 	"github.com/coreos/etcd/log"
+ 	ustrings "github.com/coreos/etcd/pkg/strings"
+diff --git a/config/config_test.go b/config/config_test.go
+index 0b45501..2fceb95 100644
+--- a/config/config_test.go
++++ b/config/config_test.go
+@@ -5,8 +5,8 @@ import (
+ 	"os"
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/BurntSushi/toml"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a configuration can be deserialized from TOML.
+diff --git a/etcd/etcd.go b/etcd/etcd.go
+index b23fa3d..f9a011a 100644
+--- a/etcd/etcd.go
++++ b/etcd/etcd.go
+@@ -26,9 +26,9 @@ import (
+ 	"time"
+ 
+ 	goetcd "github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	golog "github.com/coreos/etcd/third_party/github.com/coreos/go-log/log"
++	golog "github.com/coreos/go-log/log"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	httpclient "github.com/coreos/etcd/third_party/github.com/mreiferson/go-httpclient"
++	httpclient "github.com/mreiferson/go-httpclient"
+ 
+ 	"github.com/coreos/etcd/config"
+ 	ehttp "github.com/coreos/etcd/http"
+diff --git a/log/log.go b/log/log.go
+index 82a2dec..aa9380a 100644
+--- a/log/log.go
++++ b/log/log.go
+@@ -3,7 +3,7 @@ package log
+ import (
+ 	"os"
+ 
+-	golog "github.com/coreos/etcd/third_party/github.com/coreos/go-log/log"
++	golog "github.com/coreos/go-log/log"
+ )
+ 
+ // The Verbose flag turns on verbose logging.
+diff --git a/metrics/metrics.go b/metrics/metrics.go
+index aaccb6b..6998aed 100644
+--- a/metrics/metrics.go
++++ b/metrics/metrics.go
+@@ -7,7 +7,7 @@ package metrics
+ import (
+ 	"io"
+ 
+-	gometrics "github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	gometrics "github.com/rcrowley/go-metrics"
+ )
+ 
+ type Timer gometrics.Timer
+diff --git a/metrics/nil.go b/metrics/nil.go
+index de56ec5..b24a022 100644
+--- a/metrics/nil.go
++++ b/metrics/nil.go
+@@ -3,7 +3,7 @@ package metrics
+ import (
+ 	"io"
+ 
+-	gometrics "github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	gometrics "github.com/rcrowley/go-metrics"
+ )
+ 
+ type nilBucket struct{}
+diff --git a/metrics/standard.go b/metrics/standard.go
+index 4d2f6e5..42277dd 100644
+--- a/metrics/standard.go
++++ b/metrics/standard.go
+@@ -6,7 +6,7 @@ import (
+ 	"sync"
+ 	"time"
+ 
+-	gometrics "github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	gometrics "github.com/rcrowley/go-metrics"
+ )
+ 
+ const (
+diff --git a/mod/leader/v2/delete_handler.go b/mod/leader/v2/delete_handler.go
+index 411af50..eb192e2 100644
+--- a/mod/leader/v2/delete_handler.go
++++ b/mod/leader/v2/delete_handler.go
+@@ -7,7 +7,7 @@ import (
+ 	"net/url"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // deleteHandler remove a given leader.
+diff --git a/mod/leader/v2/get_handler.go b/mod/leader/v2/get_handler.go
+index fff0c83..7a96d0e 100644
+--- a/mod/leader/v2/get_handler.go
++++ b/mod/leader/v2/get_handler.go
+@@ -5,7 +5,7 @@ import (
+ 	"io"
+ 	"net/http"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // getHandler retrieves the current leader.
+diff --git a/mod/leader/v2/handler.go b/mod/leader/v2/handler.go
+index 7e9108b..192d424 100644
+--- a/mod/leader/v2/handler.go
++++ b/mod/leader/v2/handler.go
+@@ -4,7 +4,7 @@ import (
+ 	"net/http"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // prefix is appended to the lock's prefix since the leader mod uses the lock mod.
+diff --git a/mod/leader/v2/set_handler.go b/mod/leader/v2/set_handler.go
+index 232a0bd..c66b079 100644
+--- a/mod/leader/v2/set_handler.go
++++ b/mod/leader/v2/set_handler.go
+@@ -7,7 +7,7 @@ import (
+ 	"net/url"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // setHandler attempts to set the current leader.
+diff --git a/mod/lock/v2/acquire_handler.go b/mod/lock/v2/acquire_handler.go
+index 00e2a48..c631d60 100644
+--- a/mod/lock/v2/acquire_handler.go
++++ b/mod/lock/v2/acquire_handler.go
+@@ -10,7 +10,7 @@ import (
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // acquireHandler attempts to acquire a lock on the given key.
+diff --git a/mod/lock/v2/get_index_handler.go b/mod/lock/v2/get_index_handler.go
+index c03dfea..ac8bdf2 100644
+--- a/mod/lock/v2/get_index_handler.go
++++ b/mod/lock/v2/get_index_handler.go
+@@ -5,7 +5,7 @@ import (
+ 	"path"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // getIndexHandler retrieves the current lock index.
+diff --git a/mod/lock/v2/handler.go b/mod/lock/v2/handler.go
+index 313e6ea..f53772c 100644
+--- a/mod/lock/v2/handler.go
++++ b/mod/lock/v2/handler.go
+@@ -5,7 +5,7 @@ import (
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ const prefix = "/_etcd/mod/lock"
+diff --git a/mod/lock/v2/release_handler.go b/mod/lock/v2/release_handler.go
+index 0a70a5a..1e68134 100644
+--- a/mod/lock/v2/release_handler.go
++++ b/mod/lock/v2/release_handler.go
+@@ -5,7 +5,7 @@ import (
+ 	"path"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // releaseLockHandler deletes the lock.
+diff --git a/mod/lock/v2/renew_handler.go b/mod/lock/v2/renew_handler.go
+index 5a92289..64a0eae 100644
+--- a/mod/lock/v2/renew_handler.go
++++ b/mod/lock/v2/renew_handler.go
+@@ -6,7 +6,7 @@ import (
+ 	"strconv"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // renewLockHandler attempts to update the TTL on an existing lock.
+diff --git a/mod/lock/v2/tests/mod_lock_test.go b/mod/lock/v2/tests/mod_lock_test.go
+index e338420..1239257 100644
+--- a/mod/lock/v2/tests/mod_lock_test.go
++++ b/mod/lock/v2/tests/mod_lock_test.go
+@@ -7,7 +7,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensure that a lock can be acquired and released.
+diff --git a/mod/mod.go b/mod/mod.go
+index 59358a0..82dfaa7 100644
+--- a/mod/mod.go
++++ b/mod/mod.go
+@@ -8,7 +8,7 @@ import (
+ 	"github.com/coreos/etcd/mod/dashboard"
+ 	leader2 "github.com/coreos/etcd/mod/leader/v2"
+ 	lock2 "github.com/coreos/etcd/mod/lock/v2"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ var ServeMux *http.Handler
+diff --git a/server/peer_server.go b/server/peer_server.go
+index efa7371..9042bcb 100644
+--- a/server/peer_server.go
++++ b/server/peer_server.go
+@@ -12,7 +12,7 @@ import (
+ 	"time"
+ 
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ 
+ 	"github.com/coreos/etcd/discovery"
+ 	etcdErr "github.com/coreos/etcd/error"
+diff --git a/server/peer_server_handlers.go b/server/peer_server_handlers.go
+index 2696956..301b403 100644
+--- a/server/peer_server_handlers.go
++++ b/server/peer_server_handlers.go
+@@ -7,7 +7,7 @@ import (
+ 	"time"
+ 
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/log"
+diff --git a/server/server.go b/server/server.go
+index 394a9bc..0017f0a 100644
+--- a/server/server.go
++++ b/server/server.go
+@@ -9,7 +9,7 @@ import (
+ 	"time"
+ 
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	ehttp "github.com/coreos/etcd/http"
+diff --git a/server/transporter.go b/server/transporter.go
+index 2e24c8a..5ebbbc0 100644
+--- a/server/transporter.go
++++ b/server/transporter.go
+@@ -11,7 +11,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/log"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	httpclient "github.com/coreos/etcd/third_party/github.com/mreiferson/go-httpclient"
++	httpclient "github.com/mreiferson/go-httpclient"
+ )
+ 
+ const (
+diff --git a/server/v1/delete_key_handler.go b/server/v1/delete_key_handler.go
+index fd14760..242ed69 100644
+--- a/server/v1/delete_key_handler.go
++++ b/server/v1/delete_key_handler.go
+@@ -3,7 +3,7 @@ package v1
+ import (
+ 	"net/http"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // Removes a key from the store.
+diff --git a/server/v1/get_key_handler.go b/server/v1/get_key_handler.go
+index 541480f..aaa4992 100644
+--- a/server/v1/get_key_handler.go
++++ b/server/v1/get_key_handler.go
+@@ -4,7 +4,7 @@ import (
+ 	"encoding/json"
+ 	"net/http"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // Retrieves the value for a given key.
+diff --git a/server/v1/set_key_handler.go b/server/v1/set_key_handler.go
+index fa27db2..d0cd6fc 100644
+--- a/server/v1/set_key_handler.go
++++ b/server/v1/set_key_handler.go
+@@ -6,7 +6,7 @@ import (
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/store"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // Sets the value for a given key.
+diff --git a/server/v1/tests/delete_handler_test.go b/server/v1/tests/delete_handler_test.go
+index 437e40e..d94c93f 100644
+--- a/server/v1/tests/delete_handler_test.go
++++ b/server/v1/tests/delete_handler_test.go
+@@ -8,7 +8,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a key is deleted.
+diff --git a/server/v1/tests/get_handler_test.go b/server/v1/tests/get_handler_test.go
+index 6e045f1..c102ff9 100644
+--- a/server/v1/tests/get_handler_test.go
++++ b/server/v1/tests/get_handler_test.go
+@@ -10,7 +10,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a value can be retrieve for a given key.
+diff --git a/server/v1/tests/put_handler_test.go b/server/v1/tests/put_handler_test.go
+index f7aeb2e..ec0b15c 100644
+--- a/server/v1/tests/put_handler_test.go
++++ b/server/v1/tests/put_handler_test.go
+@@ -9,7 +9,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a key is set to a given value.
+diff --git a/server/v1/watch_key_handler.go b/server/v1/watch_key_handler.go
+index 7d4d7ad..f4d0395 100644
+--- a/server/v1/watch_key_handler.go
++++ b/server/v1/watch_key_handler.go
+@@ -6,7 +6,7 @@ import (
+ 	"strconv"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ // Watches a given key prefix for changes.
+diff --git a/server/v2/delete_handler.go b/server/v2/delete_handler.go
+index 65024bd..a9f2a41 100644
+--- a/server/v2/delete_handler.go
++++ b/server/v2/delete_handler.go
+@@ -5,7 +5,7 @@ import (
+ 	"strconv"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ func DeleteHandler(w http.ResponseWriter, req *http.Request, s Server) error {
+diff --git a/server/v2/get_handler.go b/server/v2/get_handler.go
+index ae6b758..07a1eb3 100644
+--- a/server/v2/get_handler.go
++++ b/server/v2/get_handler.go
+@@ -10,7 +10,7 @@ import (
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/log"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ func GetHandler(w http.ResponseWriter, req *http.Request, s Server) error {
+diff --git a/server/v2/post_handler.go b/server/v2/post_handler.go
+index 40c9f1f..b3e8de7 100644
+--- a/server/v2/post_handler.go
++++ b/server/v2/post_handler.go
+@@ -5,7 +5,7 @@ import (
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/store"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ func PostHandler(w http.ResponseWriter, req *http.Request, s Server) error {
+diff --git a/server/v2/put_handler.go b/server/v2/put_handler.go
+index aa912a2..7ddaa28 100644
+--- a/server/v2/put_handler.go
++++ b/server/v2/put_handler.go
+@@ -8,7 +8,7 @@ import (
+ 	etcdErr "github.com/coreos/etcd/error"
+ 	"github.com/coreos/etcd/store"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft"
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/mux"
++	"github.com/gorilla/mux"
+ )
+ 
+ func PutHandler(w http.ResponseWriter, req *http.Request, s Server) error {
+diff --git a/server/v2/tests/delete_handler_test.go b/server/v2/tests/delete_handler_test.go
+index d34daf7..dc2cfdb 100644
+--- a/server/v2/tests/delete_handler_test.go
++++ b/server/v2/tests/delete_handler_test.go
+@@ -8,7 +8,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a key is deleted.
+diff --git a/server/v2/tests/get_handler_test.go b/server/v2/tests/get_handler_test.go
+index 23a5822..01a4e33 100644
+--- a/server/v2/tests/get_handler_test.go
++++ b/server/v2/tests/get_handler_test.go
+@@ -9,7 +9,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a value can be retrieve for a given key.
+diff --git a/server/v2/tests/post_handler_test.go b/server/v2/tests/post_handler_test.go
+index cb143e1..6b9ad07 100644
+--- a/server/v2/tests/post_handler_test.go
++++ b/server/v2/tests/post_handler_test.go
+@@ -7,7 +7,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures a unique value is added to the key's children.
+diff --git a/server/v2/tests/put_handler_test.go b/server/v2/tests/put_handler_test.go
+index 318e71a..7baa6bb 100644
+--- a/server/v2/tests/put_handler_test.go
++++ b/server/v2/tests/put_handler_test.go
+@@ -9,7 +9,7 @@ import (
+ 
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensures that a key is set to a given value.
+diff --git a/store/stats_test.go b/store/stats_test.go
+index d667476..aa59704 100644
+--- a/store/stats_test.go
++++ b/store/stats_test.go
+@@ -4,7 +4,7 @@ import (
+ 	"testing"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensure that a successful Get is recorded in the stats.
+diff --git a/store/store_test.go b/store/store_test.go
+index ddd9afb..30dd325 100644
+--- a/store/store_test.go
++++ b/store/store_test.go
+@@ -21,7 +21,7 @@ import (
+ 	"time"
+ 
+ 	etcdErr "github.com/coreos/etcd/error"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensure that the store can retrieve an existing value.
+diff --git a/tests/functional/cluster_config_test.go b/tests/functional/cluster_config_test.go
+index 09c1c10..0d5c80a 100644
+--- a/tests/functional/cluster_config_test.go
++++ b/tests/functional/cluster_config_test.go
+@@ -8,7 +8,7 @@ import (
+ 	"time"
+ 
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensure that the cluster configuration can be updated.
+diff --git a/tests/functional/discovery_test.go b/tests/functional/discovery_test.go
+index a769244..1c383ca 100644
+--- a/tests/functional/discovery_test.go
++++ b/tests/functional/discovery_test.go
+@@ -11,7 +11,7 @@ import (
+ 	"testing"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ 
+ 	"github.com/coreos/etcd/server"
+ 	etcdtest "github.com/coreos/etcd/tests"
+diff --git a/tests/functional/kill_leader_test.go b/tests/functional/kill_leader_test.go
+index 7c18d46..65215cb 100644
+--- a/tests/functional/kill_leader_test.go
++++ b/tests/functional/kill_leader_test.go
+@@ -12,7 +12,7 @@ import (
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // This test will kill the current leader and wait for the etcd cluster to elect a new leader for 200 times.
+@@ -71,7 +71,7 @@ func TestKillLeader(t *testing.T) {
+ // It will print out the election time and the average election time.
+ // It runs in a cluster with standby nodes.
+ func TestKillLeaderWithStandbys(t *testing.T) {
+-	// https://github.com/goraft/raft/issues/222
++	// https://github.com/coreos/etcd/third_party/github.com/goraft/raft/issues/222
+ 	t.Skip("stuck on raft issue")
+ 
+ 	procAttr := new(os.ProcAttr)
+diff --git a/tests/functional/multi_node_kill_all_and_recovery_test.go b/tests/functional/multi_node_kill_all_and_recovery_test.go
+index a5f1e1e..88350b1 100644
+--- a/tests/functional/multi_node_kill_all_and_recovery_test.go
++++ b/tests/functional/multi_node_kill_all_and_recovery_test.go
+@@ -11,7 +11,7 @@ import (
+ 	"github.com/coreos/etcd/server"
+ 	"github.com/coreos/etcd/tests"
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Create a five nodes
+diff --git a/tests/functional/remove_node_test.go b/tests/functional/remove_node_test.go
+index c805211..b46077a 100644
+--- a/tests/functional/remove_node_test.go
++++ b/tests/functional/remove_node_test.go
+@@ -13,7 +13,7 @@ import (
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+ 
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // remove the node and node rejoin with previous log
+diff --git a/tests/functional/standby_test.go b/tests/functional/standby_test.go
+index b216ee3..5cad538 100644
+--- a/tests/functional/standby_test.go
++++ b/tests/functional/standby_test.go
+@@ -11,7 +11,7 @@ import (
+ 	"github.com/coreos/etcd/store"
+ 	"github.com/coreos/etcd/tests"
+ 	"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Create a full cluster and then change the active size.
+diff --git a/tests/functional/v1_migration_test.go b/tests/functional/v1_migration_test.go
+index 75aaebb..afaa7e7 100644
+--- a/tests/functional/v1_migration_test.go
++++ b/tests/functional/v1_migration_test.go
+@@ -11,7 +11,7 @@ import (
+ 	"time"
+ 
+ 	"github.com/coreos/etcd/tests"
+-	"github.com/coreos/etcd/third_party/github.com/stretchr/testify/assert"
++	"github.com/stretchr/testify/assert"
+ )
+ 
+ // Ensure that we can start a v2 node from the log of a v1 node.
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/all_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/all_test.go
+index 9a92588..2431ca2 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/all_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/all_test.go
+@@ -44,7 +44,7 @@ import (
+ 	"time"
+ 
+ 	. "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	. "code.google.com/p/gogoprotobuf/proto"
+ )
+ 
+ var globalO *Buffer
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/clone_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/clone_test.go
+index d4e0c90..10187c9 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/clone_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/clone_test.go
+@@ -34,7 +34,7 @@ package proto_test
+ import (
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 
+ 	pb "./testdata"
+ )
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/equal_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/equal_test.go
+index c80b385..d3535de 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/equal_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/equal_test.go
+@@ -35,7 +35,7 @@ import (
+ 	"testing"
+ 
+ 	pb "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	. "code.google.com/p/gogoprotobuf/proto"
+ )
+ 
+ // Four identical base messages.
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/lib.go b/third_party/code.google.com/p/gogoprotobuf/proto/lib.go
+index 29d5530..e70c0fd 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/lib.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/lib.go
+@@ -89,7 +89,7 @@
+ 
+ 		package example
+ 
+-		import "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++		import "code.google.com/p/gogoprotobuf/proto"
+ 
+ 		type FOO int32
+ 		const (
+@@ -168,7 +168,7 @@
+ 		import (
+ 			"log"
+ 
+-			"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++			"code.google.com/p/gogoprotobuf/proto"
+ 			"./example.pb"
+ 		)
+ 
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/size_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/size_test.go
+index 9743aef..484ed66 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/size_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/size_test.go
+@@ -36,7 +36,7 @@ import (
+ 	"testing"
+ 
+ 	pb "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	. "code.google.com/p/gogoprotobuf/proto"
+ )
+ 
+ var messageWithExtension1 = &pb.MyMessage{Count: Int32(7)}
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/testdata/test.pb.go b/third_party/code.google.com/p/gogoprotobuf/proto/testdata/test.pb.go
+index 7ddd89a..31996fc 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/testdata/test.pb.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/testdata/test.pb.go
+@@ -36,7 +36,7 @@ It has these top-level messages:
+ */
+ package testdata
+ 
+-import proto "github.com/coreos/etcd/third_party/github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/text_parser_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/text_parser_test.go
+index 688417e..b62d25b 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/text_parser_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/text_parser_test.go
+@@ -37,7 +37,7 @@ import (
+ 	"testing"
+ 
+ 	. "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	. "code.google.com/p/gogoprotobuf/proto"
+ )
+ 
+ type UnmarshalTextTest struct {
+diff --git a/third_party/code.google.com/p/gogoprotobuf/proto/text_test.go b/third_party/code.google.com/p/gogoprotobuf/proto/text_test.go
+index 8c851bd..191f815 100644
+--- a/third_party/code.google.com/p/gogoprotobuf/proto/text_test.go
++++ b/third_party/code.google.com/p/gogoprotobuf/proto/text_test.go
+@@ -39,7 +39,7 @@ import (
+ 	"strings"
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 
+ 	pb "./testdata"
+ )
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/all_test.go b/third_party/code.google.com/p/goprotobuf/proto/all_test.go
+index 3de6335..9a14f8e 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/all_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/all_test.go
+@@ -44,7 +44,7 @@ import (
+ 	"time"
+ 
+ 	. "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	. "code.google.com/p/goprotobuf/proto"
+ )
+ 
+ var globalO *Buffer
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/clone_test.go b/third_party/code.google.com/p/goprotobuf/proto/clone_test.go
+index 1d1e144..c36ac55 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/clone_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/clone_test.go
+@@ -34,7 +34,7 @@ package proto_test
+ import (
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	"code.google.com/p/goprotobuf/proto"
+ 
+ 	pb "./testdata"
+ )
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/equal_test.go b/third_party/code.google.com/p/goprotobuf/proto/equal_test.go
+index 0ab4c9a..d2e351e 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/equal_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/equal_test.go
+@@ -35,7 +35,7 @@ import (
+ 	"testing"
+ 
+ 	pb "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	. "code.google.com/p/goprotobuf/proto"
+ )
+ 
+ // Four identical base messages.
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/size_test.go b/third_party/code.google.com/p/goprotobuf/proto/size_test.go
+index 04464b9..dfbcf8d 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/size_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/size_test.go
+@@ -36,7 +36,7 @@ import (
+ 	"testing"
+ 
+ 	pb "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	. "code.google.com/p/goprotobuf/proto"
+ )
+ 
+ var messageWithExtension1 = &pb.MyMessage{Count: Int32(7)}
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/testdata/test.pb.go b/third_party/code.google.com/p/goprotobuf/proto/testdata/test.pb.go
+index f9fde79..00f9f57 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/testdata/test.pb.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/testdata/test.pb.go
+@@ -4,7 +4,7 @@
+ 
+ package testdata
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++import proto "code.google.com/p/goprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/text_parser_test.go b/third_party/code.google.com/p/goprotobuf/proto/text_parser_test.go
+index 597f892..ff7fe1b 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/text_parser_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/text_parser_test.go
+@@ -37,7 +37,7 @@ import (
+ 	"testing"
+ 
+ 	. "./testdata"
+-	. "github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	. "code.google.com/p/goprotobuf/proto"
+ )
+ 
+ type UnmarshalTextTest struct {
+diff --git a/third_party/code.google.com/p/goprotobuf/proto/text_test.go b/third_party/code.google.com/p/goprotobuf/proto/text_test.go
+index 300a7f1..bab2edd 100644
+--- a/third_party/code.google.com/p/goprotobuf/proto/text_test.go
++++ b/third_party/code.google.com/p/goprotobuf/proto/text_test.go
+@@ -39,7 +39,7 @@ import (
+ 	"strings"
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/goprotobuf/proto"
++	"code.google.com/p/goprotobuf/proto"
+ 
+ 	pb "./testdata"
+ )
+diff --git a/third_party/github.com/BurntSushi/toml/_examples/example.go b/third_party/github.com/BurntSushi/toml/_examples/example.go
+index c320ac6..f4606a1 100644
+--- a/third_party/github.com/BurntSushi/toml/_examples/example.go
++++ b/third_party/github.com/BurntSushi/toml/_examples/example.go
+@@ -4,7 +4,7 @@ import (
+ 	"fmt"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
++	"github.com/BurntSushi/toml"
+ )
+ 
+ type tomlConfig struct {
+diff --git a/third_party/github.com/BurntSushi/toml/toml-test-encoder/main.go b/third_party/github.com/BurntSushi/toml/toml-test-encoder/main.go
+index 7066b2f..b7897e7 100644
+--- a/third_party/github.com/BurntSushi/toml/toml-test-encoder/main.go
++++ b/third_party/github.com/BurntSushi/toml/toml-test-encoder/main.go
+@@ -9,7 +9,7 @@ import (
+ 	"strconv"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
++	"github.com/BurntSushi/toml"
+ )
+ 
+ func init() {
+diff --git a/third_party/github.com/BurntSushi/toml/toml-test-go/main.go b/third_party/github.com/BurntSushi/toml/toml-test-go/main.go
+index afd60c1..76a05ae 100644
+--- a/third_party/github.com/BurntSushi/toml/toml-test-go/main.go
++++ b/third_party/github.com/BurntSushi/toml/toml-test-go/main.go
+@@ -9,7 +9,7 @@ import (
+ 	"path"
+ 	"time"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
++	"github.com/BurntSushi/toml"
+ )
+ 
+ func init() {
+diff --git a/third_party/github.com/BurntSushi/toml/tomlv/main.go b/third_party/github.com/BurntSushi/toml/tomlv/main.go
+index a5b22b1..a52086e 100644
+--- a/third_party/github.com/BurntSushi/toml/tomlv/main.go
++++ b/third_party/github.com/BurntSushi/toml/tomlv/main.go
+@@ -9,7 +9,7 @@ import (
+ 	"strings"
+ 	"text/tabwriter"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
++	"github.com/BurntSushi/toml"
+ )
+ 
+ var (
+diff --git a/third_party/github.com/coreos/go-etcd/etcd/client_test.go b/third_party/github.com/coreos/go-etcd/etcd/client_test.go
+index c245e47..7718f47 100644
+--- a/third_party/github.com/coreos/go-etcd/etcd/client_test.go
++++ b/third_party/github.com/coreos/go-etcd/etcd/client_test.go
+@@ -15,7 +15,7 @@ func TestSync(t *testing.T) {
+ 	fmt.Println("Make sure there are three nodes at 0.0.0.0:4001-4003")
+ 
+ 	// Explicit trailing slash to ensure this doesn't reproduce:
+-	// https://github.com/coreos/go-etcd/issues/82
++	// https://github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcdissues/82
+ 	c := NewClient([]string{"http://127.0.0.1:4001/"})
+ 
+ 	success := c.SyncCluster()
+diff --git a/third_party/github.com/coreos/go-log/log/logger.go b/third_party/github.com/coreos/go-log/log/logger.go
+index e8c200e..ff5a1d8 100644
+--- a/third_party/github.com/coreos/go-log/log/logger.go
++++ b/third_party/github.com/coreos/go-log/log/logger.go
+@@ -18,7 +18,7 @@ package log
+ // based on previous package by: Cong Ding <dinggnu at gmail.com>
+ 
+ import (
+-	"github.com/coreos/etcd/third_party/bitbucket.org/kardianos/osext"
++	"bitbucket.org/kardianos/osext"
+ 	"os"
+ 	"path"
+ 	"time"
+diff --git a/third_party/github.com/coreos/go-log/log/sinks_unix.go b/third_party/github.com/coreos/go-log/log/sinks_unix.go
+index 849c44c..0067a79 100644
+--- a/third_party/github.com/coreos/go-log/log/sinks_unix.go
++++ b/third_party/github.com/coreos/go-log/log/sinks_unix.go
+@@ -21,7 +21,7 @@ package log
+ 
+ import (
+ 	"fmt"
+-	"github.com/coreos/etcd/third_party/github.com/coreos/go-systemd/journal"
++	"github.com/coreos/go-systemd/journal"
+ 	"io"
+ 	"strings"
+ )
+diff --git a/third_party/github.com/goraft/raft/append_entries.go b/third_party/github.com/goraft/raft/append_entries.go
+index 92ac774..4d6c108 100644
+--- a/third_party/github.com/goraft/raft/append_entries.go
++++ b/third_party/github.com/goraft/raft/append_entries.go
+@@ -4,7 +4,7 @@ import (
+ 	"io"
+ 	"io/ioutil"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft/protobuf"
+ )
+ 
+diff --git a/third_party/github.com/goraft/raft/log_entry.go b/third_party/github.com/goraft/raft/log_entry.go
+index 0692ca8..1fbadc1 100644
+--- a/third_party/github.com/goraft/raft/log_entry.go
++++ b/third_party/github.com/goraft/raft/log_entry.go
+@@ -6,7 +6,7 @@ import (
+ 	"fmt"
+ 	"io"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft/protobuf"
+ )
+ 
+diff --git a/third_party/github.com/goraft/raft/protobuf/append_entries_request.pb.go b/third_party/github.com/goraft/raft/protobuf/append_entries_request.pb.go
+index d79e83e..c4e4932 100644
+--- a/third_party/github.com/goraft/raft/protobuf/append_entries_request.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/append_entries_request.pb.go
+@@ -21,14 +21,14 @@
+ */
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io1 "io"
+-import code_google_com_p_gogoprotobuf_proto2 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto2 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt3 "fmt"
+ import strings2 "strings"
+@@ -36,7 +36,7 @@ import reflect2 "reflect"
+ 
+ import fmt4 "fmt"
+ import strings3 "strings"
+-import code_google_com_p_gogoprotobuf_proto3 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto3 "code.google.com/p/gogoprotobuf/proto"
+ import sort1 "sort"
+ import strconv1 "strconv"
+ import reflect3 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/append_entries_responses.pb.go b/third_party/github.com/goraft/raft/protobuf/append_entries_responses.pb.go
+index 3591182..56778b1 100644
+--- a/third_party/github.com/goraft/raft/protobuf/append_entries_responses.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/append_entries_responses.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io2 "io"
+-import code_google_com_p_gogoprotobuf_proto4 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto4 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt6 "fmt"
+ import strings4 "strings"
+@@ -19,7 +19,7 @@ import reflect4 "reflect"
+ 
+ import fmt7 "fmt"
+ import strings5 "strings"
+-import code_google_com_p_gogoprotobuf_proto5 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto5 "code.google.com/p/gogoprotobuf/proto"
+ import sort2 "sort"
+ import strconv2 "strconv"
+ import reflect5 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/log_entry.pb.go b/third_party/github.com/goraft/raft/protobuf/log_entry.pb.go
+index adab85b..c969241 100644
+--- a/third_party/github.com/goraft/raft/protobuf/log_entry.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/log_entry.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io "io"
+-import code_google_com_p_gogoprotobuf_proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt "fmt"
+ import strings "strings"
+@@ -19,7 +19,7 @@ import reflect "reflect"
+ 
+ import fmt1 "fmt"
+ import strings1 "strings"
+-import code_google_com_p_gogoprotobuf_proto1 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto1 "code.google.com/p/gogoprotobuf/proto"
+ import sort "sort"
+ import strconv "strconv"
+ import reflect1 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/request_vote_request.pb.go b/third_party/github.com/goraft/raft/protobuf/request_vote_request.pb.go
+index 169e045..6548d6b 100644
+--- a/third_party/github.com/goraft/raft/protobuf/request_vote_request.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/request_vote_request.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io3 "io"
+-import code_google_com_p_gogoprotobuf_proto6 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto6 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt9 "fmt"
+ import strings6 "strings"
+@@ -19,7 +19,7 @@ import reflect6 "reflect"
+ 
+ import fmt10 "fmt"
+ import strings7 "strings"
+-import code_google_com_p_gogoprotobuf_proto7 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto7 "code.google.com/p/gogoprotobuf/proto"
+ import sort3 "sort"
+ import strconv3 "strconv"
+ import reflect7 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/request_vote_responses.pb.go b/third_party/github.com/goraft/raft/protobuf/request_vote_responses.pb.go
+index ddb3c86..3c6ae81 100644
+--- a/third_party/github.com/goraft/raft/protobuf/request_vote_responses.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/request_vote_responses.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io4 "io"
+-import code_google_com_p_gogoprotobuf_proto8 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto8 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt12 "fmt"
+ import strings8 "strings"
+@@ -19,7 +19,7 @@ import reflect8 "reflect"
+ 
+ import fmt13 "fmt"
+ import strings9 "strings"
+-import code_google_com_p_gogoprotobuf_proto9 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto9 "code.google.com/p/gogoprotobuf/proto"
+ import sort4 "sort"
+ import strconv4 "strconv"
+ import reflect9 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_request.pb.go b/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_request.pb.go
+index 34ef890..b05a555 100644
+--- a/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_request.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_request.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io5 "io"
+-import code_google_com_p_gogoprotobuf_proto10 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto10 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt15 "fmt"
+ import strings10 "strings"
+@@ -19,7 +19,7 @@ import reflect10 "reflect"
+ 
+ import fmt16 "fmt"
+ import strings11 "strings"
+-import code_google_com_p_gogoprotobuf_proto11 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto11 "code.google.com/p/gogoprotobuf/proto"
+ import sort5 "sort"
+ import strconv5 "strconv"
+ import reflect11 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_response.pb.go b/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_response.pb.go
+index 80994f9..67a2545 100644
+--- a/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_response.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/snapshot_recovery_response.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io6 "io"
+-import code_google_com_p_gogoprotobuf_proto12 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto12 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt18 "fmt"
+ import strings12 "strings"
+@@ -19,7 +19,7 @@ import reflect12 "reflect"
+ 
+ import fmt19 "fmt"
+ import strings13 "strings"
+-import code_google_com_p_gogoprotobuf_proto13 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto13 "code.google.com/p/gogoprotobuf/proto"
+ import sort6 "sort"
+ import strconv6 "strconv"
+ import reflect13 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/snapshot_request.pb.go b/third_party/github.com/goraft/raft/protobuf/snapshot_request.pb.go
+index 313b4a9..896ca63 100644
+--- a/third_party/github.com/goraft/raft/protobuf/snapshot_request.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/snapshot_request.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io7 "io"
+-import code_google_com_p_gogoprotobuf_proto14 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto14 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt21 "fmt"
+ import strings14 "strings"
+@@ -19,7 +19,7 @@ import reflect14 "reflect"
+ 
+ import fmt22 "fmt"
+ import strings15 "strings"
+-import code_google_com_p_gogoprotobuf_proto15 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto15 "code.google.com/p/gogoprotobuf/proto"
+ import sort7 "sort"
+ import strconv7 "strconv"
+ import reflect15 "reflect"
+diff --git a/third_party/github.com/goraft/raft/protobuf/snapshot_response.pb.go b/third_party/github.com/goraft/raft/protobuf/snapshot_response.pb.go
+index b22cd8e..296d345 100644
+--- a/third_party/github.com/goraft/raft/protobuf/snapshot_response.pb.go
++++ b/third_party/github.com/goraft/raft/protobuf/snapshot_response.pb.go
+@@ -4,14 +4,14 @@
+ 
+ package protobuf
+ 
+-import proto "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import proto "code.google.com/p/gogoprotobuf/proto"
+ import json "encoding/json"
+ import math "math"
+ 
+ // discarding unused import gogoproto "code.google.com/p/gogoprotobuf/gogoproto/gogo.pb"
+ 
+ import io8 "io"
+-import code_google_com_p_gogoprotobuf_proto16 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto16 "code.google.com/p/gogoprotobuf/proto"
+ 
+ import fmt24 "fmt"
+ import strings16 "strings"
+@@ -19,7 +19,7 @@ import reflect16 "reflect"
+ 
+ import fmt25 "fmt"
+ import strings17 "strings"
+-import code_google_com_p_gogoprotobuf_proto17 "github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++import code_google_com_p_gogoprotobuf_proto17 "code.google.com/p/gogoprotobuf/proto"
+ import sort8 "sort"
+ import strconv8 "strconv"
+ import reflect17 "reflect"
+diff --git a/third_party/github.com/goraft/raft/request_vote.go b/third_party/github.com/goraft/raft/request_vote.go
+index 1f7f576..df54e1b 100644
+--- a/third_party/github.com/goraft/raft/request_vote.go
++++ b/third_party/github.com/goraft/raft/request_vote.go
+@@ -4,7 +4,7 @@ import (
+ 	"io"
+ 	"io/ioutil"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft/protobuf"
+ )
+ 
+diff --git a/third_party/github.com/goraft/raft/snapshot.go b/third_party/github.com/goraft/raft/snapshot.go
+index 9156e7d..e283db3 100644
+--- a/third_party/github.com/goraft/raft/snapshot.go
++++ b/third_party/github.com/goraft/raft/snapshot.go
+@@ -8,7 +8,7 @@ import (
+ 	"io/ioutil"
+ 	"os"
+ 
+-	"github.com/coreos/etcd/third_party/code.google.com/p/gogoprotobuf/proto"
++	"code.google.com/p/gogoprotobuf/proto"
+ 	"github.com/coreos/etcd/third_party/github.com/goraft/raft/protobuf"
+ )
+ 
+diff --git a/third_party/github.com/gorilla/mux/mux.go b/third_party/github.com/gorilla/mux/mux.go
+index f9118b9..115fd28 100644
+--- a/third_party/github.com/gorilla/mux/mux.go
++++ b/third_party/github.com/gorilla/mux/mux.go
+@@ -9,7 +9,7 @@ import (
+ 	"net/http"
+ 	"path"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/context"
++	"github.com/gorilla/context"
+ )
+ 
+ // NewRouter returns a new router instance.
+diff --git a/third_party/github.com/gorilla/mux/mux_test.go b/third_party/github.com/gorilla/mux/mux_test.go
+index 16c267f..ed0ae08 100644
+--- a/third_party/github.com/gorilla/mux/mux_test.go
++++ b/third_party/github.com/gorilla/mux/mux_test.go
+@@ -9,7 +9,7 @@ import (
+ 	"net/http"
+ 	"testing"
+ 
+-	"github.com/coreos/etcd/third_party/github.com/gorilla/context"
++	"github.com/gorilla/context"
+ )
+ 
+ type routeTest struct {
+diff --git a/third_party/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go b/third_party/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go
+index 94257c5..4233303 100644
+--- a/third_party/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go
++++ b/third_party/github.com/rcrowley/go-metrics/cmd/metrics-bench/metrics-bench.go
+@@ -2,7 +2,7 @@ package main
+ 
+ import (
+ 	"fmt"
+-	"github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	"github.com/rcrowley/go-metrics"
+ 	"time"
+ )
+ 
+diff --git a/third_party/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go b/third_party/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go
+index 059ed70..4411097 100644
+--- a/third_party/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go
++++ b/third_party/github.com/rcrowley/go-metrics/cmd/metrics-example/metrics-example.go
+@@ -2,7 +2,7 @@ package main
+ 
+ import (
+ 	"errors"
+-	"github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	"github.com/rcrowley/go-metrics"
+ 	// "github.com/rcrowley/go-metrics/stathat"
+ 	"log"
+ 	"math/rand"
+diff --git a/third_party/github.com/rcrowley/go-metrics/librato/librato.go b/third_party/github.com/rcrowley/go-metrics/librato/librato.go
+index 3b79f2f..7aa57d1 100644
+--- a/third_party/github.com/rcrowley/go-metrics/librato/librato.go
++++ b/third_party/github.com/rcrowley/go-metrics/librato/librato.go
+@@ -2,7 +2,7 @@ package librato
+ 
+ import (
+ 	"fmt"
+-	"github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	"github.com/rcrowley/go-metrics"
+ 	"log"
+ 	"math"
+ 	"regexp"
+diff --git a/third_party/github.com/rcrowley/go-metrics/stathat/stathat.go b/third_party/github.com/rcrowley/go-metrics/stathat/stathat.go
+index 1f96837..7265cbe 100644
+--- a/third_party/github.com/rcrowley/go-metrics/stathat/stathat.go
++++ b/third_party/github.com/rcrowley/go-metrics/stathat/stathat.go
+@@ -2,7 +2,7 @@
+ package stathat
+ 
+ import (
+-	"github.com/coreos/etcd/third_party/github.com/rcrowley/go-metrics"
++	"github.com/rcrowley/go-metrics"
+ 	"github.com/stathat/go"
+ 	"log"
+ 	"time"
+-- 
+1.8.3.1
+
diff --git a/etcd.conf b/etcd.conf
new file mode 100644
index 0000000..1b43f65
--- /dev/null
+++ b/etcd.conf
@@ -0,0 +1,34 @@
+# This configuration file is written in [TOML](https://github.com/mojombo/toml)
+
+# addr = "127.0.0.1:4001"
+# bind_addr = "127.0.0.1:4001"
+# ca_file = ""
+# cert_file = ""
+# cors = []
+# cpu_profile_file = ""
+# data_dir = "."
+# discovery = "http://etcd.local:4001/v2/keys/_etcd/registry/examplecluster"
+# http_read_timeout = 10
+# http_write_timeout = 10
+# key_file = ""
+# peers = []
+# peers_file = ""
+# max_cluster_size = 9
+# max_result_buffer = 1024
+# max_retry_attempts = 3
+# name = "default-name"
+# snapshot = false
+# verbose = false
+# very_verbose = false
+
+# [peer]
+# addr = "127.0.0.1:7001"
+# bind_addr = "127.0.0.1:7001"
+# ca_file = ""
+# cert_file = ""
+# key_file = ""
+
+# [cluster]
+# active_size = 9
+# remove_delay = 1800.0
+# sync_interval = 5.0
diff --git a/etcd.spec b/etcd.spec
index d87f042..0b00c6c 100644
--- a/etcd.spec
+++ b/etcd.spec
@@ -1,27 +1,32 @@
 %global debug_package %{nil}
+%global import_path     github.com/coreos/etcd
+%global gopath          %{_datadir}/gocode
 
 Name:		etcd
-Version:	0.1.2
-Release:	7%{?dist}
+Version:	0.4.6
+Release:	4%{?dist}
 Summary:	A highly-available key value store for shared configuration
 
 License:	ASL 2.0
 URL:		https://github.com/coreos/etcd/
-Source0:	https://github.com/coreos/%{name}/archive/v%{version}/%{name}-v%{version}.tar.gz
+Source0:	https://github.com/coreos/%{name}/archive/v%{version}/%{name}-%{version}.tar.gz
 Source1:	etcd.service
-Source2:	etcd.socket
-Patch1:		etcd-0001-feat-activation-add-socket-activation.patch
-Patch2:		etcd-0002-Switch-to-goraft-raft.patch
+Source2:	etcd.conf
+Patch0:         0001-De-bundle-third_party.patch
 
 BuildRequires:	golang
 BuildRequires:	golang(code.google.com/p/go.net)
-BuildRequires:	golang(code.google.com/p/goprotobuf)
+BuildRequires:	golang(code.google.com/p/gogoprotobuf)
+BuildRequires:	golang(github.com/BurntSushi/toml)
+BuildRequires:	golang(github.com/gorilla/mux)
+BuildRequires:	golang(github.com/mreiferson/go-httpclient)
 BuildRequires:	golang(bitbucket.org/kardianos/osext)
 BuildRequires:	golang(github.com/coreos/go-log/log)
 BuildRequires:	golang(github.com/coreos/go-systemd)
-BuildRequires:	golang(github.com/goraft/raft)
+BuildRequires:	golang(github.com/rcrowley/go-metrics)
 BuildRequires:	systemd
 
+Requires(pre):	shadow-utils
 Requires(post): systemd
 Requires(preun): systemd
 Requires(postun): systemd
@@ -29,29 +34,79 @@ Requires(postun): systemd
 %description
 A highly-available key value store for shared configuration.
 
+%package devel
+BuildRequires:  golang
+BuildRequires:  golang(code.google.com/p/go.net)
+BuildRequires:  golang(code.google.com/p/gogoprotobuf)
+BuildRequires:  golang(github.com/BurntSushi/toml)
+BuildRequires:  golang(github.com/gorilla/mux)
+BuildRequires:  golang(github.com/mreiferson/go-httpclient)
+BuildRequires:  golang(bitbucket.org/kardianos/osext)
+BuildRequires:  golang(github.com/coreos/go-log/log)
+BuildRequires:  golang(github.com/coreos/go-systemd)
+BuildRequires:  golang(github.com/rcrowley/go-metrics)
+Requires:       golang
+Summary:        etcd golang devel libraries
+Provides:       golang(%{import_path}) = %{version}-%{release}
+
+%description devel
+golang development libraries for etcd, a highly-available key value store for
+shared configuration.
+
 %prep
-%setup -q
+%setup -q -n %{name}-%{version}
+%patch0 -p1
 echo "package main
 const releaseVersion = \"%{version}\"" > release_version.go
-%patch1 -p1 -b .systemd-activation
-%patch2 -p1 -b .switch_to_goraft_raft
-# Remove all 3rd party libs (we're using system-wide ones)
+
+# etcd has its own fork of the client API
+mkdir tmp
+mv third_party/github.com/coreos/go-etcd tmp
+# And a raft fork: https://bugzilla.redhat.com/show_bug.cgi?id=1047194#c12
+mv third_party/github.com/goraft tmp
+
+# Nuke everything else though
 rm -rf third_party
+
+# And restore the third party bits we're keeping
+mkdir -p third_party/github.com/coreos/
+mv tmp/go-etcd third_party/github.com/coreos/
+mv tmp/goraft third_party/github.com/
+rmdir tmp
+
 # Make link for etcd itself
 mkdir -p src/github.com/coreos
 ln -s ../../../ src/github.com/coreos/etcd
 
 %build
-GOPATH="${PWD}:%{_datadir}/gocode" go build -v -x -o etcd
+GOPATH="${PWD}:%{_datadir}/gocode" go build -v -x -o etcd.bin
 
 %install
-install -D -p -m 0755 etcd %{buildroot}%{_bindir}/etcd
+install -d -m 0755 %{buildroot}%{_sysconfdir}/etcd
+install -m 644 -t %{buildroot}%{_sysconfdir}/etcd %{SOURCE2}
+install -D -p -m 0755 etcd.bin %{buildroot}%{_bindir}/etcd
 install -D -p -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
-install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/%{name}.socket
+
+# And create /var/lib/etcd
+install -d -m 0755 %{buildroot}%{_localstatedir}/lib/etcd
+
+# Install files for devel sub-package
+install -d %{buildroot}/%{gopath}/src/%{import_path}
+cp -av main.go %{buildroot}/%{gopath}/src/%{import_path}/
+cp -av go_version.go %{buildroot}/%{gopath}/src/%{import_path}/
+for dir in bench config discovery Documentation error etcd fixtures http log \
+           metrics mod pkg server store tests
+do
+    cp -av ${dir} %{buildroot}/%{gopath}/src/%{import_path}/
+done
 
 %check
 # empty for now
 
+%pre
+getent group etcd >/dev/null || groupadd -r etcd
+getent passwd etcd >/dev/null || useradd -r -g etcd -d %{_localstatedir}/lib/etcd \
+	-s /sbin/nologin -c "etcd user" etcd
 %post
 %systemd_post %{name}.service
 
@@ -62,14 +117,29 @@ install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_unitdir}/%{name}.socket
 %systemd_postun %{name}.service
 
 %files
+%config(noreplace) %{_sysconfdir}/etcd
 %{_bindir}/etcd
+%dir %attr(-,etcd,etcd) %{_localstatedir}/lib/etcd
 %{_unitdir}/%{name}.service
-%{_unitdir}/%{name}.socket
 %doc LICENSE README.md Documentation/internal-protocol-versioning.md
 
+%files devel
+%doc LICENSE README.md Documentation/internal-protocol-versioning.md
+%dir %attr(755,root,root) %{gopath}/src/github.com/coreos
+%dir %attr(755,root,root) %{gopath}/src/%{import_path}
+%{gopath}/src/%{import_path}/*
+
 %changelog
-* Sat Aug 16 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.1.2-7
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+* Mon Sep 22 2014 jchaloup <jchaloup at redhat.com> - 0.4.6-4
+- resolves: #1047194
+  Update to 0.4.6 from https://github.com/projectatomic/etcd-package
+
+* Tue Aug 19 2014 Adam Miller <maxamillion at fedoraproject.org> - 0.4.6-3
+- Add devel sub-package
+
+* Wed Aug 13 2014 Eric Paris <eparis at redhat.com> - 0.4.6-2
+- Bump to 0.4.6
+- run as etcd, not root
 
 * Sat Jun 07 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 0.1.2-6
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/sources b/sources
index e68eeac..a7395ad 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4d0fb3fd2fc3aa051b47ff5d8fb151cf  etcd-v0.1.2.tar.gz
+81d9d03bd3cab84b651689b6f7e570ea  etcd-0.4.6.tar.gz


More information about the scm-commits mailing list