Updated to restore dependencies recursively

The code is messy, but it's a start. I did not test extensively.
diff --git a/restore.go b/restore.go
index a19959d..fbf443e 100644
--- a/restore.go
+++ b/restore.go
@@ -47,7 +47,7 @@
 	Run: func(args []string) error {
 		switch len(args) {
 		case 0:
-			return restore()
+			return restore(manifestFile())
 		default:
 			return fmt.Errorf("restore takes no arguments")
 		}
@@ -55,8 +55,8 @@
 	AddFlags: addRestoreFlags,
 }
 
-func restore() error {
-	m, err := vendor.ReadManifest(manifestFile())
+func restore(manFile string) error {
+	m, err := vendor.ReadManifest(manFile)
 	if err != nil {
 		return fmt.Errorf("could not load manifest: %v", err)
 	}
@@ -69,7 +69,7 @@
 		go func() {
 			defer wg.Done()
 			for d := range depC {
-				if err := downloadDependency(d); err != nil {
+				if err := downloadDependency(d, vendorDir(), false); err != nil {
 					log.Printf("%s: %v", d.Importpath, err)
 					atomic.AddUint32(&errors, 1)
 				}
@@ -90,8 +90,13 @@
 	return nil
 }
 
-func downloadDependency(dep vendor.Dependency) error {
-	log.Printf("fetching %s", dep.Importpath)
+func downloadDependency(dep vendor.Dependency, vendorDir string, recursive bool) error {
+	if recursive {
+		log.Printf("fetching recursive %s", dep.Importpath)
+	} else {
+		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)
@@ -102,7 +107,7 @@
 	if err != nil {
 		return fmt.Errorf("dependency could not be fetched: %s", err)
 	}
-	dst := filepath.Join(vendorDir(), dep.Importpath)
+	dst := filepath.Join(vendorDir, dep.Importpath)
 	src := filepath.Join(wc.Dir(), dep.Path)
 
 	if _, err := os.Stat(dst); err == nil {
@@ -119,5 +124,22 @@
 		return err
 	}
 
+	// Check for for manifests in dependencies
+	man := filepath.Join(dst, "vendor", "manifest")
+	venDir := filepath.Join(dst, "vendor")
+	if _, err := os.Stat(man); err == nil {
+		m, err := vendor.ReadManifest(man)
+		if err != nil {
+			return fmt.Errorf("could not load manifest: %v", err)
+		}
+		var errors uint32
+		for _, d := range m.Dependencies {
+			if err := downloadDependency(d, venDir, true); err != nil {
+				log.Printf("%s: %v", d.Importpath, err)
+				atomic.AddUint32(&errors, 1)
+			}
+		}
+	}
+
 	return nil
 }