diff --git a/internal/gps/result.go b/internal/gps/result.go index d3ec22a5d4..16e4f05268 100644 --- a/internal/gps/result.go +++ b/internal/gps/result.go @@ -71,17 +71,21 @@ func WriteDepTree(basedir string, l Lock, sm SourceManager, sv bool, logger *log for _, p := range l.Projects() { wg.Add(1) go func(p LockedProject) { + defer wg.Done() to := filepath.FromSlash(filepath.Join(basedir, string(p.Ident().ProjectRoot))) logger.Printf("Writing out %s@%s", p.Ident().errString(), p.Version()) if err := sm.ExportProject(p.Ident(), p.Version(), to); err != nil { errCh <- errors.Wrapf(err, "failed to export %s", p.Ident().ProjectRoot) + return } if sv { - filepath.Walk(to, stripVendor) + err := filepath.Walk(to, stripVendor) + if err != nil { + errCh <- errors.Wrapf(err, "failed to strip vendor from %s", p.Ident().ProjectRoot) + } } - wg.Done() }(p) } diff --git a/internal/gps/strip_vendor.go b/internal/gps/strip_vendor.go index fec4ee13fb..324a07df80 100644 --- a/internal/gps/strip_vendor.go +++ b/internal/gps/strip_vendor.go @@ -6,24 +6,39 @@ package gps -import "os" +import ( + "os" + "path/filepath" +) func stripVendor(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.Name() == "vendor" { - if _, err := os.Lstat(path); err == nil { - if (info.Mode() & os.ModeSymlink) != 0 { - realInfo, err := os.Stat(path) - if err != nil { - return err - } - if realInfo.IsDir() { - return os.Remove(path) - } + if _, err := os.Lstat(path); err != nil { + return err + } + + if (info.Mode() & os.ModeSymlink) != 0 { + realInfo, err := os.Stat(path) + if err != nil { + return err } - if info.IsDir() { - return removeAll(path) + if realInfo.IsDir() { + return os.Remove(path) } } + + if info.IsDir() { + if err := removeAll(path); err != nil { + return err + } + return filepath.SkipDir + } + + return nil } return nil diff --git a/internal/gps/strip_vendor_windows.go b/internal/gps/strip_vendor_windows.go index 7286934cf3..bb07da84c9 100644 --- a/internal/gps/strip_vendor_windows.go +++ b/internal/gps/strip_vendor_windows.go @@ -10,6 +10,10 @@ import ( ) func stripVendor(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.Name() == "vendor" { if _, err := os.Lstat(path); err == nil { symlink := (info.Mode() & os.ModeSymlink) != 0 @@ -36,7 +40,10 @@ func stripVendor(path string, info os.FileInfo, err error) error { } case dir: - return removeAll(path) + if err := removeAll(path); err != nil { + return err + } + return filepath.SkipDir } } }