pronto-rails_migrations_annotated 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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/pronto/rails_migrations_annotated/version.rb +1 -1
- data/lib/pronto/rails_migrations_annotated.rb +50 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2b901020822988af989df4a5c7380a1d0888436b99a1b2ccd835e9b08a88875
|
4
|
+
data.tar.gz: 51392445670ec4052e0ad6790a6499cf71d62b4d5354a48e27df8ed036ab5f34
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b50a79d424571f695fe1faeb208ab10d0b474ab161d26c9128cfe355cbaf4de58000cb373daa64b234ac0bd0e2a7b8744ee2dec000f80785c673bdd067db353
|
7
|
+
data.tar.gz: 4b2b7867aced9e74a06c855337437b802407479d67bb805da19ec502079bdebe748e8f185f383c99338c74d9e9d8194461100c55374b0f1c93bd35a840610143
|
data/Gemfile.lock
CHANGED
@@ -12,6 +12,7 @@ module Pronto
|
|
12
12
|
|
13
13
|
check_migrations_mixed_with_code
|
14
14
|
check_migration_version_numbers
|
15
|
+
check_large_schema_diff
|
15
16
|
|
16
17
|
@messages
|
17
18
|
end
|
@@ -40,6 +41,23 @@ module Pronto
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
44
|
+
def diff_threshold
|
45
|
+
# TODO: some config for this?
|
46
|
+
200
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_large_schema_diff
|
50
|
+
return unless diff_threshold
|
51
|
+
|
52
|
+
if schema_patches.sum(&:additions) >= diff_threshold || schema_patches.sum(&:deletions) >= diff_threshold
|
53
|
+
add_message_at_patch(schema_patches.first, "Large schema diff, pay attention")
|
54
|
+
end
|
55
|
+
|
56
|
+
if structure_patches.sum(&:additions) >= diff_threshold || structure_patches.sum(&:deletions) >= diff_threshold
|
57
|
+
add_message_at_patch(structure_patches.first, "Large structure diff, pay attention")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
43
61
|
def check_migrations_mixed_with_code
|
44
62
|
return unless migration_patches.any? && non_migration_related_patches.any?
|
45
63
|
|
@@ -52,45 +70,46 @@ module Pronto
|
|
52
70
|
version_numbers = migration_patches.map { |patch| patch.delta.new_file[:path].sub(/^[^0-9]*([0-9]+).+/, '\1') }
|
53
71
|
|
54
72
|
schema_file_name = 'db/schema.rb'
|
55
|
-
if File.exist?(schema_file_name)
|
73
|
+
if File.exist?(schema_file_name) && !gitignored?(schema_file_name)
|
56
74
|
if schema_patches.none?
|
57
75
|
add_message_at_patch(migration_patches, "Migration file detected, but no changes in schema.rb", :error)
|
58
|
-
end
|
59
|
-
|
60
|
-
match = File.read(schema_file_name).match(%r{ActiveRecord::Schema.define\(version:\s*(?<version>[0-9_]+)\s*\)})
|
61
|
-
if match
|
62
|
-
schema_migration_version = match[:version]
|
63
|
-
schema_migration_version_clean = schema_migration_version.gsub(/[^0-9]/, '')
|
64
|
-
version_numbers.select { |version| version > schema_migration_version_clean }.each do |wrong_version|
|
65
|
-
add_message_at_patch(
|
66
|
-
migration_patches.first { |patch| patch.delta.new_file[:path].include?(wrong_version) },
|
67
|
-
"Migration version #{wrong_version} is above schema.rb version #{schema_migration_version}"
|
68
|
-
)
|
69
|
-
end
|
70
76
|
else
|
71
|
-
|
77
|
+
match = File.read(schema_file_name).match(%r{ActiveRecord::Schema.define\(version:\s*(?<version>[0-9_]+)\s*\)})
|
78
|
+
if match
|
79
|
+
schema_migration_version = match[:version]
|
80
|
+
schema_migration_version_clean = schema_migration_version.gsub(/[^0-9]/, '')
|
81
|
+
version_numbers.select { |version| version > schema_migration_version_clean }.each do |wrong_version|
|
82
|
+
add_message_at_patch(
|
83
|
+
migration_patches.first { |patch| patch.delta.new_file[:path].include?(wrong_version) },
|
84
|
+
"Migration version #{wrong_version} is above schema.rb version #{schema_migration_version}"
|
85
|
+
)
|
86
|
+
end
|
87
|
+
else
|
88
|
+
add_message_at_patch(migration_patches.first, "Cannot detect schema migration version", :warning)
|
89
|
+
end
|
72
90
|
end
|
73
91
|
end
|
74
92
|
|
75
93
|
structure_file_name = 'db/structure.sql'
|
76
|
-
if File.exist?(structure_file_name)
|
77
|
-
if structure_patches.none?
|
78
|
-
add_message_at_patch(migration_patches, "Migration file detected, but no changes in structure.sql", :error)
|
79
|
-
end
|
80
|
-
|
94
|
+
if File.exist?(structure_file_name) && !gitignored?(structure_file_name)
|
81
95
|
migration_line_regex = /\A\s*\('(?<version>[0-9]{14})'\)/
|
82
96
|
structure_file_lines = File.readlines(structure_file_name)
|
83
97
|
versions_from_schema = structure_file_lines.select{|line| line =~ migration_line_regex }
|
84
98
|
|
85
|
-
|
99
|
+
missing_from_structure = false
|
86
100
|
version_numbers.select { |version| versions_from_schema.none? { |strct_ver| strct_ver.include?(version) } }
|
87
101
|
.each do |wrong_version|
|
102
|
+
missing_from_structure = true
|
88
103
|
add_message_at_patch(
|
89
104
|
migration_patches.first { |patch| patch.delta.new_file[:path].include?(wrong_version) },
|
90
|
-
"Migration #{wrong_version} is missing from structure.sql"
|
105
|
+
"Migration #{wrong_version} is missing from structure.sql", :error
|
91
106
|
)
|
92
107
|
end
|
93
108
|
|
109
|
+
if structure_patches.none? && !missing_from_structure
|
110
|
+
add_message_at_patch(migration_patches, "Migration file detected, but no changes in structure.sql")
|
111
|
+
end
|
112
|
+
|
94
113
|
structure_patches.each do |patch|
|
95
114
|
patch.added_lines.each do |line|
|
96
115
|
next unless line.content.match?(migration_line_regex)
|
@@ -113,8 +132,9 @@ module Pronto
|
|
113
132
|
)
|
114
133
|
end
|
115
134
|
|
116
|
-
|
117
|
-
structure_file_lines.last
|
135
|
+
if structure_patches.any? &&
|
136
|
+
!(structure_file_lines.last(2) == ["\n", "\n"] && structure_file_lines[-3] != "\n") &&
|
137
|
+
!structure_file_lines.last.match?(/\A\s*[^\s]+\s*\n/)
|
118
138
|
add_message_at_patch(structure_patches.last,
|
119
139
|
"structure.sql must end with a newline or 2 empty lines", line: :last)
|
120
140
|
end
|
@@ -122,6 +142,13 @@ module Pronto
|
|
122
142
|
|
123
143
|
end
|
124
144
|
|
145
|
+
def gitignored?(path)
|
146
|
+
# TODO: get this from rugged (but it's not exposed to plugins) or make more compatible
|
147
|
+
`git check-ignore #{path}` != ""
|
148
|
+
rescue Errno::ENOENT # when git not present
|
149
|
+
nil
|
150
|
+
end
|
151
|
+
|
125
152
|
def migration_patches
|
126
153
|
# nb: there may be engines added to migrations_paths in config or database.yml
|
127
154
|
# but cannot check for this without more knowledge into the particular app
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pronto-rails_migrations_annotated
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vasily Fedoseyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pronto
|