github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/build/cleanup.go (about)

     1  package build
     2  
     3  import (
     4  	"os"
     5  	"os/exec"
     6  	"path/filepath"
     7  
     8  	"github.com/gobuffalo/genny/v2"
     9  )
    10  
    11  // Cleanup all of the generated files
    12  func Cleanup(opts *Options) genny.RunFn {
    13  	return func(r *genny.Runner) error {
    14  		defer os.RemoveAll(filepath.Join(opts.Root, "a"))
    15  
    16  		var err error
    17  		opts.rollback.Range(func(k, v interface{}) bool {
    18  			f := genny.NewFileS(k.(string), v.(string))
    19  			r.Logger.Debugf("Rollback: %s", f.Name())
    20  			if err = r.File(f); err != nil {
    21  				return false
    22  			}
    23  			r.Disk.Remove(f.Name())
    24  			return true
    25  		})
    26  		if err != nil {
    27  			return err
    28  		}
    29  		for _, f := range r.Disk.Files() {
    30  			if _, keep := opts.keep.Load(f.Name()); keep {
    31  				// Keep this file
    32  				continue
    33  			}
    34  			if err := r.Disk.Delete(f.Name()); err != nil {
    35  				return err
    36  			}
    37  		}
    38  		if opts.WithBuildDeps {
    39  			return r.Exec(exec.Command("go", "mod", "tidy"))
    40  		}
    41  		return nil
    42  	}
    43  }