diff --git a/delete.go b/delete.go
index 9a0476c..13e9789 100644
--- a/delete.go
+++ b/delete.go
@@ -5,6 +5,8 @@
 	"fmt"
 	"path/filepath"
 
+	"github.com/constabulary/gb/fileutils"
+
 	"github.com/FiloSottile/gvt/gbvendor"
 )
 
@@ -59,7 +61,7 @@
 				return fmt.Errorf("dependency could not be deleted: %v", err)
 			}
 
-			if err := vendor.RemoveAll(filepath.Join(vendorDir(), filepath.FromSlash(path))); err != nil {
+			if err := fileutils.RemoveAll(filepath.Join(vendorDir(), filepath.FromSlash(path))); err != nil {
 				// TODO(dfc) need to apply vendor.cleanpath here to remove indermediate directories.
 				return fmt.Errorf("dependency could not be deleted: %v", err)
 			}
diff --git a/gbvendor/copy.go b/gbvendor/copy.go
index 52d4c98..f2d5d2c 100644
--- a/gbvendor/copy.go
+++ b/gbvendor/copy.go
@@ -6,6 +6,8 @@
 	"os"
 	"path/filepath"
 	"strings"
+
+	"github.com/constabulary/gb/fileutils"
 )
 
 const debugCopypath = true
@@ -42,7 +44,7 @@
 	})
 	if err != nil {
 		// if there was an error during copying, remove the partial copy.
-		RemoveAll(dst)
+		fileutils.RemoveAll(dst)
 	}
 	return err
 }
diff --git a/gbvendor/imports_test.go b/gbvendor/imports_test.go
index 37d029d..283f9db 100644
--- a/gbvendor/imports_test.go
+++ b/gbvendor/imports_test.go
@@ -2,6 +2,7 @@
 
 import (
 	"bytes"
+	"fmt"
 	"io"
 	"os"
 	"path/filepath"
@@ -134,10 +135,9 @@
 		importpath: "gopkg.in/mgo.v2",
 		vcs:        "git",
 		reporoot:   "https://gopkg.in/mgo.v2",
-		//	disabled: certificate has expired
-		//	}, {
-		//		path: "speter.net/go/exp",
-		//		err:  fmt.Errorf("go-import metadata not found"),
+	}, {
+		path: "speter.net/go/exp",
+		err:  fmt.Errorf("go-import metadata not found"),
 	}}
 
 	for _, tt := range tests {
diff --git a/gbvendor/manifest_test.go b/gbvendor/manifest_test.go
index 479f588..a2dc1f7 100644
--- a/gbvendor/manifest_test.go
+++ b/gbvendor/manifest_test.go
@@ -5,6 +5,8 @@
 	"os"
 	"path/filepath"
 	"testing"
+
+	"github.com/constabulary/gb/fileutils"
 )
 
 func mktemp(t *testing.T) string {
@@ -31,7 +33,7 @@
 
 func TestManifest(t *testing.T) {
 	root := mktemp(t)
-	defer RemoveAll(root)
+	defer fileutils.RemoveAll(root)
 
 	mf := filepath.Join(root, "vendor")
 
diff --git a/gbvendor/path.go b/gbvendor/path.go
deleted file mode 100644
index bb8334d..0000000
--- a/gbvendor/path.go
+++ /dev/null
@@ -1,32 +0,0 @@
-package vendor
-
-import (
-	"os"
-	"path/filepath"
-	"runtime"
-)
-
-// RemoveAll removes path and any children it contains. Unlike os.RemoveAll it
-// deletes read only files on Windows.
-func RemoveAll(path string) error {
-	if runtime.GOOS == "windows" {
-		// Simple case: if Remove works, we're done.
-		err := os.Remove(path)
-		if err == nil || os.IsNotExist(err) {
-			return nil
-		}
-		// make sure all files are writable so we can delete them
-		filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
-			if err != nil {
-				// walk gave us some error, give it back.
-				return err
-			}
-			mode := info.Mode()
-			if mode|0200 == mode {
-				return nil
-			}
-			return os.Chmod(path, mode|0200)
-		})
-	}
-	return os.RemoveAll(path)
-}
diff --git a/gbvendor/repo.go b/gbvendor/repo.go
index 95393d6..5dbccd4 100644
--- a/gbvendor/repo.go
+++ b/gbvendor/repo.go
@@ -12,6 +12,8 @@
 	"path/filepath"
 	"regexp"
 	"strings"
+
+	"github.com/constabulary/gb/fileutils"
 )
 
 // RemoteRepo describes a remote dvcs repository.
@@ -323,7 +325,7 @@
 func (w workingcopy) Dir() string { return w.path }
 
 func (w workingcopy) Destroy() error {
-	if err := RemoveAll(w.path); err != nil {
+	if err := fileutils.RemoveAll(w.path); err != nil {
 		return err
 	}
 	parent := filepath.Dir(w.path)
@@ -380,18 +382,19 @@
 		"clone",
 		h.url,
 		dir,
+		"--noninteractive",
 	}
 
 	if branch != "" {
 		args = append(args, "--branch", branch)
 	}
 	if err := runOut(os.Stderr, "hg", args...); err != nil {
-		RemoveAll(dir)
+		fileutils.RemoveAll(dir)
 		return nil, err
 	}
 	if revision != "" {
 		if err := runOut(os.Stderr, "hg", "--cwd", dir, "update", "-r", revision); err != nil {
-			RemoveAll(dir)
+			fileutils.RemoveAll(dir)
 			return nil, err
 		}
 	}
@@ -449,7 +452,7 @@
 	}
 	wc := filepath.Join(dir, "wc")
 	if err := runOut(os.Stderr, "bzr", "branch", b.url, wc); err != nil {
-		RemoveAll(dir)
+		fileutils.RemoveAll(dir)
 		return nil, err
 	}
 
@@ -478,7 +481,7 @@
 		return nil
 	}
 	parent := filepath.Dir(path)
-	if err := RemoveAll(path); err != nil {
+	if err := fileutils.RemoveAll(path); err != nil {
 		return err
 	}
 	return cleanPath(parent)
@@ -500,6 +503,7 @@
 
 func runOut(w io.Writer, c string, args ...string) error {
 	cmd := exec.Command(c, args...)
+	cmd.Stdin = nil
 	cmd.Stdout = w
 	cmd.Stderr = os.Stderr
 	return cmd.Run()
@@ -514,6 +518,7 @@
 func runOutPath(w io.Writer, path string, c string, args ...string) error {
 	cmd := exec.Command(c, args...)
 	cmd.Dir = path
+	cmd.Stdin = nil
 	cmd.Stdout = w
 	cmd.Stderr = os.Stderr
 	return cmd.Run()
diff --git a/main.go b/main.go
index c95d30b..6245927 100644
--- a/main.go
+++ b/main.go
@@ -10,10 +10,7 @@
 var fs = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
 
 func init() {
-	fs.Usage = func() {
-		printUsage(os.Stderr)
-		os.Exit(2)
-	}
+	fs.Usage = usage
 }
 
 type Command struct {
@@ -38,8 +35,8 @@
 
 	switch {
 	case len(args) < 1, args[0] == "-h", args[0] == "-help":
-		fs.Usage()
-		os.Exit(1)
+		printUsage(os.Stdout)
+		os.Exit(0)
 	case args[0] == "help":
 		help(args[1:])
 		return
diff --git a/rebuild.go b/rebuild.go
index 87f13cd..0f523c2 100644
--- a/rebuild.go
+++ b/rebuild.go
@@ -9,6 +9,8 @@
 	"sync"
 	"sync/atomic"
 
+	"github.com/constabulary/gb/fileutils"
+
 	"github.com/FiloSottile/gvt/gbvendor"
 )
 
@@ -92,7 +94,7 @@
 func downloadDependency(dep vendor.Dependency) error {
 	dst := filepath.Join(vendorDir(), dep.Importpath)
 	if _, err := os.Stat(dst); err == nil {
-		if err := vendor.RemoveAll(dst); err != nil {
+		if err := fileutils.RemoveAll(dst); err != nil {
 			// TODO need to apply vendor.cleanpath here too
 			return fmt.Errorf("dependency could not be deleted: %v", err)
 		}
diff --git a/update.go b/update.go
index 86d0fb1..a719ced 100644
--- a/update.go
+++ b/update.go
@@ -5,6 +5,8 @@
 	"fmt"
 	"path/filepath"
 
+	"github.com/constabulary/gb/fileutils"
+
 	"github.com/FiloSottile/gvt/gbvendor"
 )
 
@@ -97,7 +99,7 @@
 				Path:       extra,
 			}
 
-			if err := vendor.RemoveAll(filepath.Join(vendorDir(), filepath.FromSlash(d.Importpath))); err != nil {
+			if err := fileutils.RemoveAll(filepath.Join(vendorDir(), filepath.FromSlash(d.Importpath))); err != nil {
 				// TODO(dfc) need to apply vendor.cleanpath here to remove intermediate directories.
 				return fmt.Errorf("dependency could not be deleted: %v", err)
 			}
diff --git a/vendor/github.com/constabulary/gb/fileutils/_testdata/copyfile/a/rick b/vendor/github.com/constabulary/gb/fileutils/_testdata/copyfile/a/rick
new file mode 120000
index 0000000..0db35ec
--- /dev/null
+++ b/vendor/github.com/constabulary/gb/fileutils/_testdata/copyfile/a/rick
@@ -0,0 +1 @@
+/never/going/to/give/you/up
\ No newline at end of file
diff --git a/vendor/github.com/constabulary/gb/fileutils/fileutils.go b/vendor/github.com/constabulary/gb/fileutils/fileutils.go
new file mode 100644
index 0000000..c2c2dc7
--- /dev/null
+++ b/vendor/github.com/constabulary/gb/fileutils/fileutils.go
@@ -0,0 +1,101 @@
+// package fileutils provides utililty methods to copy and move files and directories.
+package fileutils
+
+import (
+	"fmt"
+	"io"
+	"os"
+	"path/filepath"
+	"runtime"
+	"strings"
+)
+
+const debugCopypath = true
+const debugCopyfile = false
+
+// Copypath copies the contents of src to dst, excluding any file or
+// directory that starts with a period.
+func Copypath(dst string, src string) error {
+	err := filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
+		if err != nil {
+			return err
+		}
+
+		if strings.HasPrefix(filepath.Base(path), ".") {
+			if info.IsDir() {
+				return filepath.SkipDir
+			}
+			return nil
+		}
+
+		if info.IsDir() {
+			return nil
+		}
+
+		if info.Mode()&os.ModeSymlink != 0 {
+			if debugCopypath {
+				fmt.Printf("skipping symlink: %v\n", path)
+			}
+			return nil
+		}
+
+		dst := filepath.Join(dst, path[len(src):])
+		return copyfile(dst, path)
+	})
+	if err != nil {
+		// if there was an error during copying, remove the partial copy.
+		RemoveAll(dst)
+	}
+	return err
+}
+
+func copyfile(dst, src string) error {
+	err := mkdir(filepath.Dir(dst))
+	if err != nil {
+		return fmt.Errorf("copyfile: mkdirall: %v", err)
+	}
+	r, err := os.Open(src)
+	if err != nil {
+		return fmt.Errorf("copyfile: open(%q): %v", src, err)
+	}
+	defer r.Close()
+	w, err := os.Create(dst)
+	if err != nil {
+		return fmt.Errorf("copyfile: create(%q): %v", dst, err)
+	}
+	defer w.Close()
+	if debugCopyfile {
+		fmt.Printf("copyfile(dst: %v, src: %v)\n", dst, src)
+	}
+	_, err = io.Copy(w, r)
+	return err
+}
+
+// RemoveAll removes path and any children it contains. Unlike os.RemoveAll it
+// deletes read only files on Windows.
+func RemoveAll(path string) error {
+	if runtime.GOOS == "windows" {
+		// Simple case: if Remove works, we're done.
+		err := os.Remove(path)
+		if err == nil || os.IsNotExist(err) {
+			return nil
+		}
+		// make sure all files are writable so we can delete them
+		filepath.Walk(path, func(path string, info os.FileInfo, err error) error {
+			if err != nil {
+				// walk gave us some error, give it back.
+				return err
+			}
+			mode := info.Mode()
+			if mode|0200 == mode {
+				return nil
+			}
+			return os.Chmod(path, mode|0200)
+		})
+	}
+	return os.RemoveAll(path)
+}
+
+func mkdir(path string) error {
+	return os.MkdirAll(path, 0755)
+}
diff --git a/gbvendor/copy_test.go b/vendor/github.com/constabulary/gb/fileutils/fileutils_test.go
similarity index 68%
rename from gbvendor/copy_test.go
rename to vendor/github.com/constabulary/gb/fileutils/fileutils_test.go
index 297d198..cfc40a2 100644
--- a/gbvendor/copy_test.go
+++ b/vendor/github.com/constabulary/gb/fileutils/fileutils_test.go
@@ -1,6 +1,7 @@
-package vendor
+package fileutils
 
 import (
+	"io/ioutil"
 	"path/filepath"
 	"runtime"
 	"testing"
@@ -17,3 +18,11 @@
 		t.Fatalf("copypath(%s, %s): %v", dst, src, err)
 	}
 }
+
+func mktemp(t *testing.T) string {
+	s, err := ioutil.TempDir("", "fileutils_test")
+	if err != nil {
+		t.Fatal(err)
+	}
+	return s
+}
diff --git a/gbvendor/path_test.go b/vendor/github.com/constabulary/gb/fileutils/path_test.go
similarity index 98%
rename from gbvendor/path_test.go
rename to vendor/github.com/constabulary/gb/fileutils/path_test.go
index 2bba91b..1bdf9b1 100644
--- a/gbvendor/path_test.go
+++ b/vendor/github.com/constabulary/gb/fileutils/path_test.go
@@ -1,7 +1,7 @@
 // Copyright 2009 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
-package vendor
+package fileutils
 
 import (
 	"os"
diff --git a/vendor/manifest b/vendor/manifest
new file mode 100644
index 0000000..60981a3
--- /dev/null
+++ b/vendor/manifest
@@ -0,0 +1,12 @@
+{
+	"version": 0,
+	"dependencies": [
+		{
+			"importpath": "github.com/constabulary/gb/fileutils",
+			"repository": "https://github.com/constabulary/gb",
+			"revision": "9e201fb977e3dff7e0c94b73640be2a97285c418",
+			"branch": "master",
+			"path": "/fileutils"
+		}
+	]
+}
\ No newline at end of file
