Files
metasploit-gs/tools/dev/retab.rb
T
Tod Beardsley f3ab6d1830 Retab should optionally keep local backups
Local backups are generally not needed since you can just git checkout
old versions anyway before committing. It was nice to have during dev
but generally shouldn't be done now.
2013-09-03 11:54:31 -05:00

57 lines
1.3 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# -*- coding: binary -*-
# Replace leading tabs with 2-width spaces.
# I'm sure there's a sed/awk/perl oneliner that's
# a million times better but this is more readable for me.
#
# Usage:
# metasploit-framework$ ./tools/dev/retab.rb [path]
#
# If local backups are desired, prepend with "MSF_RETAB_BACKUPS" set,
# like so:
# metasploit-framework$ MSF_RETAB_BACKUPS=1 ./tools/dev/retab.rb [path]
require 'fileutils'
require 'find'
dir = ARGV[0] || "."
keep_backups = !!(ENV['MSF_RETAB_BACKUPS'] || ENV['MSF_RETAB_BACKUP'])
puts "Keeping .notab backups" if keep_backups
raise ArgumentError, "Need a filename or directory" unless (dir and File.readable? dir)
Find.find(dir) do |infile|
next unless File.file? infile
next unless infile =~ /rb$/
outfile = infile
if keep_backups
backup = "#{infile}.notab"
FileUtils.cp infile, backup
end
data = File.open(infile, "rb") {|f| f.read f.stat.size}
fixed = []
data.each_line do |line|
fixed << line
next unless line =~ /^\x09/
index = []
i = 0
line.each_char do |char|
break unless char =~ /[\x20\x09]/
index << i if char == "\x09"
i += 1
end
index.reverse.each do |idx|
line[idx] = " "
end
fixed[-1] = line
end
fh = File.open(outfile, "wb")
fh.write fixed.join
fh.close
puts "Retabbed #{fh.path}"
end