func cloneTree()

in astro/terraform/session.go [132:169]


func cloneTree(existingPath string, newPath string) error {
	existingPathDeref, err := filepath.EvalSymlinks(existingPath)
	if err != nil {
		return err
	}

	newPathDeref, err := filepath.EvalSymlinks(newPath)
	if err != nil {
		return err
	}

	find := exec.Command("find", ".",
		"!", "-path", "*/.terraform/*",
		"!", "-name", ".terraform",
		"!", "-path", "*/.astro/*",
		"!", "-name", ".astro",
		"!", "-name", "terraform.tfstate*",
	)
	find.Dir = existingPathDeref
	cpio := exec.Command("cpio", "-pl", newPathDeref)
	cpio.Dir = existingPathDeref

	cpio.Stdin, err = find.StdoutPipe()
	if err != nil {
		return err
	}

	if err := find.Start(); err != nil {
		return err
	}
	if err := cpio.Start(); err != nil {
		return err
	}
	if err := find.Wait(); err != nil {
		return err
	}
	return cpio.Wait()
}