grack 0.0.2 → 0.1.0.pre1
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 +7 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/LICENSE +22 -0
- data/NEWS.md +19 -0
- data/README.md +211 -0
- data/Rakefile +222 -0
- data/lib/git_adapter.rb +1 -0
- data/lib/grack.rb +1 -0
- data/lib/grack/app.rb +482 -0
- data/lib/grack/compatible_git_adapter.rb +99 -0
- data/lib/grack/file_streamer.rb +41 -0
- data/lib/grack/git_adapter.rb +142 -0
- data/lib/grack/io_streamer.rb +45 -0
- data/tests/app_test.rb +534 -0
- data/tests/compatible_git_adapter_test.rb +137 -0
- data/tests/example/_git/COMMIT_EDITMSG +1 -0
- data/tests/example/_git/HEAD +1 -0
- data/tests/example/_git/config +6 -0
- data/tests/example/_git/description +1 -0
- data/tests/example/_git/hooks/applypatch-msg.sample +15 -0
- data/tests/example/_git/hooks/commit-msg.sample +24 -0
- data/tests/example/_git/hooks/post-commit.sample +8 -0
- data/tests/example/_git/hooks/post-receive.sample +15 -0
- data/tests/example/_git/hooks/post-update.sample +8 -0
- data/tests/example/_git/hooks/pre-applypatch.sample +14 -0
- data/tests/example/_git/hooks/pre-commit.sample +50 -0
- data/tests/example/_git/hooks/pre-rebase.sample +169 -0
- data/tests/example/_git/hooks/prepare-commit-msg.sample +36 -0
- data/tests/example/_git/hooks/update.sample +128 -0
- data/tests/example/_git/index +0 -0
- data/tests/example/_git/info/exclude +6 -0
- data/tests/example/_git/info/refs +1 -0
- data/tests/example/_git/logs/HEAD +1 -0
- data/tests/example/_git/logs/refs/heads/master +1 -0
- data/tests/example/_git/objects/31/d73eb4914a8ddb6cb0e4adf250777161118f90 +0 -0
- data/tests/example/_git/objects/cb/067e06bdf6e34d4abebf6cf2de85d65a52c65e +0 -0
- data/tests/example/_git/objects/ce/013625030ba8dba906f756967f9e9ca394464a +0 -0
- data/tests/example/_git/objects/info/packs +2 -0
- data/tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.idx +0 -0
- data/tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.pack +0 -0
- data/tests/example/_git/refs/heads/master +1 -0
- data/tests/file_streamer_test.rb +37 -0
- data/tests/git_adapter_test.rb +104 -0
- data/tests/io_streamer_test.rb +36 -0
- data/tests/test_helper.rb +36 -0
- metadata +292 -19
- data/lib/git_http.rb +0 -304
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# An example hook script to prepare the commit log message.
|
4
|
+
# Called by "git commit" with the name of the file that has the
|
5
|
+
# commit message, followed by the description of the commit
|
6
|
+
# message's source. The hook's purpose is to edit the commit
|
7
|
+
# message file. If the hook fails with a non-zero status,
|
8
|
+
# the commit is aborted.
|
9
|
+
#
|
10
|
+
# To enable this hook, rename this file to "prepare-commit-msg".
|
11
|
+
|
12
|
+
# This hook includes three examples. The first comments out the
|
13
|
+
# "Conflicts:" part of a merge commit.
|
14
|
+
#
|
15
|
+
# The second includes the output of "git diff --name-status -r"
|
16
|
+
# into the message, just before the "git status" output. It is
|
17
|
+
# commented because it doesn't cope with --amend or with squashed
|
18
|
+
# commits.
|
19
|
+
#
|
20
|
+
# The third example adds a Signed-off-by line to the message, that can
|
21
|
+
# still be edited. This is rarely a good idea.
|
22
|
+
|
23
|
+
case "$2,$3" in
|
24
|
+
merge,)
|
25
|
+
/usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
|
26
|
+
|
27
|
+
# ,|template,)
|
28
|
+
# /usr/bin/perl -i.bak -pe '
|
29
|
+
# print "\n" . `git diff --cached --name-status -r`
|
30
|
+
# if /^#/ && $first++ == 0' "$1" ;;
|
31
|
+
|
32
|
+
*) ;;
|
33
|
+
esac
|
34
|
+
|
35
|
+
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
36
|
+
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
@@ -0,0 +1,128 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
#
|
3
|
+
# An example hook script to blocks unannotated tags from entering.
|
4
|
+
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
|
5
|
+
#
|
6
|
+
# To enable this hook, rename this file to "update".
|
7
|
+
#
|
8
|
+
# Config
|
9
|
+
# ------
|
10
|
+
# hooks.allowunannotated
|
11
|
+
# This boolean sets whether unannotated tags will be allowed into the
|
12
|
+
# repository. By default they won't be.
|
13
|
+
# hooks.allowdeletetag
|
14
|
+
# This boolean sets whether deleting tags will be allowed in the
|
15
|
+
# repository. By default they won't be.
|
16
|
+
# hooks.allowmodifytag
|
17
|
+
# This boolean sets whether a tag may be modified after creation. By default
|
18
|
+
# it won't be.
|
19
|
+
# hooks.allowdeletebranch
|
20
|
+
# This boolean sets whether deleting branches will be allowed in the
|
21
|
+
# repository. By default they won't be.
|
22
|
+
# hooks.denycreatebranch
|
23
|
+
# This boolean sets whether remotely creating branches will be denied
|
24
|
+
# in the repository. By default this is allowed.
|
25
|
+
#
|
26
|
+
|
27
|
+
# --- Command line
|
28
|
+
refname="$1"
|
29
|
+
oldrev="$2"
|
30
|
+
newrev="$3"
|
31
|
+
|
32
|
+
# --- Safety check
|
33
|
+
if [ -z "$GIT_DIR" ]; then
|
34
|
+
echo "Don't run this script from the command line." >&2
|
35
|
+
echo " (if you want, you could supply GIT_DIR then run" >&2
|
36
|
+
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
37
|
+
exit 1
|
38
|
+
fi
|
39
|
+
|
40
|
+
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
41
|
+
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
|
42
|
+
exit 1
|
43
|
+
fi
|
44
|
+
|
45
|
+
# --- Config
|
46
|
+
allowunannotated=$(git config --bool hooks.allowunannotated)
|
47
|
+
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
|
48
|
+
denycreatebranch=$(git config --bool hooks.denycreatebranch)
|
49
|
+
allowdeletetag=$(git config --bool hooks.allowdeletetag)
|
50
|
+
allowmodifytag=$(git config --bool hooks.allowmodifytag)
|
51
|
+
|
52
|
+
# check for no description
|
53
|
+
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
54
|
+
case "$projectdesc" in
|
55
|
+
"Unnamed repository"* | "")
|
56
|
+
echo "*** Project description file hasn't been set" >&2
|
57
|
+
exit 1
|
58
|
+
;;
|
59
|
+
esac
|
60
|
+
|
61
|
+
# --- Check types
|
62
|
+
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
63
|
+
zero="0000000000000000000000000000000000000000"
|
64
|
+
if [ "$newrev" = "$zero" ]; then
|
65
|
+
newrev_type=delete
|
66
|
+
else
|
67
|
+
newrev_type=$(git cat-file -t $newrev)
|
68
|
+
fi
|
69
|
+
|
70
|
+
case "$refname","$newrev_type" in
|
71
|
+
refs/tags/*,commit)
|
72
|
+
# un-annotated tag
|
73
|
+
short_refname=${refname##refs/tags/}
|
74
|
+
if [ "$allowunannotated" != "true" ]; then
|
75
|
+
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
76
|
+
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
77
|
+
exit 1
|
78
|
+
fi
|
79
|
+
;;
|
80
|
+
refs/tags/*,delete)
|
81
|
+
# delete tag
|
82
|
+
if [ "$allowdeletetag" != "true" ]; then
|
83
|
+
echo "*** Deleting a tag is not allowed in this repository" >&2
|
84
|
+
exit 1
|
85
|
+
fi
|
86
|
+
;;
|
87
|
+
refs/tags/*,tag)
|
88
|
+
# annotated tag
|
89
|
+
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
90
|
+
then
|
91
|
+
echo "*** Tag '$refname' already exists." >&2
|
92
|
+
echo "*** Modifying a tag is not allowed in this repository." >&2
|
93
|
+
exit 1
|
94
|
+
fi
|
95
|
+
;;
|
96
|
+
refs/heads/*,commit)
|
97
|
+
# branch
|
98
|
+
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
99
|
+
echo "*** Creating a branch is not allowed in this repository" >&2
|
100
|
+
exit 1
|
101
|
+
fi
|
102
|
+
;;
|
103
|
+
refs/heads/*,delete)
|
104
|
+
# delete branch
|
105
|
+
if [ "$allowdeletebranch" != "true" ]; then
|
106
|
+
echo "*** Deleting a branch is not allowed in this repository" >&2
|
107
|
+
exit 1
|
108
|
+
fi
|
109
|
+
;;
|
110
|
+
refs/remotes/*,commit)
|
111
|
+
# tracking branch
|
112
|
+
;;
|
113
|
+
refs/remotes/*,delete)
|
114
|
+
# delete tracking branch
|
115
|
+
if [ "$allowdeletebranch" != "true" ]; then
|
116
|
+
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
117
|
+
exit 1
|
118
|
+
fi
|
119
|
+
;;
|
120
|
+
*)
|
121
|
+
# Anything else (is there anything else?)
|
122
|
+
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
123
|
+
exit 1
|
124
|
+
;;
|
125
|
+
esac
|
126
|
+
|
127
|
+
# --- Finished
|
128
|
+
exit 0
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
cb067e06bdf6e34d4abebf6cf2de85d65a52c65e refs/heads/master
|
@@ -0,0 +1 @@
|
|
1
|
+
0000000000000000000000000000000000000000 cb067e06bdf6e34d4abebf6cf2de85d65a52c65e Dawa Ometto <dawa.ometto@phil.uu.nl> 1370206701 +0200 commit (initial): Test Example
|
@@ -0,0 +1 @@
|
|
1
|
+
0000000000000000000000000000000000000000 cb067e06bdf6e34d4abebf6cf2de85d65a52c65e Dawa Ometto <dawa.ometto@phil.uu.nl> 1370206701 +0200 commit (initial): Test Example
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
cb067e06bdf6e34d4abebf6cf2de85d65a52c65e
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/unit'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
require 'grack/file_streamer'
|
8
|
+
|
9
|
+
class FileStreamerTest < MiniTest::Test
|
10
|
+
include Grack
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@content = 'abcd' * 10_000
|
14
|
+
@file = Tempfile.new('foo')
|
15
|
+
@file.write(@content)
|
16
|
+
@file.rewind
|
17
|
+
@file.close
|
18
|
+
@streamer = FileStreamer.new(@file.path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
@file.unlink
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_to_path
|
26
|
+
assert_equal @file.path, @streamer.to_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_mtime
|
30
|
+
assert_equal File.mtime(@file.path), @streamer.mtime
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_each
|
34
|
+
assert_equal @content, @streamer.to_enum.to_a.join
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'minitest/unit'
|
6
|
+
require 'mocha/setup'
|
7
|
+
require 'stringio'
|
8
|
+
|
9
|
+
require 'grack/git_adapter'
|
10
|
+
|
11
|
+
|
12
|
+
class GitAdapterTest < Minitest::Test
|
13
|
+
include Grack
|
14
|
+
|
15
|
+
GIT_RECEIVE_RESPONSE = %r{\A001b# service=receive-pack\n0000[0-9a-f]{4}cb067e06bdf6e34d4abebf6cf2de85d65a52c65e refs/heads/master\000\s*report-status delete-refs side-band-64k quiet ofs-delta.*\n0000\z}
|
16
|
+
|
17
|
+
def git_config_set(name, value)
|
18
|
+
system(git_path, 'config', '--local', name, value, :chdir => example_repo)
|
19
|
+
end
|
20
|
+
|
21
|
+
def git_config_unset(name)
|
22
|
+
system(
|
23
|
+
git_path, 'config', '--local', '--unset-all', name, :chdir => example_repo
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def setup
|
28
|
+
init_example_repository
|
29
|
+
@test_git = GitAdapter.new(git_path)
|
30
|
+
@test_git.repository_path = example_repo
|
31
|
+
end
|
32
|
+
|
33
|
+
def teardown
|
34
|
+
remove_example_repository
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_break_with_bad_git_path
|
38
|
+
test_git = GitAdapter.new('a/highly/unlikely/path/to/git')
|
39
|
+
test_git.repository_path = example_repo
|
40
|
+
assert_raises(Errno::ENOENT) do
|
41
|
+
test_git.handle_pack('receive-pack', StringIO.new, StringIO.new)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_receive_pack
|
46
|
+
output = StringIO.new
|
47
|
+
@test_git.handle_pack(
|
48
|
+
'receive-pack', StringIO.new, output, :advertise_refs => true
|
49
|
+
)
|
50
|
+
|
51
|
+
assert_match GIT_RECEIVE_RESPONSE, output.string
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_upload_pack
|
55
|
+
input = StringIO.new('0000')
|
56
|
+
output = StringIO.new
|
57
|
+
@test_git.handle_pack('upload-pack', input, output)
|
58
|
+
|
59
|
+
assert_equal '', output.string
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_update_server_info
|
63
|
+
refs_file = File.join(example_repo, 'info/refs')
|
64
|
+
refs = File.read(refs_file)
|
65
|
+
File.unlink(refs_file)
|
66
|
+
assert ! File.exist?(refs_file), 'refs file exists'
|
67
|
+
@test_git.update_server_info
|
68
|
+
assert_equal refs, File.read(refs_file)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_exist
|
72
|
+
assert @test_git.exist?
|
73
|
+
@test_git.repository_path = 'a/highly/unlikely/path/to/a/repository'
|
74
|
+
assert ! @test_git.exist?
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_file
|
78
|
+
assert_nil @test_git.file('a/highly/unlikely/path/to/a/file')
|
79
|
+
|
80
|
+
object_path = 'objects/31/d73eb4914a8ddb6cb0e4adf250777161118f90'
|
81
|
+
file_path = File.join(example_repo, object_path)
|
82
|
+
git_file = @test_git.file(object_path)
|
83
|
+
|
84
|
+
assert_equal file_path, git_file.to_path.to_s
|
85
|
+
assert_equal File.mtime(file_path), git_file.mtime
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_allow_push
|
89
|
+
assert ! @test_git.allow_push?, 'Expected allow_push? to return false'
|
90
|
+
git_config_set('http.receivepack', 'false')
|
91
|
+
assert ! @test_git.allow_push?, 'Expected allow_push? to return false'
|
92
|
+
git_config_set('http.receivepack', 'true')
|
93
|
+
assert @test_git.allow_push?, 'Expected allow_push? to return true'
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_allow_pull
|
97
|
+
assert @test_git.allow_pull?, 'Expected allow_pull? to return true'
|
98
|
+
git_config_set('http.uploadpack', 'false')
|
99
|
+
assert ! @test_git.allow_pull?, 'Expected allow_pull? to return false'
|
100
|
+
git_config_set('http.uploadpack', 'true')
|
101
|
+
assert @test_git.allow_pull?, 'Expected allow_pull? to return true'
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require 'minitest/unit'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
require 'grack/io_streamer'
|
8
|
+
|
9
|
+
class IOStreamerTest < MiniTest::Test
|
10
|
+
include Grack
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@content = 'abcd' * 10_000
|
14
|
+
@file = Tempfile.new('foo')
|
15
|
+
@file.write(@content)
|
16
|
+
@file.rewind
|
17
|
+
@streamer = IOStreamer.new(@file, @file.mtime)
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
@file.close
|
22
|
+
@file.unlink
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_to_path
|
26
|
+
assert ! @streamer.respond_to?(:to_path), 'responds to #to_path'
|
27
|
+
end
|
28
|
+
def test_mtime
|
29
|
+
assert_equal File.mtime(@file.path), @streamer.mtime
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_each
|
33
|
+
assert_equal @content, @streamer.to_enum.to_a.join
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'simplecov'
|
3
|
+
require 'tmpdir'
|
4
|
+
|
5
|
+
SimpleCov.start do
|
6
|
+
add_filter 'tests/'
|
7
|
+
end
|
8
|
+
|
9
|
+
$: << File.expand_path('../../lib', __FILE__)
|
10
|
+
|
11
|
+
def git_path
|
12
|
+
ENV.fetch('GIT_PATH', 'git') # Path to git on test system
|
13
|
+
end
|
14
|
+
|
15
|
+
def stock_repo
|
16
|
+
File.expand_path('../example/_git', __FILE__)
|
17
|
+
end
|
18
|
+
|
19
|
+
def repositories_root
|
20
|
+
@repositories_root
|
21
|
+
end
|
22
|
+
|
23
|
+
def example_repo
|
24
|
+
@example_repo
|
25
|
+
end
|
26
|
+
|
27
|
+
def init_example_repository
|
28
|
+
@repositories_root = Pathname.new(Dir.mktmpdir('grack-testing'))
|
29
|
+
@example_repo = @repositories_root + 'example_repo.git'
|
30
|
+
|
31
|
+
FileUtils.cp_r(stock_repo, example_repo)
|
32
|
+
end
|
33
|
+
|
34
|
+
def remove_example_repository
|
35
|
+
FileUtils.remove_entry_secure(repositories_root)
|
36
|
+
end
|
metadata
CHANGED
@@ -1,48 +1,321 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0.pre1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Scott Chacon
|
9
|
-
-
|
8
|
+
- Dawa Ometto
|
9
|
+
- Jeremy Bopp
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
14
|
-
dependencies:
|
15
|
-
|
13
|
+
date: 2015-09-14 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rack
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rake
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '10.1'
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 10.1.1
|
39
|
+
type: :development
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '10.1'
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 10.1.1
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: rack-test
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0.6'
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 0.6.3
|
59
|
+
type: :development
|
60
|
+
prerelease: false
|
61
|
+
version_requirements: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0.6'
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.6.3
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.8'
|
76
|
+
- - '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 5.8.0
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '5.8'
|
86
|
+
- - '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 5.8.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: mocha
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ~>
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.1'
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.1.0
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ~>
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '1.1'
|
106
|
+
- - '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 1.1.0
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: simplecov
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ~>
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0.10'
|
116
|
+
- - '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 0.10.0
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0.10'
|
126
|
+
- - '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 0.10.0
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: yard
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ~>
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.8.7
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.8.7.3
|
139
|
+
type: :development
|
140
|
+
prerelease: false
|
141
|
+
version_requirements: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.8.7
|
146
|
+
- - '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 0.8.7.3
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: redcarpet
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - ~>
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '3.1'
|
156
|
+
- - '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: 3.1.0
|
159
|
+
type: :development
|
160
|
+
prerelease: false
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ~>
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '3.1'
|
166
|
+
- - '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 3.1.0
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: github-markup
|
171
|
+
requirement: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ~>
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '1.0'
|
176
|
+
- - '>='
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: 1.0.2
|
179
|
+
type: :development
|
180
|
+
prerelease: false
|
181
|
+
version_requirements: !ruby/object:Gem::Requirement
|
182
|
+
requirements:
|
183
|
+
- - ~>
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '1.0'
|
186
|
+
- - '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: 1.0.2
|
189
|
+
- !ruby/object:Gem::Dependency
|
190
|
+
name: pry
|
191
|
+
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ~>
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
type: :development
|
197
|
+
prerelease: false
|
198
|
+
version_requirements: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ~>
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
203
|
+
description: |
|
204
|
+
This project aims to replace the builtin git-http-backend CGI handler
|
205
|
+
distributed with C Git with a Rack application. By default, Grack uses calls to
|
206
|
+
git on the system to implement Smart HTTP. Since the git-http-backend is really
|
207
|
+
just a simple wrapper for the upload-pack and receive-pack processes with the
|
208
|
+
'--stateless-rpc' option, this does not actually re-implement very much.
|
209
|
+
However, it is possible to use a different backend by specifying a different
|
210
|
+
Adapter.
|
16
211
|
email:
|
17
212
|
- schacon@gmail.com
|
18
|
-
-
|
213
|
+
- dawa.ometto@phil.uu.nl
|
214
|
+
- jeremy@bopp.net
|
19
215
|
executables: []
|
20
216
|
extensions: []
|
21
217
|
extra_rdoc_files: []
|
22
218
|
files:
|
23
|
-
-
|
24
|
-
|
25
|
-
|
219
|
+
- .travis.yml
|
220
|
+
- .yardopts
|
221
|
+
- LICENSE
|
222
|
+
- NEWS.md
|
223
|
+
- README.md
|
224
|
+
- Rakefile
|
225
|
+
- lib/git_adapter.rb
|
226
|
+
- lib/grack.rb
|
227
|
+
- lib/grack/app.rb
|
228
|
+
- lib/grack/compatible_git_adapter.rb
|
229
|
+
- lib/grack/file_streamer.rb
|
230
|
+
- lib/grack/git_adapter.rb
|
231
|
+
- lib/grack/io_streamer.rb
|
232
|
+
- tests/app_test.rb
|
233
|
+
- tests/compatible_git_adapter_test.rb
|
234
|
+
- tests/example/_git/COMMIT_EDITMSG
|
235
|
+
- tests/example/_git/HEAD
|
236
|
+
- tests/example/_git/config
|
237
|
+
- tests/example/_git/description
|
238
|
+
- tests/example/_git/hooks/applypatch-msg.sample
|
239
|
+
- tests/example/_git/hooks/commit-msg.sample
|
240
|
+
- tests/example/_git/hooks/post-commit.sample
|
241
|
+
- tests/example/_git/hooks/post-receive.sample
|
242
|
+
- tests/example/_git/hooks/post-update.sample
|
243
|
+
- tests/example/_git/hooks/pre-applypatch.sample
|
244
|
+
- tests/example/_git/hooks/pre-commit.sample
|
245
|
+
- tests/example/_git/hooks/pre-rebase.sample
|
246
|
+
- tests/example/_git/hooks/prepare-commit-msg.sample
|
247
|
+
- tests/example/_git/hooks/update.sample
|
248
|
+
- tests/example/_git/index
|
249
|
+
- tests/example/_git/info/exclude
|
250
|
+
- tests/example/_git/info/refs
|
251
|
+
- tests/example/_git/logs/HEAD
|
252
|
+
- tests/example/_git/logs/refs/heads/master
|
253
|
+
- tests/example/_git/objects/31/d73eb4914a8ddb6cb0e4adf250777161118f90
|
254
|
+
- tests/example/_git/objects/cb/067e06bdf6e34d4abebf6cf2de85d65a52c65e
|
255
|
+
- tests/example/_git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
|
256
|
+
- tests/example/_git/objects/info/packs
|
257
|
+
- tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.idx
|
258
|
+
- tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.pack
|
259
|
+
- tests/example/_git/refs/heads/master
|
260
|
+
- tests/file_streamer_test.rb
|
261
|
+
- tests/git_adapter_test.rb
|
262
|
+
- tests/io_streamer_test.rb
|
263
|
+
- tests/test_helper.rb
|
264
|
+
homepage: https://github.com/grackorg/grack
|
265
|
+
licenses:
|
266
|
+
- MIT
|
267
|
+
metadata: {}
|
26
268
|
post_install_message:
|
27
269
|
rdoc_options: []
|
28
270
|
require_paths:
|
29
271
|
- lib
|
30
272
|
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
-
none: false
|
32
273
|
requirements:
|
33
|
-
- -
|
274
|
+
- - '>='
|
34
275
|
- !ruby/object:Gem::Version
|
35
276
|
version: '0'
|
36
277
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
278
|
requirements:
|
39
|
-
- -
|
279
|
+
- - '>'
|
40
280
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
281
|
+
version: 1.3.1
|
42
282
|
requirements: []
|
43
283
|
rubyforge_project:
|
44
|
-
rubygems_version:
|
284
|
+
rubygems_version: 2.2.2
|
45
285
|
signing_key:
|
46
|
-
specification_version:
|
47
|
-
summary:
|
48
|
-
|
286
|
+
specification_version: 4
|
287
|
+
summary: This project aims to replace the builtin git-http-backend CGI handler distributed
|
288
|
+
with C Git with a Rack application.
|
289
|
+
test_files:
|
290
|
+
- tests/app_test.rb
|
291
|
+
- tests/compatible_git_adapter_test.rb
|
292
|
+
- tests/example/_git/COMMIT_EDITMSG
|
293
|
+
- tests/example/_git/HEAD
|
294
|
+
- tests/example/_git/config
|
295
|
+
- tests/example/_git/description
|
296
|
+
- tests/example/_git/hooks/applypatch-msg.sample
|
297
|
+
- tests/example/_git/hooks/commit-msg.sample
|
298
|
+
- tests/example/_git/hooks/post-commit.sample
|
299
|
+
- tests/example/_git/hooks/post-receive.sample
|
300
|
+
- tests/example/_git/hooks/post-update.sample
|
301
|
+
- tests/example/_git/hooks/pre-applypatch.sample
|
302
|
+
- tests/example/_git/hooks/pre-commit.sample
|
303
|
+
- tests/example/_git/hooks/pre-rebase.sample
|
304
|
+
- tests/example/_git/hooks/prepare-commit-msg.sample
|
305
|
+
- tests/example/_git/hooks/update.sample
|
306
|
+
- tests/example/_git/index
|
307
|
+
- tests/example/_git/info/exclude
|
308
|
+
- tests/example/_git/info/refs
|
309
|
+
- tests/example/_git/logs/HEAD
|
310
|
+
- tests/example/_git/logs/refs/heads/master
|
311
|
+
- tests/example/_git/objects/31/d73eb4914a8ddb6cb0e4adf250777161118f90
|
312
|
+
- tests/example/_git/objects/cb/067e06bdf6e34d4abebf6cf2de85d65a52c65e
|
313
|
+
- tests/example/_git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
|
314
|
+
- tests/example/_git/objects/info/packs
|
315
|
+
- tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.idx
|
316
|
+
- tests/example/_git/objects/pack/pack-62c9f443d8405cd6da92dcbb4f849cc01a339c06.pack
|
317
|
+
- tests/example/_git/refs/heads/master
|
318
|
+
- tests/file_streamer_test.rb
|
319
|
+
- tests/git_adapter_test.rb
|
320
|
+
- tests/io_streamer_test.rb
|
321
|
+
- tests/test_helper.rb
|