package Ġdata maint ain . core . step Ċ Ċ import Ġdata maint ain . core . Context Ċ import Ġdata maint ain . core . script . Script With Content Ċ import Ġmu . Kotlin Logging Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠP run er ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġfun Ġprune ( scripts : ĠList < Script With Content >): ĠList < Script With Content > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" P rune Ġscripts ..." Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexecuted Checksum s Ġ= Ġcontext . db Driver . list Executed Scripts () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġexecuted Script Ġ-> Ġexecuted Script . checksum Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġval Ġpr uned Scripts Ġ= Ġscripts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġscript Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġskipped Ġ= Ġexecuted Checksum s . contains ( script . checksum ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . tags . intersect ( context . config . tags To Play Again ). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . config . verbose Ġ&& Ġskipped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"${ script . name } Ġis Ġskipped Ġbecause Ġit Ġwas Ġalready Ġexecuted Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġit Ġdoes Ġnot Ġhave Ġa Ġtag Ġto Ġplay Ġagain ." Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskipped ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġcontext . report Builder . add P run ed Script ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"${ pr uned Scripts . size } Ġscripts Ġpr uned Ġ(${ executed Checksum s . size } Ġskipped )" Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpr uned Scripts ĊĠĠĠ Ġ} Ċ }