utils 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +68 -0
- data/VERSION +1 -0
- data/bin/chroot-exec +12 -0
- data/bin/chroot-libs +18 -0
- data/bin/classify +37 -0
- data/bin/discover +137 -0
- data/bin/edit +74 -0
- data/bin/errf +32 -0
- data/bin/git-empty +8 -0
- data/bin/myex +90 -0
- data/bin/number_files +26 -0
- data/bin/same_files +37 -0
- data/bin/search +205 -0
- data/bin/sedit +3 -0
- data/bin/sshscreen +68 -0
- data/bin/term +21 -0
- data/bin/unquarantine_apps +8 -0
- data/bin/untest +17 -0
- data/bin/utils-install-config +10 -0
- data/bin/vacuum_firefox_sqlite +22 -0
- data/bin/xmp +74 -0
- data/lib/utils.rb +8 -0
- data/lib/utils/config.rb +23 -0
- data/lib/utils/config/gdb/asm +179 -0
- data/lib/utils/config/gdb/ruby +528 -0
- data/lib/utils/config/gdbinit +8 -0
- data/lib/utils/config/irbrc +455 -0
- data/lib/utils/config/rdebugrc +2 -0
- data/lib/utils/config/screenrc +143 -0
- data/lib/utils/config/vim/autoload/Align.vim +1029 -0
- data/lib/utils/config/vim/autoload/AlignMaps.vim +330 -0
- data/lib/utils/config/vim/autoload/rails.vim +4744 -0
- data/lib/utils/config/vim/autoload/rubycomplete.vim +801 -0
- data/lib/utils/config/vim/autoload/sqlcomplete.vim +741 -0
- data/lib/utils/config/vim/autoload/vimball.vim +750 -0
- data/lib/utils/config/vim/colors/flori.vim +113 -0
- data/lib/utils/config/vim/compiler/eruby.vim +40 -0
- data/lib/utils/config/vim/compiler/ruby.vim +67 -0
- data/lib/utils/config/vim/compiler/rubyunit.vim +34 -0
- data/lib/utils/config/vim/ftdetect/ragel.vim +2 -0
- data/lib/utils/config/vim/ftdetect/ruby.vim +17 -0
- data/lib/utils/config/vim/ftplugin/eruby.vim +100 -0
- data/lib/utils/config/vim/ftplugin/ruby.vim +260 -0
- data/lib/utils/config/vim/ftplugin/xml.vim +941 -0
- data/lib/utils/config/vim/indent/IndentAnything_html.vim +35 -0
- data/lib/utils/config/vim/indent/eruby.vim +77 -0
- data/lib/utils/config/vim/indent/javascript.vim +116 -0
- data/lib/utils/config/vim/indent/ruby.vim +377 -0
- data/lib/utils/config/vim/plugin/AlignMapsPlugin.vim +242 -0
- data/lib/utils/config/vim/plugin/AlignPlugin.vim +41 -0
- data/lib/utils/config/vim/plugin/Decho.vim +592 -0
- data/lib/utils/config/vim/plugin/IndentAnything.vim +675 -0
- data/lib/utils/config/vim/plugin/bufexplorer.vim +1144 -0
- data/lib/utils/config/vim/plugin/cecutil.vim +482 -0
- data/lib/utils/config/vim/plugin/fugitive.vim +1703 -0
- data/lib/utils/config/vim/plugin/lusty-explorer.vim +1509 -0
- data/lib/utils/config/vim/plugin/rails.vim +340 -0
- data/lib/utils/config/vim/plugin/rubyextra.vim +193 -0
- data/lib/utils/config/vim/plugin/surround.vim +628 -0
- data/lib/utils/config/vim/plugin/taglist.vim +4546 -0
- data/lib/utils/config/vim/plugin/test/IndentAnything/test.js +131 -0
- data/lib/utils/config/vim/plugin/vimballPlugin.vim +40 -0
- data/lib/utils/config/vim/syntax/Decho.vim +101 -0
- data/lib/utils/config/vim/syntax/eruby.vim +73 -0
- data/lib/utils/config/vim/syntax/javascript.vim +246 -0
- data/lib/utils/config/vim/syntax/ragel.vim +165 -0
- data/lib/utils/config/vim/syntax/ruby.vim +367 -0
- data/lib/utils/config/vimrc +461 -0
- data/lib/utils/file.rb +49 -0
- data/lib/utils/find.rb +54 -0
- data/lib/utils/md5.rb +23 -0
- data/lib/utils/patterns.rb +34 -0
- data/lib/utils/version.rb +8 -0
- data/utils.gemspec +33 -0
- metadata +183 -0
data/Rakefile
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
begin
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
require 'rake/clean'
|
6
|
+
require 'rbconfig'
|
7
|
+
include Config
|
8
|
+
|
9
|
+
PKG_NAME = 'utils'
|
10
|
+
PKG_VERSION = File.read('VERSION').chomp
|
11
|
+
PKG_FILES = Dir['**/*']#FileList['**/*'].exclude(/(CVS|\.svn|pkg|.git*)/)
|
12
|
+
PKG_FILES.reject! { |f| f =~ /\Apkg/ }
|
13
|
+
|
14
|
+
if defined? Gem
|
15
|
+
spec = Gem::Specification.new do |s|
|
16
|
+
s.name = PKG_NAME
|
17
|
+
s.version = PKG_VERSION
|
18
|
+
s.summary = "Some useful command line utilities"
|
19
|
+
s.description = "This ruby gem provides some useful command line utilities"
|
20
|
+
|
21
|
+
s.files = PKG_FILES
|
22
|
+
|
23
|
+
s.require_path = 'lib'
|
24
|
+
|
25
|
+
s.bindir = "bin"
|
26
|
+
s.executables.concat Dir['bin/*'].map { |f| File.basename(f) }
|
27
|
+
s.add_dependency 'spruz'
|
28
|
+
s.add_dependency 'term-ansicolor'
|
29
|
+
|
30
|
+
s.author = "Florian Frank"
|
31
|
+
s.email = "flori@ping.de"
|
32
|
+
s.homepage = "http://flori.github.com/utils"
|
33
|
+
end
|
34
|
+
|
35
|
+
task :gemspec do
|
36
|
+
File.open('utils.gemspec', 'w') do |output|
|
37
|
+
output.write spec.to_ruby
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
42
|
+
pkg.need_tar = true
|
43
|
+
pkg.package_files += PKG_FILES
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
desc m = "Writing version information for #{PKG_VERSION}"
|
48
|
+
task :version do
|
49
|
+
puts m
|
50
|
+
File.open(File.join('lib', PKG_NAME, 'version.rb'), 'w') do |v|
|
51
|
+
v.puts <<EOT
|
52
|
+
module Utils
|
53
|
+
# Utils version
|
54
|
+
VERSION = '#{PKG_VERSION}'
|
55
|
+
VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
|
56
|
+
VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
|
57
|
+
VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
|
58
|
+
VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
|
59
|
+
end
|
60
|
+
EOT
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
desc "Default task: write version and test"
|
65
|
+
task :default => [ :version, :test ]
|
66
|
+
|
67
|
+
desc "Prepare a release"
|
68
|
+
task :release => [ :clean, :version, :gemspec, :package ]
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/bin/chroot-exec
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
DIR=$1
|
3
|
+
test -z "$DIR" && exit 1
|
4
|
+
PRG=$2
|
5
|
+
test -z "$PRG" && PRG=/bin/bash
|
6
|
+
mount -t proc none $DIR/proc
|
7
|
+
mount -o bind /dev $DIR/dev
|
8
|
+
[ -e "$DIR/etc/resolv.conf" ] && cp -vLf "$DIR/etc/resolv.conf" "$DIR/etc/resolv.conf.bak"
|
9
|
+
cp -vLf /etc/resolv.conf "$DIR/etc/resolv.conf"
|
10
|
+
chroot $DIR $PRG
|
11
|
+
umount $DIR/proc
|
12
|
+
umount $DIR/dev
|
data/bin/chroot-libs
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
include FileUtils::Verbose
|
5
|
+
|
6
|
+
msg = "Usage: #$0 EXECUTABLE DIR [LIB ..]"
|
7
|
+
executable = ARGV.shift or fail msg
|
8
|
+
dir = ARGV.shift or fail msg
|
9
|
+
dir = File.expand_path dir
|
10
|
+
mkdir_p dir
|
11
|
+
|
12
|
+
executable = `which #{executable}`.chomp
|
13
|
+
libs = `ldd #{executable}`.gsub(/^(?:.*?\s+=>\s+|\s+)(.*?)\(.*/, '\1').grep(/\S/).map { |x| x.strip }
|
14
|
+
libs.concat ARGV
|
15
|
+
cd dir
|
16
|
+
for l in libs
|
17
|
+
cp l, File.basename(l)
|
18
|
+
end
|
data/bin/classify
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spruz/go'
|
4
|
+
include Spruz::GO
|
5
|
+
|
6
|
+
class ::String
|
7
|
+
def camelize(first_letter_in_uppercase = true)
|
8
|
+
if first_letter_in_uppercase
|
9
|
+
gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
10
|
+
else
|
11
|
+
self[0].chr.downcase + camelize(self)[1..-1]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def underscore
|
16
|
+
word = dup
|
17
|
+
word.gsub!(/::/, '/')
|
18
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
19
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
20
|
+
word.tr!("-", "_")
|
21
|
+
word.downcase!
|
22
|
+
word
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
opts = go 'bd'
|
27
|
+
|
28
|
+
string = ARGV.shift or fail "need a class/filepath/filename"
|
29
|
+
|
30
|
+
if opts['d']
|
31
|
+
string = string.sub(/.*::/, '') if opts['b']
|
32
|
+
print string.underscore + '.rb'
|
33
|
+
else
|
34
|
+
string = File.basename(string) if opts['b']
|
35
|
+
string = string.gsub(/#{Regexp.quote(File.extname(string))}\Z/, '')
|
36
|
+
print string.camelize
|
37
|
+
end
|
data/bin/discover
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'utils'
|
4
|
+
include Utils::Patterns
|
5
|
+
require 'term/ansicolor'
|
6
|
+
require 'spruz/xt'
|
7
|
+
|
8
|
+
class ::String
|
9
|
+
include Term::ANSIColor
|
10
|
+
end
|
11
|
+
|
12
|
+
class ::File
|
13
|
+
include Utils::FileXt
|
14
|
+
end
|
15
|
+
|
16
|
+
class Finder
|
17
|
+
include Utils::Find
|
18
|
+
|
19
|
+
def initialize(opts = {})
|
20
|
+
@args = opts[:args] || {}
|
21
|
+
@roots = opts[:roots] || []
|
22
|
+
pattern_opts = opts.subhash(:pattern) | {
|
23
|
+
:cset => @args['a'],
|
24
|
+
:icase => @args['i'],
|
25
|
+
}
|
26
|
+
@pattern = @args['r'] ?
|
27
|
+
RegexpPattern.new(pattern_opts) :
|
28
|
+
FuzzyPattern.new(pattern_opts)
|
29
|
+
@directory = @args['d']
|
30
|
+
@only_directory = @args['D']
|
31
|
+
@pathes = []
|
32
|
+
end
|
33
|
+
|
34
|
+
attr_reader :pathes
|
35
|
+
|
36
|
+
def attempt_match?(path)
|
37
|
+
stat = File.stat(path)
|
38
|
+
stat.symlink? and stat = File.lstat(path)
|
39
|
+
if @only_directory
|
40
|
+
stat.directory?
|
41
|
+
elsif @directory
|
42
|
+
stat.directory? || stat.file? && (stat.size == 0 || File.ascii?(path))
|
43
|
+
else
|
44
|
+
stat.file? && (stat.size == 0 || File.ascii?(path))
|
45
|
+
end
|
46
|
+
rescue SystemCallError => e
|
47
|
+
warn "Caught #{e.class}: #{e}"
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def search
|
52
|
+
pathes = []
|
53
|
+
find(*@roots) { |file| pathes << file }
|
54
|
+
pathes.flatten!
|
55
|
+
pathes.uniq!
|
56
|
+
pathes.map! { |p| a = File.split(p) ; a.unshift(p) ; a }
|
57
|
+
pathes = pathes.map! do |path, dir, file|
|
58
|
+
if do_match = attempt_match?(path) and $DEBUG
|
59
|
+
warn "Attempt match of #{path.inspect}"
|
60
|
+
end
|
61
|
+
if do_match and match = @pattern.match(file)
|
62
|
+
if FuzzyPattern === @pattern
|
63
|
+
current = 0
|
64
|
+
bold_file = ''
|
65
|
+
score, e = 0, 0
|
66
|
+
for i in 1...(match.size)
|
67
|
+
match[i] or next
|
68
|
+
b = match.begin(i)
|
69
|
+
bold_file << file[current...b]
|
70
|
+
bold_file << file[b, 1].bold
|
71
|
+
score += (b - e)
|
72
|
+
e = match.end(i)
|
73
|
+
current = b + 1
|
74
|
+
end
|
75
|
+
bold_file << match.post_match
|
76
|
+
[ score, file.size, path, File.join(dir, bold_file) ]
|
77
|
+
else
|
78
|
+
bold_file = file[0...match.begin(0)] <<
|
79
|
+
file[match.begin(0)...match.end(0)].bold <<
|
80
|
+
file[match.end(0)..-1]
|
81
|
+
[ 0, file.size, path, File.join(dir, bold_file) ]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
pathes.compact!
|
86
|
+
@pathes, output = pathes.sort.transpose.values_at(-2, -1)
|
87
|
+
if !@args['e'] && output && !output.empty?
|
88
|
+
puts output
|
89
|
+
end
|
90
|
+
self
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
include Spruz::GO
|
95
|
+
|
96
|
+
def edit_files(pathes)
|
97
|
+
system "edit #{pathes.map { |x| "'#{x}'" } * ' '}"
|
98
|
+
end
|
99
|
+
|
100
|
+
def usage
|
101
|
+
puts <<-EOT
|
102
|
+
Usage: #{File.basename($0)} [OPTS] PATTERN [PATHES]
|
103
|
+
|
104
|
+
PATTERN is a pattern expression which is find the files. PATHES are the
|
105
|
+
directory and file pathes that are searched.
|
106
|
+
|
107
|
+
Options are
|
108
|
+
|
109
|
+
-r interpret PATTERN argument as regex not fuzzy
|
110
|
+
-d discover directorіes as well
|
111
|
+
-D discover only directories
|
112
|
+
-c disable color output
|
113
|
+
-i use case insensitive matches
|
114
|
+
-e open the matching files with edit command
|
115
|
+
-a CSET use only character set CSET from PATTERN
|
116
|
+
-h display this help
|
117
|
+
|
118
|
+
EOT
|
119
|
+
exit 1
|
120
|
+
end
|
121
|
+
|
122
|
+
args = go 'a:rdDcieh'
|
123
|
+
args['h'] and usage
|
124
|
+
pattern = ARGV.shift or usage
|
125
|
+
roots = (ARGV.empty? ? [ Dir.pwd ] : ARGV).map { |f| File.expand_path(f) }
|
126
|
+
|
127
|
+
Term::ANSIColor.coloring = (STDIN.tty? && ENV['TERM'] !~ /dumb/) && !args['c']
|
128
|
+
STDOUT.sync = true
|
129
|
+
|
130
|
+
finder = Finder.new(
|
131
|
+
:pattern => pattern,
|
132
|
+
:args => args,
|
133
|
+
:roots => roots
|
134
|
+
).search
|
135
|
+
if args['e']
|
136
|
+
edit_files finder.pathes
|
137
|
+
end
|
data/bin/edit
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
def cmd(*parts)
|
6
|
+
command = parts.inject([]) do |a, p|
|
7
|
+
case
|
8
|
+
when p == nil, p == []
|
9
|
+
a
|
10
|
+
when p.respond_to?(:to_ary)
|
11
|
+
a.concat p.to_ary
|
12
|
+
else
|
13
|
+
a << p.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
$DEBUG and warn command * ' '
|
17
|
+
command
|
18
|
+
end
|
19
|
+
|
20
|
+
case `uname -s`
|
21
|
+
when /\Adarwin/i
|
22
|
+
vim = if File.directory?('/Applications/Installed')
|
23
|
+
'/Applications/Installed/MacVim.app/Contents/MacOS/Vim'
|
24
|
+
elsif File.directory?('/Applications')
|
25
|
+
'/Applications/MacVim.app/Contents/MacOS/Vim'
|
26
|
+
else
|
27
|
+
fail "cannot find MacVim.app"
|
28
|
+
end
|
29
|
+
else
|
30
|
+
vim = 'gvim'
|
31
|
+
geometry = [ '-geometry', '80x59' ]
|
32
|
+
end
|
33
|
+
servername = [ '--servername', "G#{ENV['USER'].upcase}" ]
|
34
|
+
|
35
|
+
argv = ARGV.dup
|
36
|
+
if argv.empty?
|
37
|
+
if !STDIN.tty?
|
38
|
+
file = File.new(File.join(Dir.tmpdir, "edit_tmp.#$$"), 'w')
|
39
|
+
until STDIN.eof?
|
40
|
+
buffer = STDIN.read(8192)
|
41
|
+
file.write buffer
|
42
|
+
end
|
43
|
+
file.close
|
44
|
+
argv << file.path
|
45
|
+
elsif `#{vim} -g --serverlist`.split.member?(servername)
|
46
|
+
system *cmd(vim, '-g', geometry, servername, '--remote', "stupid_trick#{rand}")
|
47
|
+
sleep 1
|
48
|
+
exec *cmd(vim, '-g', geometry, servername, '--remote-send', '<ESC>:bw<CR>')
|
49
|
+
else
|
50
|
+
exec *cmd(vim, '-g', geometry, servername)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
unless argv.empty?
|
54
|
+
lineno_re = /^\s*([^:]+):(\d+)/
|
55
|
+
if argv.first =~ lineno_re
|
56
|
+
for a in argv
|
57
|
+
if a =~ lineno_re
|
58
|
+
system *cmd(vim, '-g', geometry, servername, '--remote', $1)
|
59
|
+
sleep 1
|
60
|
+
system *cmd(vim, '-g', geometry, servername, '--remote-send', "<ESC>:#$2<CR>")
|
61
|
+
else
|
62
|
+
system *cmd(vim, '-g', geometry, servername, '--remote', a)
|
63
|
+
end
|
64
|
+
if a != argv.last
|
65
|
+
STDOUT.print "Press enter to edit the next file."
|
66
|
+
STDOUT.flush
|
67
|
+
STDIN.gets
|
68
|
+
end
|
69
|
+
end
|
70
|
+
else
|
71
|
+
exec *cmd(vim, '-g', geometry, servername, '--remote', *argv)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
exit 0
|
data/bin/errf
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'term/ansicolor'
|
4
|
+
|
5
|
+
class String
|
6
|
+
include Term::ANSIColor
|
7
|
+
end
|
8
|
+
|
9
|
+
file = ARGV.shift
|
10
|
+
name = ARGV.shift
|
11
|
+
ENV['RUBYOPT'] = "#{ENV['RUBYOPT']} -Iext:lib:test:tests"
|
12
|
+
|
13
|
+
STDOUT.sync = true
|
14
|
+
begin
|
15
|
+
output =
|
16
|
+
if name
|
17
|
+
IO.popen("testrb -p '' -n #{name} #{file}", 'r')
|
18
|
+
else
|
19
|
+
IO.popen("testrb -p '' #{file}", 'r')
|
20
|
+
end
|
21
|
+
until output.eof?
|
22
|
+
line = output.readline.uncolored
|
23
|
+
new_line = line.chomp
|
24
|
+
if new_line.sub!(%r(^(?:\s|[\/\[])*([^:]+):(\d+):(.*))) { "#$1:#$2:#$3" }
|
25
|
+
puts new_line
|
26
|
+
else
|
27
|
+
puts line
|
28
|
+
end
|
29
|
+
end
|
30
|
+
ensure
|
31
|
+
output and output.close
|
32
|
+
end
|
data/bin/git-empty
ADDED
data/bin/myex
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'spruz'
|
4
|
+
include Spruz::GO
|
5
|
+
|
6
|
+
def usage
|
7
|
+
puts <<EOT
|
8
|
+
Usage: #{File.basename($0)} list|create|truncate|insert|replace [OPTION] [TABLES]
|
9
|
+
|
10
|
+
Commands are
|
11
|
+
- list: display all tables in the backup
|
12
|
+
|
13
|
+
- create: display all create table statements in the backup. If TABLES
|
14
|
+
are given, display only those statements.
|
15
|
+
-d if this OPTION is given, first drop the table (if it exists)
|
16
|
+
before creation.
|
17
|
+
|
18
|
+
- truncate: all tables or the given TABLES, if they exist.
|
19
|
+
|
20
|
+
- insert: extract insert statemnts from the backup. If TABLES are given,
|
21
|
+
extract only those statements for these TABLES.
|
22
|
+
-t if this OPTION is given, truncate the table, before starting
|
23
|
+
to insert.
|
24
|
+
|
25
|
+
- replace: extract insert statemnts from the backup, and convert them
|
26
|
+
into replace statements. If TABLES are given, extract only
|
27
|
+
those statements for these TABLES.
|
28
|
+
EOT
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def bell(n = 1, s = 1)
|
33
|
+
n.times do
|
34
|
+
STDERR.print "\a\b"
|
35
|
+
sleep s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
cmd = ARGV.shift or usage
|
40
|
+
opts = go('dtD')
|
41
|
+
|
42
|
+
STDOUT.sync = true
|
43
|
+
case cmd
|
44
|
+
when 'list'
|
45
|
+
STDIN.grep(/^CREATE TABLE `([^`]+)` \(/) { puts $1 }
|
46
|
+
when 'create'
|
47
|
+
STDIN.grep(/^CREATE TABLE `([^`]+)` \(/) do |stmt|
|
48
|
+
table = $1
|
49
|
+
next unless ARGV.empty? or ARGV.member?(table)
|
50
|
+
if opts['d']
|
51
|
+
puts "DROP TABLE IF EXISTS `#{table}`;"
|
52
|
+
warn "Dropped table #{table}."
|
53
|
+
end
|
54
|
+
line = stmt
|
55
|
+
puts line
|
56
|
+
until line =~ /;$/
|
57
|
+
line = STDIN.readline
|
58
|
+
puts line
|
59
|
+
end
|
60
|
+
warn "Created table #{table}."
|
61
|
+
end
|
62
|
+
when 'truncate'
|
63
|
+
STDIN.grep(/^CREATE TABLE `([^`]+)` \(/) do |stmt|
|
64
|
+
table = $1
|
65
|
+
next unless ARGV.empty? or ARGV.member?(table)
|
66
|
+
puts "TRUNCATE TABLE `#{table}`;"
|
67
|
+
warn "Truncated table #{table}."
|
68
|
+
end
|
69
|
+
when 'insert'
|
70
|
+
truncated = {}
|
71
|
+
STDIN.grep(/^INSERT INTO `(#{ARGV.empty? ? '[^`]+' : ARGV * '|'})`/) do |stmt|
|
72
|
+
table = $1
|
73
|
+
if opts['t'] and not truncated.key?(table)
|
74
|
+
puts "TRUNCATE TABLE `#{table}`;"
|
75
|
+
truncated[table] = true
|
76
|
+
warn "Truncated table #{table}."
|
77
|
+
end
|
78
|
+
puts stmt
|
79
|
+
warn "Inserted into table #{table}."
|
80
|
+
end
|
81
|
+
when 'replace'
|
82
|
+
STDIN.grep(/^INSERT INTO `(#{ARGV.empty? ? '[^`]+' : ARGV * '|'})`/) do |stmt|
|
83
|
+
table = $1
|
84
|
+
puts stmt.sub(/^INSERT INTO `(?:[^`]+)`/, "REPLACE INTO `#{table}`")
|
85
|
+
warn "Replaced into table #{table}."
|
86
|
+
end
|
87
|
+
else
|
88
|
+
usage
|
89
|
+
end
|
90
|
+
bell 3
|