Rename rebuild to restore to match the gb-vendor command
diff --git a/README.md b/README.md
index bd120e2..a43e2fc 100644
--- a/README.md
+++ b/README.md
@@ -65,7 +65,7 @@
     vendor/**
     !vendor/manifest
 
-When you check out the source again, you can then run `gvt rebuild` to fetch all the dependencies at the revisions specified in the `vendor/manifest` file.
+When you check out the source again, you can then run `gvt restore` to fetch all the dependencies at the revisions specified in the `vendor/manifest` file.
 
 Please consider that this approach has the following consequences:
 
diff --git a/alldocs.go b/alldocs.go
index bb5e889..fe7563c 100644
--- a/alldocs.go
+++ b/alldocs.go
@@ -10,7 +10,7 @@
 The commands are:
 
         fetch       fetch a remote dependency
-        rebuild     rebuild dependencies from manifest
+        restore     restore dependencies from manifest
         update      update a local dependency
         list        list dependencies one per line
         delete      delete a local dependency
@@ -43,12 +43,12 @@
 	-precaire
 		allow the use of insecure protocols.
 
-Rebuild dependencies from manifest
+Restore dependencies from manifest
 
 Usage:
-        gvt rebuild
+        gvt restore
 
-rebuild fetches the dependencies listed in the manifest.
+restore fetches the dependencies listed in the manifest.
 
 It's meant for workflows that don't include checking in to VCS the vendored
 source, for example if .gitignore includes lines like
@@ -56,7 +56,7 @@
     vendor/**
     !vendor/manifest
 
-Note that such a setup requires "gvt rebuild" to build the source, relies on
+Note that such a setup requires "gvt restore" to build the source, relies on
 the availability of the dependencies repositories and breaks "go get".
 
 Flags:
diff --git a/gbvendor/repo.go b/gbvendor/repo.go
index eb52e84..5a52c2b 100644
--- a/gbvendor/repo.go
+++ b/gbvendor/repo.go
@@ -477,7 +477,7 @@
 }
 
 func cleanPath(path string) error {
-	if files, _ := ioutil.ReadDir(path); len(files) > 0 || filepath.Base(path) == "src" {
+	if files, _ := ioutil.ReadDir(path); len(files) > 0 || filepath.Base(path) == "vendor" {
 		return nil
 	}
 	parent := filepath.Dir(path)
diff --git a/main.go b/main.go
index 6245927..93c8ef8 100644
--- a/main.go
+++ b/main.go
@@ -24,7 +24,7 @@
 
 var commands = []*Command{
 	cmdFetch,
-	cmdRebuild,
+	cmdRestore,
 	cmdUpdate,
 	cmdList,
 	cmdDelete,
@@ -40,6 +40,9 @@
 	case args[0] == "help":
 		help(args[1:])
 		return
+	case args[0] == "rebuild":
+		// rebuild was renamed restore, alias for backwards compatibility
+		args[0] = "restore"
 	}
 
 	for _, command := range commands {
diff --git a/rebuild.go b/restore.go
similarity index 79%
rename from rebuild.go
rename to restore.go
index 449747c..eedeaf5 100644
--- a/rebuild.go
+++ b/restore.go
@@ -18,16 +18,16 @@
 	rbConnections uint // Count of concurrent download connections
 )
 
-func addRebuildFlags(fs *flag.FlagSet) {
+func addRestoreFlags(fs *flag.FlagSet) {
 	fs.BoolVar(&rbInsecure, "precaire", false, "allow the use of insecure protocols")
 	fs.UintVar(&rbConnections, "connections", 8, "count of parallel download connections")
 }
 
-var cmdRebuild = &Command{
-	Name:      "rebuild",
-	UsageLine: "rebuild",
-	Short:     "rebuild dependencies from manifest",
-	Long: `rebuild fetches the dependencies listed in the manifest.
+var cmdRestore = &Command{
+	Name:      "restore",
+	UsageLine: "restore [-precaire] [-connections N]",
+	Short:     "restore dependencies from manifest",
+	Long: `restore fetches the dependencies listed in the manifest.
 
 It's meant for workflows that don't include checking in to VCS the vendored
 source, for example if .gitignore includes lines like
@@ -35,7 +35,7 @@
     vendor/**
     !vendor/manifest
 
-Note that such a setup requires "gvt rebuild" to build the source, relies on
+Note that such a setup requires "gvt restore" to build the source, relies on
 the availability of the dependencies repositories and breaks "go get".
 
 Flags:
@@ -47,15 +47,15 @@
 	Run: func(args []string) error {
 		switch len(args) {
 		case 0:
-			return rebuild()
+			return restore()
 		default:
-			return fmt.Errorf("rebuild takes no arguments")
+			return fmt.Errorf("restore takes no arguments")
 		}
 	},
-	AddFlags: addRebuildFlags,
+	AddFlags: addRestoreFlags,
 }
 
-func rebuild() error {
+func restore() error {
 	m, err := vendor.ReadManifest(manifestFile())
 	if err != nil {
 		return fmt.Errorf("could not load manifest: %v", err)
@@ -91,27 +91,24 @@
 }
 
 func downloadDependency(dep vendor.Dependency) error {
+	log.Printf("fetching %s", dep.Importpath)
+	repo, _, err := vendor.DeduceRemoteRepo(dep.Importpath, rbInsecure)
+	if err != nil {
+		return fmt.Errorf("dependency could not be processed: %s", err)
+	}
+	wc, err := repo.Checkout("", "", dep.Revision)
+	if err != nil {
+		return fmt.Errorf("dependency could not be fetched: %s", err)
+	}
 	dst := filepath.Join(vendorDir(), dep.Importpath)
+	src := filepath.Join(wc.Dir(), dep.Path)
+
 	if _, err := os.Stat(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)
 		}
 	}
 
-	log.Printf("fetching %s", dep.Importpath)
-
-	repo, _, err := vendor.DeduceRemoteRepo(dep.Importpath, rbInsecure)
-	if err != nil {
-		return err
-	}
-
-	wc, err := repo.Checkout("", "", dep.Revision)
-	if err != nil {
-		return err
-	}
-
-	src := filepath.Join(wc.Dir(), dep.Path)
 	if err := fileutils.Copypath(dst, src); err != nil {
 		return err
 	}