rusky 0.2.2 → 0.2.3
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/.travis.yml +2 -2
- data/lib/rubygems_plugin.rb +2 -0
- data/lib/rusky.rb +26 -110
- data/lib/rusky/cli.rb +2 -0
- data/lib/rusky/hook.rb +124 -0
- data/lib/rusky/hooks.rb +65 -0
- data/lib/rusky/setting.rb +44 -0
- data/lib/rusky/task.rb +5 -30
- data/lib/rusky/version.rb +3 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2481de2ebd82496ba818a663ad9939ca9bf62bf
|
4
|
+
data.tar.gz: 96c97ed651c2317205e24851be6ca21044f8d828
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad6a71c3a2c76724f35a796f04222c54e8b84d67d5078ddc34553c3ccc3e1b3ee47265e6c48b445035c7f1ef02627aac17ae6a9e314363f387fb7cc8cf1962f0
|
7
|
+
data.tar.gz: b6ac28dd6aaca658bb5c9d60d455c62b8d195f55c9912d40c667f2e98b8ca4ffa6d14d80a08d47bc6166acaee100b07ccc359d9cffc438c80553946919eeef15
|
data/.travis.yml
CHANGED
data/lib/rubygems_plugin.rb
CHANGED
data/lib/rusky.rb
CHANGED
@@ -1,134 +1,50 @@
|
|
1
|
-
require 'rusky/version'
|
2
1
|
require 'rusky/cli'
|
2
|
+
require 'rusky/hook'
|
3
|
+
require 'rusky/hooks'
|
4
|
+
require 'rusky/setting'
|
5
|
+
require 'rusky/version'
|
3
6
|
require 'yaml'
|
4
7
|
require 'fileutils'
|
5
8
|
|
6
9
|
module Rusky
|
7
|
-
HOOKS = %w[
|
8
|
-
applypatch-msg
|
9
|
-
pre-applypatch
|
10
|
-
post-applypatch
|
11
|
-
pre-commit
|
12
|
-
prepare-commit-msg
|
13
|
-
commit-msg
|
14
|
-
post-commit
|
15
|
-
pre-rebase
|
16
|
-
post-checkout
|
17
|
-
post-merge
|
18
|
-
pre-push
|
19
|
-
pre-receive
|
20
|
-
update
|
21
|
-
post-receive
|
22
|
-
post-update
|
23
|
-
push-to-checkout
|
24
|
-
pre-auto-gc
|
25
|
-
post-rewrite
|
26
|
-
sendemail-validate
|
27
|
-
].freeze
|
28
|
-
|
29
10
|
def self.install
|
30
|
-
cwd =
|
11
|
+
cwd = current_work_directory_name
|
31
12
|
|
32
|
-
|
33
|
-
|
34
|
-
puts "can't find .git directory, skipping Git hooks installation"
|
13
|
+
unless processable?(cwd)
|
14
|
+
puts "rusky > can't find .git directory, so skipping rusky process"
|
35
15
|
return
|
36
16
|
end
|
37
17
|
|
38
|
-
|
39
|
-
|
40
|
-
FileUtils.mkdir_p hook_path
|
41
|
-
end
|
18
|
+
Rusky::Hooks.new(cwd).create
|
19
|
+
Rusky::Setting.new(cwd).create
|
42
20
|
|
43
|
-
|
44
|
-
create_hook(hook_name, hook_path, cwd)
|
45
|
-
end
|
46
|
-
|
47
|
-
rusky_setting_file_path = File.join(cwd, '.rusky')
|
48
|
-
if !File.exists? rusky_setting_file_path
|
49
|
-
File.write(rusky_setting_file_path, '')
|
50
|
-
end
|
21
|
+
puts "rusky > installation is done. enjoy!"
|
51
22
|
rescue => e
|
52
|
-
puts "unexpected error happened: #{e.inspect}"
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.create_hook(hook_name, hook_path, cwd)
|
56
|
-
script = get_hook_script(hook_name, cwd)
|
57
|
-
filename = File.join(hook_path, hook_name)
|
58
|
-
|
59
|
-
if File.exists? filename
|
60
|
-
if File.read(filename).include? 'rusky'
|
61
|
-
# Overwrite
|
62
|
-
write(filename, script)
|
63
|
-
else
|
64
|
-
# Keep user original Git hook
|
65
|
-
end
|
66
|
-
else
|
67
|
-
write(filename, script)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.write(filename, script)
|
72
|
-
File.write filename, script
|
73
|
-
FileUtils.chmod(0755, filename)
|
23
|
+
puts "rusky > unexpected error happened: #{e.inspect}"
|
74
24
|
end
|
75
25
|
|
76
|
-
def self.get_hook_script(hook_name, cwd)
|
77
|
-
no_verify_message = if hook_name == 'prepare-commit-msg'
|
78
|
-
'(cannot be bypassed with --no-verify due to Git specs)'
|
79
|
-
else
|
80
|
-
'(add --no-verify to bypass)'
|
81
|
-
end
|
82
|
-
|
83
|
-
rake_task_name = "rusky:#{hook_name.gsub('-', '_')}"
|
84
|
-
|
85
|
-
<<~EOS
|
86
|
-
#!/bin/sh
|
87
|
-
#rusky #{Rusky::VERSION}
|
88
|
-
has_hook_script () {
|
89
|
-
[ -f .rusky ] && cat .rusky | grep -q "$1:"
|
90
|
-
}
|
91
|
-
cd "#{cwd}"
|
92
|
-
# Check if #{hook_name} script is defined, skip if not
|
93
|
-
has_hook_script #{hook_name} || exit 0
|
94
|
-
|
95
|
-
# Export Git hook params
|
96
|
-
export GIT_PARAMS="$*"
|
97
|
-
# Run command
|
98
|
-
echo "rusky > #{hook_name} Git hook is running"
|
99
|
-
echo "rusky > bundle exec rake #{rake_task_name}"
|
100
|
-
echo
|
101
|
-
bundle exec rake #{rake_task_name} || {
|
102
|
-
echo
|
103
|
-
echo "rusky > #{hook_name} Git hook failed #{no_verify_message}"
|
104
|
-
exit 1
|
105
|
-
}
|
106
|
-
EOS
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
26
|
def self.uninstall
|
111
|
-
cwd =
|
27
|
+
cwd = current_work_directory_name
|
112
28
|
|
113
|
-
|
114
|
-
|
29
|
+
unless processable?(cwd)
|
30
|
+
puts "rusky > can't find .git directory, so skipping rusky process"
|
31
|
+
return
|
115
32
|
end
|
116
33
|
|
117
|
-
|
118
|
-
|
119
|
-
File.delete(rusky_setting_file_path)
|
120
|
-
puts "rusky > removing .rusky file..."
|
121
|
-
end
|
34
|
+
Rusky::Hooks.new(cwd).delete
|
35
|
+
Rusky::Setting.new(cwd).delete
|
122
36
|
|
123
|
-
puts "rusky >
|
37
|
+
puts "rusky > uninstallation is done. please remove rake tasks for rusky if you have them"
|
124
38
|
puts "rusky > Thank you for using rusky!"
|
39
|
+
rescue => e
|
40
|
+
puts "rusky > unexpected error happened: #{e.inspect}"
|
125
41
|
end
|
126
42
|
|
127
|
-
def self.
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
43
|
+
def self.current_work_directory_name
|
44
|
+
`lsof -p #{Process.ppid} | grep cwd`.split(" ").last
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.processable?(cwd)
|
48
|
+
File.exists? File.join(cwd, '.git')
|
133
49
|
end
|
134
50
|
end
|
data/lib/rusky/cli.rb
CHANGED
data/lib/rusky/hook.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'yaml'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
module Rusky
|
8
|
+
class Hook
|
9
|
+
include Rake::DSL if defined? Rake::DSL
|
10
|
+
|
11
|
+
attr_reader :hook_name, :cwd, :filename, :setting
|
12
|
+
|
13
|
+
def initialize(hook_name, cwd, setting=nil)
|
14
|
+
@hook_name = hook_name
|
15
|
+
@cwd = cwd
|
16
|
+
@filename = File.join(@cwd, '.git', 'hooks', hook_name)
|
17
|
+
@setting = setting
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
if !exists?
|
22
|
+
puts "rusky > creating #{hook_name} hook script..."
|
23
|
+
write
|
24
|
+
else
|
25
|
+
if is_rusky_hook?
|
26
|
+
puts "rusky > overwriting #{hook_name} hook script because also existing one is created by rusky."
|
27
|
+
write
|
28
|
+
else
|
29
|
+
puts "rusky > skip creating #{hook_name} hook script because existing one is created by you or other tool."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete
|
36
|
+
if !exists?
|
37
|
+
puts "rusky > skip deleting #{hook_name} hook script since there is no git hook file."
|
38
|
+
else
|
39
|
+
if is_rusky_hook?
|
40
|
+
puts "rusky > removing #{hook_name} hook script..."
|
41
|
+
File.delete(filename)
|
42
|
+
else
|
43
|
+
puts "rusky > skip deleting #{hook_name} hook script because existing one is created by you or other tool."
|
44
|
+
end
|
45
|
+
end
|
46
|
+
self
|
47
|
+
end
|
48
|
+
|
49
|
+
def define_task
|
50
|
+
# prioritize existing user hook
|
51
|
+
if Rake::Task.task_defined? rake_task_name
|
52
|
+
puts "rusky > skip creating a new rake task since the task for #{hook_name} is already defined."
|
53
|
+
return
|
54
|
+
end
|
55
|
+
|
56
|
+
commands = setting&.commands_for hook_name
|
57
|
+
|
58
|
+
task "#{rake_task_name}" do
|
59
|
+
if commands.empty?
|
60
|
+
puts "rusky > No command for #{hook_name} is defined in .rusky file"
|
61
|
+
next
|
62
|
+
end
|
63
|
+
|
64
|
+
commands.each do |command|
|
65
|
+
puts "rusky > #{command}"
|
66
|
+
system(command) || raise("rusky > #{command} failed")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def rake_task_name
|
74
|
+
@rake_task_name ||= "rusky:#{hook_name.gsub('-', '_')}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def exists?
|
78
|
+
@exists ||= File.exists?(filename)
|
79
|
+
end
|
80
|
+
|
81
|
+
def is_rusky_hook?
|
82
|
+
@is_rusky_hook ||= exists? && File.read(filename).include?('rusky')
|
83
|
+
end
|
84
|
+
|
85
|
+
def write
|
86
|
+
File.write filename, hook_script
|
87
|
+
FileUtils.chmod(0755, filename)
|
88
|
+
end
|
89
|
+
|
90
|
+
def no_verify_message
|
91
|
+
can_bypass? ? '(add --no-verify to bypass)' : '(cannot be bypassed with --no-verify due to Git specs)'
|
92
|
+
end
|
93
|
+
|
94
|
+
def can_bypass?
|
95
|
+
hook_name != 'prepare-commit-msg'
|
96
|
+
end
|
97
|
+
|
98
|
+
def hook_script
|
99
|
+
<<~EOS
|
100
|
+
#!/bin/sh
|
101
|
+
#rusky #{Rusky::VERSION}
|
102
|
+
has_hook_script () {
|
103
|
+
[ -f .rusky ] && cat .rusky | grep -q "$1:"
|
104
|
+
}
|
105
|
+
cd "#{cwd}"
|
106
|
+
# Check if #{hook_name} script is defined, skip if not
|
107
|
+
has_hook_script #{hook_name} || exit 0
|
108
|
+
|
109
|
+
# Export Git hook params
|
110
|
+
export GIT_PARAMS="$*"
|
111
|
+
# Run command
|
112
|
+
echo "rusky > #{hook_name} Git hook is running"
|
113
|
+
echo "rusky > bundle exec rake #{rake_task_name}"
|
114
|
+
echo
|
115
|
+
bundle exec rake #{rake_task_name} || {
|
116
|
+
echo
|
117
|
+
echo "rusky > #{hook_name} Git hook failed #{no_verify_message}"
|
118
|
+
exit 1
|
119
|
+
}
|
120
|
+
EOS
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
data/lib/rusky/hooks.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rusky'
|
4
|
+
require 'rusky/hook'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
module Rusky
|
8
|
+
class Hooks
|
9
|
+
DIR_NAME = 'hooks'
|
10
|
+
|
11
|
+
HOOK_NAMES = %w[
|
12
|
+
applypatch-msg
|
13
|
+
pre-applypatch
|
14
|
+
post-applypatch
|
15
|
+
pre-commit
|
16
|
+
prepare-commit-msg
|
17
|
+
commit-msg
|
18
|
+
post-commit
|
19
|
+
pre-rebase
|
20
|
+
post-checkout
|
21
|
+
post-merge
|
22
|
+
pre-push
|
23
|
+
pre-receive
|
24
|
+
update
|
25
|
+
post-receive
|
26
|
+
post-update
|
27
|
+
push-to-checkout
|
28
|
+
pre-auto-gc
|
29
|
+
post-rewrite
|
30
|
+
sendemail-validate
|
31
|
+
].freeze
|
32
|
+
|
33
|
+
attr_reader :cwd, :dir_name, :hooks
|
34
|
+
|
35
|
+
def initialize(cwd, setting=nil)
|
36
|
+
@cwd = cwd
|
37
|
+
@dir_name = File.join(cwd, '.git', 'hooks')
|
38
|
+
@hooks = HOOK_NAMES.map { |hook_name| Rusky::Hook.new(hook_name, cwd, setting) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def create
|
42
|
+
mkdir unless exists?
|
43
|
+
hooks.each(&:create)
|
44
|
+
end
|
45
|
+
|
46
|
+
def delete
|
47
|
+
return unless exists?
|
48
|
+
hooks.each(&:delete)
|
49
|
+
end
|
50
|
+
|
51
|
+
def define_tasks
|
52
|
+
hooks.each(&:define_task)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def exists?
|
58
|
+
@exists ||= File.exists? dir_name
|
59
|
+
end
|
60
|
+
|
61
|
+
def mkdir
|
62
|
+
FileUtils.mkdir_p dir_name
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module Rusky
|
6
|
+
class Setting
|
7
|
+
attr_reader :cwd, :filename
|
8
|
+
|
9
|
+
FILENAME = '.rusky'
|
10
|
+
|
11
|
+
def initialize(cwd)
|
12
|
+
@cwd = cwd
|
13
|
+
@filename = File.join(@cwd, FILENAME)
|
14
|
+
@yaml = exists? ? YAML.load_file(filename) : Hash.new([])
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
if !exists?
|
19
|
+
puts "rusky > creating .rusky file..."
|
20
|
+
File.write(filename, '')
|
21
|
+
end
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete
|
26
|
+
if exists?
|
27
|
+
puts "rusky > deleting .rusky file..."
|
28
|
+
File.delete(filename)
|
29
|
+
end
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def commands_for(hook_name)
|
34
|
+
@yaml[hook_name]
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def exists?
|
40
|
+
@exists ||= File.exists? filename
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
data/lib/rusky/task.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'yaml'
|
3
4
|
require 'rusky'
|
4
5
|
|
5
6
|
module Rusky
|
6
7
|
class Task
|
7
|
-
include Rake::DSL if defined? Rake::DSL
|
8
|
-
|
9
8
|
class << self
|
10
9
|
def install(base=nil)
|
11
10
|
new(base).install
|
@@ -13,36 +12,12 @@ module Rusky
|
|
13
12
|
end
|
14
13
|
|
15
14
|
def initialize(base=nil)
|
16
|
-
@
|
17
|
-
rusky_setting_file_path = File.join(@base, '.rusky')
|
18
|
-
@yaml = File.exists?(rusky_setting_file_path) ? YAML.load_file(File.join(@base, '.rusky')) : Hash.new([])
|
15
|
+
@cwd = base || Rusky.current_work_directory_name
|
19
16
|
end
|
20
17
|
|
21
18
|
def install
|
22
|
-
Rusky::
|
23
|
-
|
24
|
-
|
25
|
-
# prioritize existing user hook
|
26
|
-
next if Rake::Task.task_defined? rake_task_name
|
27
|
-
|
28
|
-
define_task hook_name, rake_task_name
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def define_task(hook_name, rake_task_name)
|
33
|
-
task "#{rake_task_name}" do
|
34
|
-
commands = @yaml[hook_name]
|
35
|
-
|
36
|
-
if commands.empty?
|
37
|
-
puts "rusky > No command for #{hook_name} is defined in .rusky file"
|
38
|
-
next
|
39
|
-
end
|
40
|
-
|
41
|
-
commands.each do |command|
|
42
|
-
puts "rusky > #{command}"
|
43
|
-
system(command) || raise("rusky > #{command} failed")
|
44
|
-
end
|
45
|
-
end
|
19
|
+
setting = Rusky::Setting.new(@cwd)
|
20
|
+
Rusky::Hooks.new(@cwd, setting).define_tasks
|
46
21
|
end
|
47
22
|
end
|
48
23
|
end
|
data/lib/rusky/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rusky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Masato Ohba
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -101,6 +101,9 @@ files:
|
|
101
101
|
- lib/rubygems_plugin.rb
|
102
102
|
- lib/rusky.rb
|
103
103
|
- lib/rusky/cli.rb
|
104
|
+
- lib/rusky/hook.rb
|
105
|
+
- lib/rusky/hooks.rb
|
106
|
+
- lib/rusky/setting.rb
|
104
107
|
- lib/rusky/task.rb
|
105
108
|
- lib/rusky/version.rb
|
106
109
|
- rusky.gemspec
|