class JarFile @path @basename attr_reader :path, :basename def initialize( path ) @path = path @basename = File.basename( @path ) end end # Wrappers in new dir def jars( lpshome, dir ) Dir.glob("#{lpshome}/#{dir}/**/*.jar").map { | f | JarFile.new(f) } end def jars_in_ant_home_lib Dir.glob( "/Users/ben/src/svn/vendor/**/*.jar" ).map { | f | JarFile.new(f) } end trunk = "/Users/ben/src/svn/openlaszlo/branches/swiffer"; server_bin_jars = jars( trunk, "server/bin" ) server_common_jars = jars( trunk, "server/common" ) server_server_jars = jars( trunk, "server/server" ) web_inf_jars = jars( trunk, "WEB-INF" ) third_party_jars = jars( trunk, "3rd-party" ) all_jars = server_bin_jars.concat( server_common_jars).concat( server_server_jars ).concat( web_inf_jars).concat(third_party_jars) # the jars in web_inf are our favorite! if copies of them exist elsewhere, delete them! protected_jars = web_inf_jars def find_dups( jar_array, all_jar_array ) jars_to_delete = Array.new jar_array.each { | j | # find instances of a jar with that name in all the jars matches = all_jar_array.select { | jj | jj.basename == j.basename and jj.path != j.path } matches.each{ | m | puts "found match for #{j.basename} in #{m.path} \n" jars_to_delete.push( JarFile.new( m.path) ) } } jars_to_delete end at_risk_jars = all_jars - protected_jars; kill_me = find_dups( third_party_jars, at_risk_jars ) at_risk_jars = at_risk_jars - kill_me; kill_me.concat( find_dups( server_bin_jars, at_risk_jars ) ) at_risk_jars = at_risk_jars - kill_me; kill_me.concat( find_dups( server_server_jars, at_risk_jars ) ) at_risk_jars = at_risk_jars - kill_me; kill_me.concat( find_dups( server_common_jars, at_risk_jars ) ) at_risk_jars = at_risk_jars - kill_me; kill_me.concat( find_dups( jars_in_ant_home_lib, at_risk_jars ) ) puts "kill these jars: " kill_me.each{ | j | puts j.path # puts `svn delete #{j.path}` }