hookup 1.2.2 → 1.2.5

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.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/README.markdown +10 -0
  3. data/hookup.gemspec +1 -1
  4. data/lib/hookup.rb +60 -13
  5. metadata +8 -11
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a003ee5a9f2e61b570aaf4d4006b37ac6269ced76eee42df20ab78ac930764de
4
+ data.tar.gz: 2c76b14b8d34af3b719051ca21ff175e9ad1209d99ec1bc3cc2e2123f4f851d1
5
+ SHA512:
6
+ metadata.gz: a7f7534b3ee8417f509699c602184156bb5347616c0904fff55245ac8c7a8ab5ce53cd9f64fa7c16d2d4d5b57c03f32d590385fc170fd9db64e5bdee1fd7a812
7
+ data.tar.gz: 28cfa49a9e6f3c06461ff5c04cc43fb14383812fbb966961e3e70567390cbd099ba5f1bf5067cfca960fc995615011b37f8ff734691be7a2fed2a5bc8ad02d53
data/README.markdown CHANGED
@@ -48,6 +48,16 @@ Each time there's a conflict in `db/schema.rb` on the
48
48
  `Rails::Schema.define` line, hookup resolves it in favor of the newer of
49
49
  the two versions.
50
50
 
51
+ ### Skip Hookup
52
+
53
+ Set the `SKIP_HOOKUP` environment variable to skip hookup.
54
+
55
+ SKIP_HOOKUP=1 git checkout master
56
+
57
+ ### Removing Hookup
58
+
59
+ hookup remove
60
+
51
61
  ChangeLog
52
62
  ---------
53
63
 
data/hookup.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "hookup"
5
- s.version = "1.2.2"
5
+ s.version = "1.2.5"
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.authors = ["Tim Pope"]
8
8
  s.email = ["code@tp"+'ope.net']
data/lib/hookup.rb CHANGED
@@ -36,27 +36,57 @@ class Hookup
36
36
  def git_dir
37
37
  unless @git_dir
38
38
  @git_dir = %x{git rev-parse --git-dir}.chomp
39
- raise Error, dir unless $?.success?
39
+ raise Error unless $?.success?
40
40
  end
41
41
  @git_dir
42
42
  end
43
43
 
44
+ def bundler?
45
+ !!ENV['BUNDLE_GEMFILE']
46
+ end
47
+
48
+ def make_command(command)
49
+ bundler? ? command.insert(0, "bundle exec ") : command
50
+ end
51
+
52
+ def post_checkout_file
53
+ File.join(git_dir, 'hooks', 'post-checkout')
54
+ end
55
+
56
+ def info_attributes_file
57
+ File.join(git_dir, 'info', 'attributes')
58
+ end
59
+
44
60
  def install
45
- append(File.join(git_dir, 'hooks', 'post-checkout'), 0777) do |body, f|
61
+ append(post_checkout_file, 0777) do |body, f|
46
62
  f.puts "#!/bin/bash" unless body
47
- f.puts %(hookup post-checkout "$@") if body !~ /hookup/
63
+ f.puts make_command(%(hookup post-checkout "$@")) if body !~ /hookup/
48
64
  end
49
65
 
50
- append(File.join(git_dir, 'info', 'attributes')) do |body, f|
66
+ append(info_attributes_file) do |body, f|
51
67
  map = 'db/schema.rb merge=railsschema'
52
68
  f.puts map unless body.to_s.include?(map)
53
69
  end
54
70
 
55
- system 'git', 'config', 'merge.railsschema.driver', 'hookup resolve-schema %A %O %B %L'
71
+ system 'git', 'config', 'merge.railsschema.driver', make_command('hookup resolve-schema %A %O %B %L')
56
72
 
57
73
  puts "Hooked up!"
58
74
  end
59
75
 
76
+ def remove
77
+ body = IO.readlines(post_checkout_file)
78
+ body.reject! { |item| item =~ /hookup/ }
79
+ File.open(post_checkout_file, 'w') { |file| file.puts body.join }
80
+
81
+ body = IO.readlines(info_attributes_file)
82
+ body.reject! { |item| item =~ /railsschema/ }
83
+ File.open(info_attributes_file, 'w') { |file| file.puts body.join }
84
+
85
+ system 'git', 'config', '--unset', 'merge.railsschema.driver'
86
+
87
+ puts "Hookup removed!"
88
+ end
89
+
60
90
  def append(file, *args)
61
91
  Dir.mkdir(File.dirname(file)) unless File.directory?(File.dirname(file))
62
92
  body = File.read(file) if File.exist?(file)
@@ -79,7 +109,13 @@ class Hookup
79
109
  end
80
110
 
81
111
  def schema_dir
82
- File.expand_path(env['HOOKUP_SCHEMA_DIR'], working_dir)
112
+ File.join(working_dir, env['HOOKUP_SCHEMA_DIR'])
113
+ end
114
+
115
+ def possible_schemas
116
+ %w(development_structure.sql schema.rb structure.sql).map do |file|
117
+ File.join schema_dir, file
118
+ end
83
119
  end
84
120
 
85
121
  def working_dir
@@ -115,7 +151,7 @@ class Hookup
115
151
  end
116
152
 
117
153
  def run
118
- return if env['GIT_REFLOG_ACTION'] =~ /^(?:pull|rebase)/
154
+ return if skipped? || env['GIT_REFLOG_ACTION'] =~ /^(?:pull|rebase)/
119
155
  unless partial?
120
156
  bundle
121
157
  migrate
@@ -146,7 +182,7 @@ class Hookup
146
182
  end
147
183
 
148
184
  def migrate
149
- schemas = %W(#{schema_dir}/schema.rb #{schema_dir}/development_structure.sql).select do |schema|
185
+ schemas = possible_schemas.select do |schema|
150
186
  status = %x{git diff --name-status #{old} #{new} -- #{schema}}.chomp
151
187
  rake 'db:create' if status =~ /^A/
152
188
  status !~ /^D/ && !status.empty?
@@ -194,7 +230,9 @@ class Hookup
194
230
 
195
231
  def rake(*args)
196
232
  Dir.chdir(working_dir) do
197
- if bundler?
233
+ if File.executable?('bin/rake')
234
+ system 'bin/rake', *args
235
+ elsif bundler?
198
236
  system 'bundle', 'exec', 'rake', *args
199
237
  else
200
238
  system 'rake', *args
@@ -202,19 +240,28 @@ class Hookup
202
240
  end
203
241
  end
204
242
 
243
+ def skipped?
244
+ env['SKIP_HOOKUP']
245
+ end
246
+
205
247
  end
206
248
 
207
249
  def resolve_schema(a, o, b, marker_size = 7)
208
250
  system 'git', 'merge-file', "--marker-size=#{marker_size}", a, o, b
209
251
  body = File.read(a)
210
- asd = "ActiveRecord::Schema.define"
211
- x = body.sub!(/^<+ .*\n#{asd}\(:version => (\d+)\) do\n=+\n#{asd}\(:version => (\d+)\) do\n>+ .*/) do
212
- "#{asd}(:version => #{[$1, $2].max}) do"
213
- end
252
+ resolve_schema_version body, ":version =>"
253
+ resolve_schema_version body, "version:"
214
254
  File.open(a, 'w') { |f| f.write(body) }
215
255
  if body.include?('<' * marker_size.to_i)
216
256
  raise Failure, 'Failed to automatically resolve schema conflict'
217
257
  end
218
258
  end
219
259
 
260
+ def resolve_schema_version(body, version)
261
+ asd = "ActiveRecord::Schema.define"
262
+ body.sub!(/^<+ .*\n#{asd}\(#{version} ([0-9_]+)\) do\n=+\n#{asd}\(#{version} ([0-9_]+)\) do\n>+ .*/) do
263
+ "#{asd}(#{version} #{[$1, $2].max}) do"
264
+ end
265
+ end
266
+
220
267
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hookup
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
5
- prerelease:
4
+ version: 1.2.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tim Pope
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-04 00:00:00.000000000 Z
11
+ date: 2022-06-27 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Automatically bundle and migrate your Rails app when switching branches,
15
14
  merging upstream changes, and bisecting.
@@ -20,7 +19,7 @@ executables:
20
19
  extensions: []
21
20
  extra_rdoc_files: []
22
21
  files:
23
- - .gitignore
22
+ - ".gitignore"
24
23
  - Gemfile
25
24
  - MIT-LICENSE
26
25
  - README.markdown
@@ -30,26 +29,24 @@ files:
30
29
  - lib/hookup.rb
31
30
  homepage: https://github.com/tpope/hookup
32
31
  licenses: []
32
+ metadata: {}
33
33
  post_install_message:
34
34
  rdoc_options: []
35
35
  require_paths:
36
36
  - lib
37
37
  required_ruby_version: !ruby/object:Gem::Requirement
38
- none: false
39
38
  requirements:
40
- - - ! '>='
39
+ - - ">="
41
40
  - !ruby/object:Gem::Version
42
41
  version: '0'
43
42
  required_rubygems_version: !ruby/object:Gem::Requirement
44
- none: false
45
43
  requirements:
46
- - - ! '>='
44
+ - - ">="
47
45
  - !ruby/object:Gem::Version
48
46
  version: '0'
49
47
  requirements: []
50
- rubyforge_project: hookup
51
- rubygems_version: 1.8.23
48
+ rubygems_version: 3.1.4
52
49
  signing_key:
53
- specification_version: 3
50
+ specification_version: 4
54
51
  summary: Automate the bundle/migration tedium of Rails with Git hooks
55
52
  test_files: []