hookspec 1.0.1 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: afc57729bc6b91c5eba0e84e859146e4186f6014
4
- data.tar.gz: 20c9320c3132f0eb7b828a4f7d7a8277d7492d8f
3
+ metadata.gz: 841483393b2aee20b0bf2547b0f8ccbfc36ccafe
4
+ data.tar.gz: c34b2e0bd560c367da38b76be5559c464bc1a6b0
5
5
  SHA512:
6
- metadata.gz: 7be531ad357f544dc8df8ec9f8a29595d69e1e924c5627abf1bcf09b3bd7bc8db1664b271327fde63c368f2e1e1b7c398adc4c69211b2a32a402e118cf388da9
7
- data.tar.gz: 4b47c06432e9d6f7aedc7955642bb8ec957b40813915f8cfbe284dc367e24decbee28525c7e4aeabc40c457a8530aca30395dab7fcd622a2cbfa54bf6eec4933
6
+ metadata.gz: 6dcf1d20a384fbae7c42fdafb9564d4649f50e4a66bb8d9ca4b161947a1e6c961adf0f68c810a6715547d7dc571d990f5600f31a149510b8e4377cd63717b073
7
+ data.tar.gz: 3b4cf3fe649ec433932608823b212390e9b0928fe596c80bc1c381a197a82fb71912683a624633cb5e9786681fcb6356641c353fe0c3d0257822ab53c712f69e
data/README.md CHANGED
@@ -3,7 +3,7 @@ hookspec
3
3
 
4
4
  ## Lastest version
5
5
 
6
- v1.0.0(beta)
6
+ v1.1.0(beta)
7
7
 
8
8
  ## About
9
9
 
@@ -25,15 +25,37 @@ After hookspec gem is installed, you can use 'hookspec' command. Execute the com
25
25
 
26
26
  New a spec file under git\_hooks/[hook\_type]/ named like _FILENAME_\_spec.rb
27
27
 
28
- # assert branch is not master branch
29
- require 'hookspec'
28
+ ### Sample: Check push branch
30
29
 
31
- describe "push" do
32
- let (:git_env) {HookSpec::GitEnv.new}
33
- it 'master branch can not be pushed' do
34
- expect(git_env).not_to be_branch('master')
30
+ ```ruby
31
+ # assert branch is not master branch
32
+ require 'hookspec'
33
+
34
+ describe "push" do
35
+ let (:git_env) {HookSpec::GitEnv.new}
36
+ it 'master branch can not be pushed' do
37
+ expect(git_env).not_to be_branch('master')
38
+ end
39
+ end
40
+ ```
41
+
42
+ ### Sample: Check with rubocop
43
+
44
+ `install rubocop first`
45
+
46
+ ```ruby
47
+ describe "rubocop check" do
48
+ let (:git_env) {HookSpec::GitEnv.new}
49
+ it 'rubocop must pass' do
50
+ git_env.diff(model: 'cached', filter: 'AM').each do |f|
51
+ if f.end_with?('.rb')
52
+ `rubocop #{f}`
53
+ expect($?).to be_nil
35
54
  end
36
55
  end
56
+ end
57
+ end
58
+ ```
37
59
 
38
60
  ## Supported hook\_type
39
61
 
@@ -62,15 +84,17 @@ New a spec file under git\_hooks/[hook\_type]/ named like _FILENAME_\_spec.rb
62
84
 
63
85
  #### how to validate include certain file or not
64
86
 
65
- it 'show not include certain files' do
66
- expect(git_env.diffs_of_local[:D]).not_to include_file('README.md')
87
+ it 'commit not delete certain files' do
88
+ expect(git_env.diff(model: 'cached', filter: 'D').not_to include_file('README.md')
67
89
  end
68
90
 
69
- Provide three diff type of diffs:
91
+ * use git\_env.diff(model: `model_name`, filter: `filters`)
92
+ * filters: A|C|D|M|R|T|U|X|B
70
93
 
71
- * git\_env.diffs\_of\_local: unstaged files hashed by status types(A|C|D|M|R|T|U|X|B)
72
- * git\_env.diffs\_of\_cached: cached files hashed by status types(A|C|D|M|R|T|U|X|B)
73
- * git\_env.diffs\_of\_commited: last commited files hashed by status types(A|C|D|M|R|T|U|X|B)
94
+ ```ruby
95
+ # get cached file list with filter 'AM'
96
+ git_env.diff(model: 'cached', filter: 'AM')
97
+ ```
74
98
 
75
99
  #### how to get git configure
76
100
 
@@ -4,84 +4,51 @@ module HookSpec
4
4
  AGAINST = '4b825dc642cb6eb9a060e54bf8d69288fbee4904'
5
5
 
6
6
  def initialize
7
- @current_branch = nil
8
- @cached_diffs_info = nil
9
- @commit_diffs_info = nil
10
- @local_diffs_info = nil
11
- @all_files = nil
12
7
  end
13
8
 
14
9
  def current_branch
15
- return @current_branch unless @current_branch.nil?
16
- @current_branch = `git rev-parse --abbrev-ref HEAD`.chomp!
10
+ `git rev-parse --abbrev-ref HEAD`.chomp
17
11
  end
18
12
 
19
13
  def files
20
- return @all_files unless @all_files.nil?
21
- @all_files = `git ls-files`.chomp!.split
14
+ `git ls-files`.chomp.split
22
15
  end
23
16
 
24
- # diff files with status
25
- def diffs_of_commit
26
- return @commit_diffs_info unless @commit_diffs_info.nil?
27
-
28
- against = get_against
29
-
30
- diff = `git diff HEAD^ HEAD --name-status`.chomp!
31
- @commit_diffs_info = classify(diff)
32
- end
33
-
34
- def diffs_of_cached
35
- return @cached_diffs_info unless @cached_diffs_info.nil?
36
-
37
- diff = `git diff --cached --name-status`.chomp!
38
- @cached_diffs_info = classify(diff)
39
- end
40
-
41
- def diffs_of_local
42
- return @local_diffs_info unless @local_diffs_info.nil?
43
-
44
- diff = `git diff --name-status`.chomp!
45
- @local_diffs_info = classify(diff)
17
+ # git diff {--cached} --name-only {--diff-filter=}
18
+ def diff model: nil, filter: nil
19
+ cmd = 'git diff '
20
+ if !model.nil? && model.downcase == 'cached'
21
+ cmd = cmd + '--cached '
22
+ end
23
+ cmd = cmd + '--name-only '
24
+ if !filter.nil?
25
+ cmd = cmd + '--diff-filter=' + filter
26
+ end
27
+ `#{cmd}`.chomp.split
46
28
  end
47
29
 
48
-
49
30
  # git confs
50
31
  def conf_of conf_name
51
- return `git config #{conf_name}`.chomp!
32
+ `git config #{conf_name}`.chomp
52
33
  end
53
34
 
54
35
  def white_spaces
55
36
  against = get_against
56
37
 
57
- return `git diff-index --check --cached #{against} --`.chomp!
38
+ `git diff-index --check --cached #{against} --`.chomp
58
39
  end
59
40
 
60
41
  def exec cmd
61
- return `#{cmd}`.chomp!
42
+ `#{cmd}`.chomp
62
43
  end
63
44
 
64
45
  private
65
46
 
66
- def classify diffs
67
- classified = {}
68
- diffs.each_line(separator = $/) do |line|
69
- Hash[*line.split].each_pair do |key, value|
70
- if classified[key.to_sym].nil?
71
- classified[key.to_sym] = [value]
72
- else
73
- classified[key.to_sym] << value
74
- end
75
- end
76
- end
77
- return classified
78
- end
79
-
80
47
  def get_against
81
48
  if `git rev-parse --verify HEAD >/dev/null 2>&1`
82
- return 'HEAD'
49
+ 'HEAD'
83
50
  else
84
- return AGAINST
51
+ AGAINST
85
52
  end
86
53
  end
87
54
  end
@@ -1,3 +1,3 @@
1
1
  module HookSpec
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hookspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - wills