// WriteVendorFile writes the current vendor file to the context location. func (ctx *Context) WriteVendorFile() (err error) { perm := ros.FileMode(0666) fi, err := os.Stat(ctx.VendorFilePath) if err == nil { perm = fi.Mode() } buf := &bytes.Buffer{} err = ctx.VendorFile.Marshal(buf) if err != nil { return } err = buf.WriteByte('\n') if err != nil { return } dir, _ := filepath.Split(ctx.VendorFilePath) err = os.MkdirAll(dir, 0777) if err != nil { return } err = safefile.WriteFile(ctx.VendorFilePath, buf.Bytes(), perm) return }
// CopyPackage copies the files from the srcPath to the destPath, destPath // folder and parents are are created if they don't already exist. func (ctx *Context) CopyPackage(destPath, srcPath string, ignoreFiles []string, tree bool) error { if pathos.FileStringEquals(destPath, srcPath) { return fmt.Errorf("Attempting to copy package to same location %q.", destPath) } err := os.MkdirAll(destPath, 0777) if err != nil { return err } // Ensure the dest is empty of files. destDir, err := os.Open(destPath) if err != nil { return err } ignoreTest := false if tree { for _, ignore := range ctx.ignoreTag { if ignore == "test" { ignoreTest = true break } } } fl, err := destDir.Readdir(-1) destDir.Close() if err != nil { return err } for _, fi := range fl { if fi.IsDir() { if tree { err = os.RemoveAll(filepath.Join(destPath, fi.Name())) if err != nil { return err } } continue } err = os.Remove(filepath.Join(destPath, fi.Name())) if err != nil { return err } } // Copy files into dest. srcDir, err := os.Open(srcPath) if err != nil { return err } fl, err = srcDir.Readdir(-1) srcDir.Close() if err != nil { return err } fileLoop: for _, fi := range fl { name := fi.Name() if name[0] == '.' { continue } if fi.IsDir() { if !tree { continue } if name[0] == '_' { continue } if ignoreTest { if strings.HasSuffix(name, "_test") || name == "testdata" { continue } } nextDestPath := filepath.Join(destPath, name) nextSrcPath := filepath.Join(srcPath, name) nextIgnoreFiles, err := ctx.getIngoreFiles(nextSrcPath) if err != nil { return err } err = ctx.CopyPackage(nextDestPath, nextSrcPath, nextIgnoreFiles, true) if err != nil { return err } continue } for _, ignore := range ignoreFiles { if pathos.FileStringEquals(name, ignore) { continue fileLoop } } err = copyFile( filepath.Join(destPath, name), filepath.Join(srcPath, name), ) if err != nil { return err } } return nil }
// CopyPackage copies the files from the srcPath to the destPath, destPath // folder and parents are are created if they don't already exist. func CopyPackage(destPath, srcPath string, ignoreFiles []string) error { if pathos.FileStringEquals(destPath, srcPath) { return fmt.Errorf("Attempting to copy package to same location %q.", destPath) } err := os.MkdirAll(destPath, 0777) if err != nil { return err } // Ensure the dest is empty of files. destDir, err := os.Open(destPath) if err != nil { return err } fl, err := destDir.Readdir(-1) destDir.Close() if err != nil { return err } for _, fi := range fl { if fi.IsDir() { continue } err = os.Remove(filepath.Join(destPath, fi.Name())) if err != nil { return err } } // Copy files into dest. srcDir, err := os.Open(srcPath) if err != nil { return err } fl, err = srcDir.Readdir(-1) srcDir.Close() if err != nil { return err } fileLoop: for _, fi := range fl { if fi.IsDir() { continue } if fi.Name()[0] == '.' { continue } for _, ignore := range ignoreFiles { if pathos.FileStringEquals(fi.Name(), ignore) { continue fileLoop } } err = copyFile( filepath.Join(destPath, fi.Name()), filepath.Join(srcPath, fi.Name()), ) if err != nil { return err } } return nil }