hookspec 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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