git_hook-pre_receive 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.
- data/.gitignore +18 -0
- data/.rdebugrc +7 -0
- data/.rspec +3 -0
- data/.simplecov +8 -0
- data/.travis.yml +7 -0
- data/.yardopts +5 -0
- data/Gemfile +35 -0
- data/LICENSE.txt +22 -0
- data/README.md +66 -0
- data/Rakefile +56 -0
- data/git_hook-pre_receive.gemspec +20 -0
- data/lib/git_hook-pre_receive/command.rb +42 -0
- data/lib/git_hook-pre_receive/file.rb +16 -0
- data/lib/git_hook-pre_receive/pre_receive_hook_parser.rb +25 -0
- data/lib/git_hook-pre_receive/runner.rb +29 -0
- data/lib/git_hook-pre_receive/version.rb +4 -0
- data/lib/git_hook-pre_receive.rb +12 -0
- data/spec/command_spec.rb +104 -0
- data/spec/file_spec.rb +31 -0
- data/spec/pre_receive_hook_parser_spec.rb +64 -0
- data/spec/runner_spec.rb +42 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/debug.rb +7 -0
- data/spec/support/environment.rb +16 -0
- data/spec/support/filesystem.rb +19 -0
- data/spec/support/git.rb +54 -0
- data/spec/support/rspec.rb +5 -0
- data/spec/support/string.rb +2 -0
- metadata +86 -0
data/.gitignore
ADDED
data/.rdebugrc
ADDED
data/.rspec
ADDED
data/.simplecov
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in git.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
|
7
|
+
group :test do
|
8
|
+
gem 'rack-test', require: 'rack/test'
|
9
|
+
gem 'rspec', require: false
|
10
|
+
gem 'fuubar', require: false
|
11
|
+
gem 'simplecov', require: false
|
12
|
+
gem 'rubocop', require: false
|
13
|
+
gem 'coveralls', require: false
|
14
|
+
end
|
15
|
+
|
16
|
+
group :development do
|
17
|
+
gem 'awesome_print', require: false
|
18
|
+
gem 'debugger'
|
19
|
+
gem 'debugger-completion'
|
20
|
+
gem 'foreman', require: false
|
21
|
+
gem 'github-markup'
|
22
|
+
gem 'pry'
|
23
|
+
gem 'pry-debugger', require: false
|
24
|
+
gem 'pry-doc', require: false
|
25
|
+
gem 'redcarpet', require: false
|
26
|
+
gem 'tmrb', require: false
|
27
|
+
gem 'yard', require: false
|
28
|
+
end
|
29
|
+
|
30
|
+
gem 'rake', group: [:development, :test], require: false
|
31
|
+
gem 'fedux_org-stdlib', group: [:development, :test], require: false
|
32
|
+
gem 'bundler', '~> 1.3', group: [:development, :test], require: false
|
33
|
+
gem 'erubis', group: [:development, :test]
|
34
|
+
gem 'versionomy', group: [:development, :test], require: false
|
35
|
+
gem 'activesupport', group: [:development, :test], require: false
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Dennis Günnewig
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# Git
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'git'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install git
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Create a file `pre-receive` at `.git/hooks` with the following content:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
#!/usr/bin/env ruby
|
25
|
+
|
26
|
+
require 'git_hook-pre_receive'
|
27
|
+
parser = Git::PreReceiveHookParser.new($stdin.read)
|
28
|
+
parser.files
|
29
|
+
```
|
30
|
+
|
31
|
+
And do with it whatever you want.
|
32
|
+
|
33
|
+
## Example file
|
34
|
+
|
35
|
+
Create a file `pre-receive` at `.git/hooks` with the following content:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
#!/usr/bin/env ruby
|
39
|
+
|
40
|
+
require 'git_hook-pre_receive'
|
41
|
+
require 'pac'
|
42
|
+
|
43
|
+
class PacFileSyntaxChecker
|
44
|
+
def check(files)
|
45
|
+
files.each do |f|
|
46
|
+
begin
|
47
|
+
PAC.load f.content
|
48
|
+
rescue
|
49
|
+
$stderr.puts "Syntax error found in #{f.name}. Please check files locally again, fix the error and send update via git."
|
50
|
+
exit 1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
parser = Git::PreReceiveHookParser.new($stdin.read)
|
57
|
+
PacFileSyntaxChecker.new.check(parser.files)
|
58
|
+
```
|
59
|
+
|
60
|
+
## Contributing
|
61
|
+
|
62
|
+
1. Fork it ( http://github.com/<my-github-username>/git/fork )
|
63
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
64
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
65
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
66
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
require 'fedux_org/stdlib/rake'
|
4
|
+
|
5
|
+
require 'local_pac/version'
|
6
|
+
|
7
|
+
def software
|
8
|
+
'local_pac'
|
9
|
+
end
|
10
|
+
|
11
|
+
def version
|
12
|
+
Git::VERSION
|
13
|
+
end
|
14
|
+
|
15
|
+
def root_directory
|
16
|
+
File.expand_path('../', __FILE__)
|
17
|
+
end
|
18
|
+
|
19
|
+
def tar_file
|
20
|
+
File.join(pkg_directory, "#{software}-#{version}.tar.gz")
|
21
|
+
end
|
22
|
+
|
23
|
+
def tmp_directory
|
24
|
+
File.join(root_directory, 'tmp', "#{software}-#{version}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def gem_file
|
28
|
+
File.join(root_directory, 'pkg', "#{software}-#{version}.gem")
|
29
|
+
end
|
30
|
+
|
31
|
+
def pkg_directory
|
32
|
+
File.join(root_directory, 'pkg')
|
33
|
+
end
|
34
|
+
|
35
|
+
def gem_directory
|
36
|
+
File.join(root_directory, 'vendor', 'cache')
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => 'gem:build'
|
40
|
+
|
41
|
+
file gem_file => 'gem:build'
|
42
|
+
|
43
|
+
file tmp_directory do
|
44
|
+
FileUtils.mkdir_p tmp_directory
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :gem do
|
48
|
+
desc 'build tar file'
|
49
|
+
task :package => [gem_file, tmp_directory] do
|
50
|
+
FileUtils.mv File.join(pkg_directory, "#{software}-#{version}.gem"), tmp_directory
|
51
|
+
|
52
|
+
Dir.chdir('tmp') do
|
53
|
+
sh "tar -czf #{tar_file} #{File.basename tmp_directory}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'git_hook-pre_receive/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'git_hook-pre_receive'
|
8
|
+
spec.version = Git::VERSION
|
9
|
+
spec.authors = ['Dennis Günnewig']
|
10
|
+
spec.email = ['dg1@vrnetze.de']
|
11
|
+
spec.summary = %q{pre-receive hook helper for git}
|
12
|
+
spec.description = %q{Provides parser to implement a pre-receive hook for git.}
|
13
|
+
spec.homepage = 'https://github.com/dg-vrnetze/git_hook-pre_receive'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Git
|
3
|
+
class Command
|
4
|
+
def self.diff_tree(new)
|
5
|
+
runner = Runner.new("git diff-tree -r --root #{new}")
|
6
|
+
runner.result
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.diff(old, new)
|
10
|
+
runner = Runner.new("git diff --raw #{old} #{new}")
|
11
|
+
runner.result
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.init(path)
|
15
|
+
runner = Git::Runner.new("git init #{path}")
|
16
|
+
runner.result
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.add(object)
|
20
|
+
runner = Git::Runner.new("git add #{object}")
|
21
|
+
runner.result
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.status
|
25
|
+
runner = Git::Runner.new('git status')
|
26
|
+
runner.result
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.commit(message)
|
30
|
+
runner = Git::Runner.new("git commit -m \"#{message}\"")
|
31
|
+
runner.result
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.show(sha = nil)
|
35
|
+
cmd = ['git show']
|
36
|
+
cmd << " #{sha}" if sha
|
37
|
+
|
38
|
+
runner = Git::Runner.new(cmd.join(" "))
|
39
|
+
runner.result
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Git
|
3
|
+
class File
|
4
|
+
attr_reader :sha, :name
|
5
|
+
|
6
|
+
def initialize(line)
|
7
|
+
@sha, @name = line.split(' ').values_at(3, 5)
|
8
|
+
@sha = @sha.gsub(/\./, '')
|
9
|
+
end
|
10
|
+
|
11
|
+
def content
|
12
|
+
runner = Runner.new("git show #{sha}")
|
13
|
+
runner.result.join "\n"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Git
|
3
|
+
class PreReceiveHookParser
|
4
|
+
private
|
5
|
+
|
6
|
+
attr_reader :old_sha1, :new_sha1, :ref_name
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
def initialize(input)
|
11
|
+
@old_sha1, @new_sha1, @ref_name = input.split(" ")
|
12
|
+
end
|
13
|
+
|
14
|
+
def files
|
15
|
+
if old_sha1 == '0' * 40
|
16
|
+
result = Git::Command.diff_tree(new_sha1)
|
17
|
+
result.delete_at(0)
|
18
|
+
result.collect { |l| File.new(l) }
|
19
|
+
else
|
20
|
+
result = Git::Command.diff(old_sha1, new_sha1)
|
21
|
+
result.collect { |l| File.new(l) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Git
|
3
|
+
class Runner
|
4
|
+
private
|
5
|
+
|
6
|
+
attr_reader :command, :stdout
|
7
|
+
|
8
|
+
public
|
9
|
+
|
10
|
+
def initialize(command)
|
11
|
+
@command = command
|
12
|
+
end
|
13
|
+
|
14
|
+
def run
|
15
|
+
stdout, stderr, status = Open3.capture3(command)
|
16
|
+
fail RuntimeError, "Error executing command #{command}: #{stderr}" unless status.success?
|
17
|
+
|
18
|
+
@stdout = stdout.split("\n")
|
19
|
+
rescue Errno::ENOENT => e
|
20
|
+
fail RuntimeError, "Error executing command #{command}: #{e.message}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def result
|
24
|
+
$stderr.puts command if Git.debug_mode
|
25
|
+
run
|
26
|
+
stdout
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
require 'git_hook-pre_receive/command'
|
4
|
+
require 'git_hook-pre_receive/file'
|
5
|
+
require 'git_hook-pre_receive/pre_receive_hook_parser.rb'
|
6
|
+
require 'git_hook-pre_receive/runner'
|
7
|
+
|
8
|
+
module Git
|
9
|
+
class << self
|
10
|
+
attr_accessor :debug_mode
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Command do
|
5
|
+
let(:git_repo) { 'git_repo' }
|
6
|
+
|
7
|
+
context '#init' do
|
8
|
+
it 'creates a new repository' do
|
9
|
+
switch_to_working_directory do
|
10
|
+
Command.init(git_repo)
|
11
|
+
end
|
12
|
+
|
13
|
+
expect(path_exists?(git_repo)).to be_true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context '#add' do
|
18
|
+
it 'add dir/file to repository' do
|
19
|
+
git_init(git_repo)
|
20
|
+
create_file(File.join(git_repo, 'file.txt'))
|
21
|
+
|
22
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
23
|
+
Command.add('file.txt')
|
24
|
+
end
|
25
|
+
|
26
|
+
expect(git_status(git_repo)).to include("\tnew file: file.txt")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context '#commit' do
|
31
|
+
it 'commit dir/file to repository' do
|
32
|
+
|
33
|
+
git_init(git_repo)
|
34
|
+
|
35
|
+
create_file(File.join(git_repo, 'file.txt'))
|
36
|
+
|
37
|
+
git_add(git_repo, 'file.txt')
|
38
|
+
|
39
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
40
|
+
Command.commit('file.txt')
|
41
|
+
end
|
42
|
+
|
43
|
+
expect(git_status(git_repo)).to include('nothing to commit, working directory clean')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context '#show' do
|
48
|
+
it 'show ref/sha in repository' do
|
49
|
+
git_init(git_repo)
|
50
|
+
create_file(File.join(git_repo, 'file.txt'))
|
51
|
+
git_add(git_repo, 'file.txt')
|
52
|
+
git_commit(git_repo)
|
53
|
+
|
54
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
55
|
+
expect(Command.show.first).to include('commit')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context '#diff_tree' do
|
61
|
+
it 'diff values' do
|
62
|
+
git_init(git_repo)
|
63
|
+
|
64
|
+
create_file(File.join(git_repo, 'file.txt'))
|
65
|
+
create_file(File.join(git_repo, 'file1.txt'))
|
66
|
+
create_file(File.join(git_repo, 'file2.txt'))
|
67
|
+
|
68
|
+
git_add(git_repo, 'file.txt')
|
69
|
+
git_add(git_repo, 'file1.txt')
|
70
|
+
git_add(git_repo, 'file2.txt')
|
71
|
+
|
72
|
+
git_commit(git_repo)
|
73
|
+
|
74
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
75
|
+
|
76
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
77
|
+
expect(Command.diff_tree(commit).last).to include('file2.txt')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context '#diff' do
|
83
|
+
it 'diff values' do
|
84
|
+
git_init(git_repo)
|
85
|
+
|
86
|
+
create_file(File.join(git_repo, 'file.txt'))
|
87
|
+
git_add(git_repo, 'file.txt')
|
88
|
+
git_commit(git_repo)
|
89
|
+
|
90
|
+
create_file(File.join(git_repo, 'file1.txt'))
|
91
|
+
create_file(File.join(git_repo, 'file2.txt'))
|
92
|
+
git_add(git_repo, 'file1.txt')
|
93
|
+
git_add(git_repo, 'file2.txt')
|
94
|
+
|
95
|
+
git_commit(git_repo)
|
96
|
+
|
97
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
98
|
+
|
99
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
100
|
+
expect(Command.diff(commit,"#{commit}^").last).to include('file2.txt')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
data/spec/file_spec.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Git::File do
|
5
|
+
let(:git_repo) { 'git_repo' }
|
6
|
+
|
7
|
+
context '#initialize' do
|
8
|
+
it 'expects a line' do
|
9
|
+
line = ':000000 100644 0000000... a82b332... A test.d/test333.txt'
|
10
|
+
file = Git::File.new(line)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context '#content' do
|
15
|
+
it 'returns content of file in git repository' do
|
16
|
+
git_init(git_repo)
|
17
|
+
|
18
|
+
create_file(File.join(git_repo, 'file.txt'), 'content')
|
19
|
+
git_add(git_repo, 'file.txt')
|
20
|
+
git_commit(git_repo)
|
21
|
+
|
22
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
23
|
+
|
24
|
+
file = Git::File.new(git_diff_tree(git_repo, commit).last)
|
25
|
+
|
26
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
27
|
+
expect(file.content).to include('content')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
describe PreReceiveHookParser do
|
3
|
+
let(:git_repo) { 'git_repo' }
|
4
|
+
|
5
|
+
context '#initialize' do
|
6
|
+
it 'expects three values old_sha, new_sha, ref_name' do
|
7
|
+
PreReceiveHookParser.new('f5cb631e8b09444107408ad63c0fba13aaa23d18 76bc1a95fe094be30f7d77c9d374b0329b140ee9 /ref')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context '#files' do
|
12
|
+
it 'returns files for commit' do
|
13
|
+
git_init(git_repo)
|
14
|
+
|
15
|
+
create_file(File.join(git_repo, 'file.txt'))
|
16
|
+
git_add(git_repo, 'file.txt')
|
17
|
+
git_commit(git_repo)
|
18
|
+
|
19
|
+
create_file(File.join(git_repo, 'file1.txt'), 'content file1')
|
20
|
+
create_file(File.join(git_repo, 'file2.txt'), 'content file2')
|
21
|
+
git_add(git_repo, 'file1.txt')
|
22
|
+
git_add(git_repo, 'file2.txt')
|
23
|
+
|
24
|
+
git_commit(git_repo)
|
25
|
+
|
26
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
27
|
+
|
28
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
29
|
+
parser = PreReceiveHookParser.new("#{commit}^ #{commit} /ref/asdf/asdf")
|
30
|
+
expect(parser.files.collect { |f| f.name }).to eq(%w{file1.txt file2.txt})
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns files for root commit' do
|
35
|
+
git_init(git_repo)
|
36
|
+
|
37
|
+
create_file(File.join(git_repo, 'file.txt'))
|
38
|
+
git_add(git_repo, 'file.txt')
|
39
|
+
git_commit(git_repo)
|
40
|
+
|
41
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
42
|
+
|
43
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
44
|
+
parser = PreReceiveHookParser.new("#{'0' * 40} #{commit} /ref/asdf/asdf")
|
45
|
+
expect(parser.files.collect { |f| f.name }).to eq(%w{file.txt})
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'returns files in directories' do
|
50
|
+
git_init(git_repo)
|
51
|
+
|
52
|
+
create_file(File.join(git_repo, 'dir/file.txt'))
|
53
|
+
git_add(git_repo, 'dir/file.txt')
|
54
|
+
git_commit(git_repo)
|
55
|
+
|
56
|
+
commit = git_show(git_repo, nil).first.split(" ")[1]
|
57
|
+
|
58
|
+
Dir.chdir(::File.join(working_directory, git_repo)) do
|
59
|
+
parser = PreReceiveHookParser.new("#{'0' * 40} #{commit} /ref/asdf/asdf")
|
60
|
+
expect(parser.files.collect { |f| f.name }).to eq(%w{dir/file.txt})
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/spec/runner_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Runner do
|
5
|
+
context '#initialize' do
|
6
|
+
it 'expects a command string' do
|
7
|
+
Runner.new('echo')
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
|
12
|
+
context '#run' do
|
13
|
+
it 'runs a command' do
|
14
|
+
runner = Runner.new('echo')
|
15
|
+
expect {
|
16
|
+
runner.run
|
17
|
+
}.not_to raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'fails on error file not found' do
|
21
|
+
runner = Runner.new('asdfasdf asfd')
|
22
|
+
expect {
|
23
|
+
runner.run
|
24
|
+
}.to raise_error RuntimeError
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'fails on error status code' do
|
28
|
+
runner = Runner.new('exit 1')
|
29
|
+
expect {
|
30
|
+
runner.run
|
31
|
+
}.to raise_error RuntimeError
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context '#result' do
|
36
|
+
it 'returns stdout as array' do
|
37
|
+
runner = Runner.new("echo -E \"hello\nworld\"")
|
38
|
+
|
39
|
+
expect(runner.result).to eq(["hello", "world"])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
7
|
+
require 'git_hook-pre_receive'
|
8
|
+
|
9
|
+
# Pull in all of the gems including those in the `test` group
|
10
|
+
require 'bundler'
|
11
|
+
Bundler.require :default, :test, :development
|
12
|
+
|
13
|
+
Dir.glob(File.expand_path('../support/*.rb', __FILE__)).each { |f| require_relative f }
|
14
|
+
|
15
|
+
include Git
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fedux_org/stdlib/environment'
|
2
|
+
|
3
|
+
module Git
|
4
|
+
module SpecHelper
|
5
|
+
module Environment
|
6
|
+
include FeduxOrg::Stdlib::Environment
|
7
|
+
alias_method :with_environment, :isolated_environment
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# encoding: utf-8
|
13
|
+
RSpec.configure do |c|
|
14
|
+
c.include Git::SpecHelper::Environment
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'fedux_org/stdlib/filesystem'
|
2
|
+
|
3
|
+
module Git
|
4
|
+
module SpecHelper
|
5
|
+
module Filesystem
|
6
|
+
include FeduxOrg::Stdlib::Filesystem
|
7
|
+
|
8
|
+
def root_directory
|
9
|
+
::File.expand_path('../../../', __FILE__)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# encoding: utf-8
|
16
|
+
RSpec.configure do |c|
|
17
|
+
c.include Git::SpecHelper::Filesystem
|
18
|
+
c.before(:each) { cleanup_working_directory }
|
19
|
+
end
|
data/spec/support/git.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'fedux_org/stdlib/filesystem'
|
2
|
+
|
3
|
+
module Git
|
4
|
+
module SpecHelper
|
5
|
+
module GitHelper
|
6
|
+
include FeduxOrg::Stdlib::Filesystem
|
7
|
+
|
8
|
+
def root_directory
|
9
|
+
::File.expand_path('../../../', __FILE__)
|
10
|
+
end
|
11
|
+
|
12
|
+
def git_init(path)
|
13
|
+
switch_to_working_directory do
|
14
|
+
Git::Command.init(path)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def git_add(repo, object)
|
19
|
+
Dir.chdir(::File.join(working_directory, repo)) do
|
20
|
+
Git::Command.add(object)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def git_commit(repo, message = 'Yay... Added objects')
|
25
|
+
Dir.chdir(::File.join(working_directory, repo)) do
|
26
|
+
Git::Command.commit(message)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def git_status(repo)
|
31
|
+
Dir.chdir(::File.join(working_directory, repo)) do
|
32
|
+
Git::Command.status
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def git_show(repo, sha)
|
37
|
+
Dir.chdir(::File.join(working_directory, repo)) do
|
38
|
+
Git::Command.show(sha)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def git_diff_tree(repo, new)
|
43
|
+
Dir.chdir(::File.join(working_directory, repo)) do
|
44
|
+
Git::Command.diff_tree(new)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# encoding: utf-8
|
52
|
+
RSpec.configure do |c|
|
53
|
+
c.include Git::SpecHelper::GitHelper
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: git_hook-pre_receive
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dennis Günnewig
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Provides parser to implement a pre-receive hook for git.
|
15
|
+
email:
|
16
|
+
- dg1@vrnetze.de
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- .rdebugrc
|
23
|
+
- .rspec
|
24
|
+
- .simplecov
|
25
|
+
- .travis.yml
|
26
|
+
- .yardopts
|
27
|
+
- Gemfile
|
28
|
+
- LICENSE.txt
|
29
|
+
- README.md
|
30
|
+
- Rakefile
|
31
|
+
- git_hook-pre_receive.gemspec
|
32
|
+
- lib/git_hook-pre_receive.rb
|
33
|
+
- lib/git_hook-pre_receive/command.rb
|
34
|
+
- lib/git_hook-pre_receive/file.rb
|
35
|
+
- lib/git_hook-pre_receive/pre_receive_hook_parser.rb
|
36
|
+
- lib/git_hook-pre_receive/runner.rb
|
37
|
+
- lib/git_hook-pre_receive/version.rb
|
38
|
+
- spec/command_spec.rb
|
39
|
+
- spec/file_spec.rb
|
40
|
+
- spec/pre_receive_hook_parser_spec.rb
|
41
|
+
- spec/runner_spec.rb
|
42
|
+
- spec/spec_helper.rb
|
43
|
+
- spec/support/debug.rb
|
44
|
+
- spec/support/environment.rb
|
45
|
+
- spec/support/filesystem.rb
|
46
|
+
- spec/support/git.rb
|
47
|
+
- spec/support/rspec.rb
|
48
|
+
- spec/support/string.rb
|
49
|
+
homepage: https://github.com/dg-vrnetze/git_hook-pre_receive
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.8.23
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: pre-receive hook helper for git
|
74
|
+
test_files:
|
75
|
+
- spec/command_spec.rb
|
76
|
+
- spec/file_spec.rb
|
77
|
+
- spec/pre_receive_hook_parser_spec.rb
|
78
|
+
- spec/runner_spec.rb
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
- spec/support/debug.rb
|
81
|
+
- spec/support/environment.rb
|
82
|
+
- spec/support/filesystem.rb
|
83
|
+
- spec/support/git.rb
|
84
|
+
- spec/support/rspec.rb
|
85
|
+
- spec/support/string.rb
|
86
|
+
has_rdoc:
|