@@ -19,6 +19,7 @@ type Runner struct {
1919 tracer * placeholder.Tracer
2020 results []genny.File
2121 tmpPath string
22+ root string
2223}
2324
2425// NewRunner is a xgenny Runner with a logger.
@@ -34,11 +35,21 @@ func NewRunner(ctx context.Context, root string) *Runner {
3435 tmpPath : tmpPath ,
3536 tracer : placeholder .New (),
3637 results : make ([]genny.File , 0 ),
38+ root : root ,
3739 }
3840 runner .FileFn = wetFileFn (r )
3941 return r
4042}
4143
44+ // cleanup clears the underlying genny runner state so previously executed
45+ // generators are not re-run on subsequent calls.
46+ func (r * Runner ) cleanup () {
47+ runner := genny .WetRunner (r .ctx )
48+ runner .Root = r .root
49+ runner .FileFn = wetFileFn (r )
50+ r .Runner = runner
51+ }
52+
4253func (r * Runner ) Tracer () * placeholder.Tracer {
4354 return r .tracer
4455}
@@ -139,16 +150,24 @@ func (r *Runner) RunAndApply(gens *genny.Generator, options ...ApplyOption) (Sou
139150
140151// Run all generators into a temp folder for we can apply the modifications later.
141152func (r * Runner ) Run (gens ... * genny.Generator ) error {
142- // execute the modification with a wet runner
153+ // ensure the underlying genny runner starts clean to avoid re-running previous generators
154+ r .cleanup ()
155+
143156 for _ , gen := range gens {
144157 if err := r .Runner .With (gen ); err != nil {
145158 return err
146159 }
147- if err := r .Runner .Run (); err != nil {
148- return err
149- }
150160 }
161+
162+ if err := r .Runner .Run (); err != nil {
163+ return err
164+ }
165+
151166 r .results = append (r .results , r .Results ().Files ... )
167+
168+ // reset again so a future Run call starts fresh
169+ r .cleanup ()
170+
152171 return r .tracer .Err ()
153172}
154173
0 commit comments