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
}