I have amassed a rather large set of icons for a RoR project I'm working. Initially I just checked all these files into the repository and everything was great. Gradually the list of icons (most of them not used) got longer and longer. Now I'm to the point where running rake assets:precompile
in my production environment takes forever. It's time to defriend all those unused icons.
The first step is to get a list of all the icons I actually use. Lucky for me, every icon is conveniently defined in a CSS file.
def referenced_icons(subdir) path_to_css = File.join(Dir.pwd, 'app/assets/stylesheets/all/icons.css.scss') # Open the CSS file and scan for lines referencing PNG # files and get just the filename used_icons = File.open(path_to_css) do |f| f.grep(/png/).map{|x| x[Regexp.new("(?<=#{subdir}\/).*.png")]} end # Beat the list into a smaller package used_icons.compact.uniq.sort end
Great! I can get a list of all the PNG files I actually use. Now who am I going to defriend.
def not_my_friends(subdir) used_icons = referenced_icons(subdir) path_to_pngs = File.join(Dir.pwd, "app/assets/images/icons/#{subdir}/*.png") # Reject files not in the used_icons list Dir.glob(path_to_pngs).reject do |f| b = Pathname(f).basename.to_s used_icons.include?(b) end end
And now for the defriending:
not_my_friends('some_dir').each{|x| File.delete(x)}
It feels good to lighten the load (by about 2400 unused icons!). Now back to work!
No comments:
Post a Comment