f3ab6d1830
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.
57 lines
1.3 KiB
Ruby
Executable File
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
|