mysql-inspector 0.0.1 → 0.0.2

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/README CHANGED
@@ -12,7 +12,7 @@ master, which adds a new column metal_grade.
12
12
 
13
13
  Start by storing the new state of your database.
14
14
 
15
- % mysql-inspector --target zippers_development --write
15
+ % mysql-inspector --target --write zippers_development
16
16
 
17
17
  This command says "store the state of the zippers_development database as my
18
18
  target version".
@@ -20,7 +20,7 @@ target version".
20
20
  Now, go back to your master branch and load its database into
21
21
  zippers_development, then dump the contents.
22
22
 
23
- % mysql-inspector --current zippers_development --write
23
+ % mysql-inspector --current --write zippers_development
24
24
 
25
25
  Now, in order to write database migrations for master to smoother let's see
26
26
  what changes occurred.
@@ -35,11 +35,11 @@ information is right here.
35
35
 
36
36
  mysql% alter table zippers add column metal_grade int(11) NOT NULL DEFAULT '0';
37
37
 
38
- Now we can compare the two again. This time we need to add the --force argument
39
- to say that it's ok to overwrite the previous dump.
38
+ Now we can compare the two again. This time we need to add the --force
39
+ argument to say that it's ok to overwrite the previous dump. We'll also go
40
+ ahead and run the diff.
40
41
 
41
- % mysql-inspector --current zippers_development --write --force
42
- % mysql-inspector --diff
42
+ % mysql-inspector --current --write zippers_development --force --diff
43
43
 
44
44
  No differences!
45
45
 
data/Rakefile CHANGED
@@ -6,6 +6,7 @@ begin
6
6
  gemspec.email = "ryan@fivesevensix.com"
7
7
  gemspec.homepage = "http://github.com/rcarver/mysql-inspector"
8
8
  gemspec.authors = ["Ryan Carver"]
9
+ gemspec.executables = ["mysql-inspector"]
9
10
  end
10
11
  Jeweler::GemcutterTasks.new
11
12
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
data/bin/mysql-inspector CHANGED
@@ -4,73 +4,86 @@ require 'optparse'
4
4
  require "lib/mysql-inspector"
5
5
 
6
6
  options = {
7
- :databases => [],
8
7
  :versions => [],
9
8
  :base_dir => ".",
10
9
  :diff => false,
11
10
  :grep => false,
12
- :dump => false,
11
+ :write => false,
13
12
  :clean => false
14
13
  }
15
14
 
16
15
  OptionParser.new do |opts|
17
- opts.banner = "Usage: ????"
16
+ opts.banner = "Usage: #{File.basename $0} [options]"
18
17
 
19
- opts.on("-c", "--current [db]") do |db_name|
18
+ opts.on("-c", "--current", "Perform the given action(s) with the current version.") do
20
19
  options[:versions] << "current"
21
- options[:databases] << db_name
22
20
  end
23
21
 
24
- opts.on("-t", "--target [db]") do |db_name|
22
+ opts.on("-t", "--target", "Perform the given action(s) with the target version.") do
25
23
  options[:versions] << "target"
26
- options[:databases] << db_name
27
24
  end
28
25
 
29
- opts.on("-w", "--write") do |yes|
30
- options[:dump] = true
26
+ opts.on("-w", "--write DB", "Store a schema for the database") do |db_name|
27
+ options[:write] = db_name
31
28
  end
32
29
 
33
- opts.on("-f", "--force") do |ok|
30
+ opts.on("-f", "--force", "Overwrite a previously stored schema") do |ok|
34
31
  options[:clean] = true
35
32
  end
36
33
 
37
- opts.on("-g", "--grep foo_id,bar_id") do |columns|
34
+ opts.on("-d", "--diff", "Output a comparison between the current and target schemas") do |info|
35
+ options[:diff] = true
36
+ end
37
+
38
+ opts.on("-g", "--grep foo_id,bar_id", "Find columns and/or indices matching the pattern") do |columns|
38
39
  options[:grep] = columns.split(",").collect { |c| c.strip }
39
40
  end
40
41
 
41
- opts.on("-d", "--diff") do |info|
42
- options[:diff] = true
42
+ opts.on("-h", "--help", "What you're looking at") do
43
+ puts opts
43
44
  end
44
45
 
45
- end.parse!
46
+ puts opts if ARGV.empty?
46
47
 
47
- options[:versions].compact!
48
- options[:databases].compact!
48
+ end.parse!
49
49
 
50
- options[:versions].collect! do |version|
51
- MysqlInspector::Dump.new(version, options[:base_dir])
50
+ def how_to_write_version(input)
51
+ "#{File.basename $0} --#{input.version} --write DB_NAME"
52
52
  end
53
53
 
54
- if options[:clean]
55
- options[:versions].each { |v| v.clean! }
56
- end
54
+ begin
57
55
 
58
- if options[:dump]
59
- raise "Missing database names" unless options[:versions].size == options[:databases].size
60
- options[:versions].zip(options[:databases]).each do |v, d|
61
- v.dump!(d)
56
+ options[:versions].collect! do |version|
57
+ MysqlInspector::Dump.new(version, options[:base_dir])
62
58
  end
63
- end
64
59
 
65
- if options[:grep]
66
- options[:versions].each do |v|
67
- grep = MysqlInspector::Grep.new(v)
68
- grep.find(STDOUT, *options[:grep])
60
+ if options[:clean]
61
+ options[:versions].each { |v| v.clean! }
62
+ end
63
+
64
+ if options[:write]
65
+ raise MysqlInspector::Precondition, "Please specify which version to write" if options[:versions].size == 0
66
+ raise MysqlInspector::Precondition, "I can only write one version at a time" unless options[:versions].size == 1
67
+ version = options[:versions].first
68
+ version.dump!(options[:write])
69
+ end
70
+
71
+ if options[:grep]
72
+ options[:versions].each do |v|
73
+ grep = MysqlInspector::Grep.new(v)
74
+ grep.find(STDOUT, *options[:grep])
75
+ end
76
+ end
77
+
78
+ if options[:diff]
79
+ inputs = ["current", "target"].collect { |version| MysqlInspector::Dump.new(version, options[:base_dir]) }
80
+ inputs.each do |input|
81
+ raise MysqlInspector::Precondition, "No #{input.version} version exists. Write one with `#{how_to_write_version(input)}`" unless input.exists?
82
+ end
83
+ comparison = MysqlInspector::Comparison.new(*inputs)
84
+ comparison.compare(STDOUT)
69
85
  end
70
- end
71
86
 
72
- if options[:diff]
73
- inputs = ["current", "target"].collect { |version| MysqlInspector::Dump.new(version, options[:base_dir]) }
74
- comparison = MysqlInspector::Comparison.new(*inputs)
75
- comparison.compare(STDOUT)
87
+ rescue MysqlInspector::Precondition => e
88
+ puts "#{e.message}."
76
89
  end
@@ -2,6 +2,8 @@ require "fileutils"
2
2
 
3
3
  module MysqlInspector
4
4
 
5
+ Precondition = Class.new(StandardError)
6
+
5
7
  module Config
6
8
  extend self
7
9
 
@@ -17,7 +19,7 @@ module MysqlInspector
17
19
  def mysqldump_path
18
20
  @mysqldump_path ||= begin
19
21
  path = `which mysqldump`.chomp
20
- raise "mysqldump was not in your path" if path.empty?
22
+ raise Precondition, "mysqldump was not in your path" if path.empty?
21
23
  path
22
24
  end
23
25
  end
@@ -57,8 +59,12 @@ module MysqlInspector
57
59
  FileUtils.rm_rf(dir)
58
60
  end
59
61
 
62
+ def exists?
63
+ File.exist?(dir)
64
+ end
65
+
60
66
  def dump!(db_name)
61
- raise "Destination exists! (#{dir.inspect})" if File.exist?(dir)
67
+ raise Precondition, "Can't overwrite an existing schema at #{dir.inspect}" if exists?
62
68
  @db_name = db_name
63
69
  FileUtils.mkdir_p(dir)
64
70
  Config.mysqldump("--no-data", "-T #{dir}", "--skip-opt", db_name).run!
@@ -72,7 +78,7 @@ module MysqlInspector
72
78
  end
73
79
 
74
80
  def read_db_name
75
- raise "No dump exists at #{dir.inspect}" unless File.exist?(info_file)
81
+ raise Precondition, "No dump exists at #{dir.inspect}" unless File.exist?(info_file)
76
82
  File.read(info_file).strip
77
83
  end
78
84
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mysql-inspector}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ryan Carver"]
12
- s.date = %q{2010-03-03}
12
+ s.date = %q{2010-03-05}
13
13
  s.default_executable = %q{mysql-inspector}
14
14
  s.email = %q{ryan@fivesevensix.com}
15
15
  s.executables = ["mysql-inspector"]
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ryan Carver
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-03 00:00:00 -08:00
17
+ date: 2010-03-05 00:00:00 -08:00
18
18
  default_executable: mysql-inspector
19
19
  dependencies: []
20
20