blaggard 1.0.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 +7 -0
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +66 -0
- data/README.md +84 -0
- data/Rakefile +20 -0
- data/bin/blaggard +55 -0
- data/blaggard.gemspec +18 -0
- data/config.yml.example +9 -0
- data/install.txt +60 -0
- data/lib/blaggard.rb +33 -0
- data/lib/blaggard/advertisement.rb +92 -0
- data/lib/blaggard/auth.rb +37 -0
- data/lib/blaggard/bundle.rb +20 -0
- data/lib/blaggard/console.rb +3 -0
- data/lib/blaggard/git.rb +82 -0
- data/lib/blaggard/group_config.rb +123 -0
- data/lib/blaggard/group_finder.rb +28 -0
- data/lib/blaggard/server.rb +311 -0
- data/script/console +7 -0
- data/spec/advertisement_spec.rb +81 -0
- data/spec/fixtures/spec_repo.git/FETCH_HEAD +2 -0
- data/spec/fixtures/spec_repo.git/HEAD +1 -0
- data/spec/fixtures/spec_repo.git/HEAD_TRACKER +1 -0
- data/spec/fixtures/spec_repo.git/config +53 -0
- data/spec/fixtures/spec_repo.git/index +0 -0
- data/spec/fixtures/spec_repo.git/logs/HEAD +7 -0
- data/spec/fixtures/spec_repo.git/logs/refs/heads/br2 +2 -0
- data/spec/fixtures/spec_repo.git/logs/refs/heads/master +2 -0
- data/spec/fixtures/spec_repo.git/logs/refs/heads/not-good +1 -0
- data/spec/fixtures/spec_repo.git/logs/refs/remotes/origin/HEAD +1 -0
- data/spec/fixtures/spec_repo.git/logs/refs/remotes/test/master +2 -0
- data/spec/fixtures/spec_repo.git/objects/08/b041783f40edfe12bb406c9c9a8a040177c125 +0 -0
- data/spec/fixtures/spec_repo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +0 -0
- data/spec/fixtures/spec_repo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +0 -0
- data/spec/fixtures/spec_repo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +0 -0
- data/spec/fixtures/spec_repo.git/objects/1a/443023183e3f2bfbef8ac923cd81c1018a18fd +0 -0
- data/spec/fixtures/spec_repo.git/objects/1b/8cbad43e867676df601306689fe7c3def5e689 +0 -0
- data/spec/fixtures/spec_repo.git/objects/1f/67fc4386b2d171e0d21be1c447e12660561f9b +0 -0
- data/spec/fixtures/spec_repo.git/objects/25/8f0e2a959a364e40ed6603d5d44fbb24765b10 +0 -0
- data/spec/fixtures/spec_repo.git/objects/27/0b8ea76056d5cad83af921837702d3e3c2924d +0 -0
- data/spec/fixtures/spec_repo.git/objects/2d/59075e0681f540482d4f6223a68e0fef790bc7 +0 -0
- data/spec/fixtures/spec_repo.git/objects/32/59a6bd5b57fb9c1281bb7ed3167b50f224cb54 +0 -0
- data/spec/fixtures/spec_repo.git/objects/36/97d64be941a53d4ae8f6a271e4e3fa56b022cc +0 -0
- data/spec/fixtures/spec_repo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
- data/spec/fixtures/spec_repo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 +2 -0
- data/spec/fixtures/spec_repo.git/objects/4a/23e2e65ad4e31c4c9db7dc746650bfad082679 +0 -0
- data/spec/fixtures/spec_repo.git/objects/4b/22b35d44b5a4f589edf3dc89196399771796ea +0 -0
- data/spec/fixtures/spec_repo.git/objects/52/1d87c1ec3aef9824daf6d96cc0ae3710766d91 +0 -0
- data/spec/fixtures/spec_repo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 +2 -0
- data/spec/fixtures/spec_repo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +0 -0
- data/spec/fixtures/spec_repo.git/objects/76/3d71aadf09a7951596c9746c024e7eece7c7af +1 -0
- data/spec/fixtures/spec_repo.git/objects/7b/4384978d2493e851f9cca7858815fac9b10980 +0 -0
- data/spec/fixtures/spec_repo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +0 -0
- data/spec/fixtures/spec_repo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +0 -0
- data/spec/fixtures/spec_repo.git/objects/84/9a5e34a26815e821f865b8479f5815a47af0fe +2 -0
- data/spec/fixtures/spec_repo.git/objects/94/4c0f6e4dfa41595e6eb3ceecdb14f50fe18162 +1 -0
- data/spec/fixtures/spec_repo.git/objects/9a/03079b8a8ee85a0bee58bf9be3da8b62414ed4 +0 -0
- data/spec/fixtures/spec_repo.git/objects/9f/13f7d0a9402c681f91dc590cf7b5470e6a77d2 +2 -0
- data/spec/fixtures/spec_repo.git/objects/9f/d738e8f7967c078dceed8190330fc8648ee56a +3 -0
- data/spec/fixtures/spec_repo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f +2 -0
- data/spec/fixtures/spec_repo.git/objects/a6/5fedf39aefe402d3bb6e24df4d4f5fe4547750 +3 -0
- data/spec/fixtures/spec_repo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +0 -0
- data/spec/fixtures/spec_repo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +0 -0
- data/spec/fixtures/spec_repo.git/objects/ae/90f12eea699729ed24555e40b9fd669da12a12 +0 -0
- data/spec/fixtures/spec_repo.git/objects/b2/5fa35b38051e4ae45d4222e795f9df2e43f1d1 +2 -0
- data/spec/fixtures/spec_repo.git/objects/b6/361fc6a97178d8fc8639fdeed71c775ab52593 +0 -0
- data/spec/fixtures/spec_repo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 +3 -0
- data/spec/fixtures/spec_repo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd +3 -0
- data/spec/fixtures/spec_repo.git/objects/d0/7b0f9a8c89f1d9e74dc4fce6421dec5ef8a659 +0 -0
- data/spec/fixtures/spec_repo.git/objects/d6/c93164c249c8000205dd4ec5cbca1b516d487f +0 -0
- data/spec/fixtures/spec_repo.git/objects/d7/1aab4f9b04b45ce09bcaa636a9be6231474759 +0 -0
- data/spec/fixtures/spec_repo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/spec/fixtures/spec_repo.git/objects/e7/b4ad382349ff96dd8199000580b9b1e2042eb0 +0 -0
- data/spec/fixtures/spec_repo.git/objects/f1/425cef211cc08caa31e7b545ffb232acb098c3 +0 -0
- data/spec/fixtures/spec_repo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +0 -0
- data/spec/fixtures/spec_repo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +0 -0
- data/spec/fixtures/spec_repo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +0 -0
- data/spec/fixtures/spec_repo.git/objects/fd/4959ce7510db09d4d8217fa2d1780413e05a09 +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx +0 -0
- data/spec/fixtures/spec_repo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack +0 -0
- data/spec/fixtures/spec_repo.git/packed-refs +3 -0
- data/spec/fixtures/spec_repo.git/refs/heads/br2 +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/cannot-fetch +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/chomped +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/haacked +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/master +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/not-good +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/packed-test +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/subtrees +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/test +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/track-local +1 -0
- data/spec/fixtures/spec_repo.git/refs/heads/trailing +1 -0
- data/spec/fixtures/spec_repo.git/refs/notes/fanout +1 -0
- data/spec/fixtures/spec_repo.git/refs/remotes/test/master +1 -0
- data/spec/fixtures/spec_repo.git/refs/tags/master-r1 +1 -0
- data/spec/fixtures/spec_repo.git/refs/tags/master-r2 +1 -0
- data/spec/fixtures/spec_repo.git/refs/tags/test-r1 +1 -0
- data/spec/fixtures/spec_repo.git/refs/tags/test-r2 +1 -0
- data/spec/git_spec.rb +23 -0
- data/spec/group_config_spec.rb +64 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/test_env.rb +17 -0
- metadata +197 -0
data/script/console
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Blaggard::Advertisement do
|
|
4
|
+
subject{ Blaggard::Advertisement }
|
|
5
|
+
context 'read' do
|
|
6
|
+
before do
|
|
7
|
+
@advert = subject.new(TestEnv.repo_path, ["group1", "group2"], 'upload-pack')
|
|
8
|
+
@repo_branches = ["refs/heads/br2", "refs/heads/cannot-fetch",
|
|
9
|
+
"refs/heads/chomped", "refs/heads/haacked",
|
|
10
|
+
"refs/heads/master", "refs/heads/not-good",
|
|
11
|
+
"refs/heads/packed", "refs/heads/packed-test",
|
|
12
|
+
"refs/heads/subtrees", "refs/heads/test",
|
|
13
|
+
"refs/heads/track-local", "refs/heads/trailing"]
|
|
14
|
+
@subset = ["refs/heads/test", "refs/heads/chomped"]
|
|
15
|
+
end
|
|
16
|
+
it 'should get the original advertisement properly' do
|
|
17
|
+
raw = @advert.raw_refs
|
|
18
|
+
expect(raw.first.split("\0").length).to eq(2)
|
|
19
|
+
expect(raw.last).to eq("0000")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'should properly hash out ref names' do
|
|
23
|
+
hash = @advert.refs_hash
|
|
24
|
+
# We may add more tags and things to the repo, this makes sure the
|
|
25
|
+
# basic subset is there for the test to pass
|
|
26
|
+
expect(hash.keys & @repo_branches).to eq(@repo_branches)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'should get the accessible branches from the meta config when permission is *' do
|
|
30
|
+
meta = @advert.instance_variable_get :@meta
|
|
31
|
+
allow(meta).to receive(:branches).and_return(["refs/heads/*"])
|
|
32
|
+
expect(@advert.accessible_branches).to eq(@repo_branches)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should get a subset of branches for accessible branches' do
|
|
36
|
+
meta = @advert.instance_variable_get :@meta
|
|
37
|
+
allow(meta).to receive(:branches).and_return(@subset)
|
|
38
|
+
expect(@advert.accessible_branches).to eq(@subset)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should update_line_length properly' do
|
|
42
|
+
wrong_line = "0042a65fedf39aefe402d3bb6e24df4d4f5fe4547750 HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/2.0.1\n"
|
|
43
|
+
right_line = "00d1a65fedf39aefe402d3bb6e24df4d4f5fe4547750 HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/2.0.1\n"
|
|
44
|
+
expect(@advert.update_line_length(wrong_line)).to eq(right_line)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should properly figure out if the user can access the current HEAD' do
|
|
48
|
+
meta = @advert.instance_variable_get :@meta
|
|
49
|
+
allow(meta).to receive(:can_access_branch?).with('group1', :read, "refs/heads/master").and_return(true)
|
|
50
|
+
allow(meta).to receive(:can_access_branch?).with('group2', :read, "refs/heads/master").and_return(false)
|
|
51
|
+
expect(@advert.can_access_head?).to eq(true)
|
|
52
|
+
|
|
53
|
+
allow(meta).to receive(:can_access_branch?).with('group1', :read, "refs/heads/master").and_return(false)
|
|
54
|
+
allow(meta).to receive(:can_access_branch?).with('group2', :read, "refs/heads/master").and_return(false)
|
|
55
|
+
expect(@advert.can_access_head?).to eq(false)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'stubbed git call' do
|
|
59
|
+
before do
|
|
60
|
+
git = @advert.instance_variable_get :@git
|
|
61
|
+
time_ordered_refs = ["refs/heads/subtrees", "refs/heads/master", "refs/heads/not-good", "refs/heads/test", "refs/heads/chomped", "refs/heads/trailing", "refs/heads/br2", "refs/heads/cannot-fetch", "refs/heads/track-local", "refs/heads/packed-test", "refs/heads/packed", "refs/heads/haacked"]
|
|
62
|
+
allow(git).to receive(:time_ordered_refs).and_return(time_ordered_refs)
|
|
63
|
+
allow(@advert).to receive(:accessible_branches).and_return(@subset)
|
|
64
|
+
end
|
|
65
|
+
it 'should update the HEAD line of the advertisement if user cannot access HEAD' do
|
|
66
|
+
expect(@advert.update_head).to include("00cfe90810b8df3e80c413d903f631643c716887138d HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/test")
|
|
67
|
+
end
|
|
68
|
+
it 'should output the correct full advertisement' do
|
|
69
|
+
allow(@advert).to receive(:can_access_head?).and_return(true)
|
|
70
|
+
git_version = `git --version`.split.last
|
|
71
|
+
advertisement = "00d1a65fedf39aefe402d3bb6e24df4d4f5fe4547750 HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/#{git_version}
|
|
72
|
+
003de90810b8df3e80c413d903f631643c716887138d refs/heads/test
|
|
73
|
+
0040e90810b8df3e80c413d903f631643c716887138d refs/heads/chomped
|
|
74
|
+
003fe90810b8df3e80c413d903f631643c716887138d refs/tags/test-r2
|
|
75
|
+
003f6dcf9bf7541ee10456529833502442f385010c3d refs/tags/test-r1
|
|
76
|
+
0000"
|
|
77
|
+
expect(@advert.advertise).to eq(advertisement)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ref: refs/heads/master
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ref: HEAD
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
[core]
|
|
2
|
+
repositoryformatversion = 0
|
|
3
|
+
filemode = true
|
|
4
|
+
bare = true
|
|
5
|
+
logallrefupdates = true
|
|
6
|
+
[remote "test"]
|
|
7
|
+
url = git://github.com/libgit2/libgit2
|
|
8
|
+
fetch = +refs/heads/*:refs/remotes/test/*
|
|
9
|
+
[remote "joshaber"]
|
|
10
|
+
url = git://github.com/libgit2/libgit2
|
|
11
|
+
[remote "empty-remote-url"]
|
|
12
|
+
url =
|
|
13
|
+
pushurl =
|
|
14
|
+
[remote "empty-remote-pushurl"]
|
|
15
|
+
pushurl =
|
|
16
|
+
[remote "no-remote-url"]
|
|
17
|
+
fetch =
|
|
18
|
+
[remote "test_with_pushurl"]
|
|
19
|
+
url = git://github.com/libgit2/fetchlibgit2
|
|
20
|
+
pushurl = git://github.com/libgit2/pushlibgit2
|
|
21
|
+
fetch = +refs/heads/*:refs/remotes/test_with_pushurl/*
|
|
22
|
+
|
|
23
|
+
[branch "master"]
|
|
24
|
+
remote = test
|
|
25
|
+
merge = refs/heads/master
|
|
26
|
+
[branch "track-local"]
|
|
27
|
+
remote = .
|
|
28
|
+
merge = refs/heads/master
|
|
29
|
+
[branch "cannot-fetch"]
|
|
30
|
+
remote = joshaber
|
|
31
|
+
merge = refs/heads/cannot-fetch
|
|
32
|
+
[branch "remoteless"]
|
|
33
|
+
remote =
|
|
34
|
+
merge = refs/heads/master
|
|
35
|
+
[branch "mergeless"]
|
|
36
|
+
remote = test
|
|
37
|
+
merge =
|
|
38
|
+
[branch "mergeandremoteless"]
|
|
39
|
+
remote =
|
|
40
|
+
merge =
|
|
41
|
+
|
|
42
|
+
#sample of access control configuration file
|
|
43
|
+
[access "refs/heads/*"]
|
|
44
|
+
RWCD=Administrators:ProjectOwners
|
|
45
|
+
|
|
46
|
+
[access "refs/heads/master"]
|
|
47
|
+
RWCD=Adminstrators:ProjectOwners
|
|
48
|
+
R=RegisteredUsers
|
|
49
|
+
|
|
50
|
+
[access "refs/heads/cannot-fetch"]
|
|
51
|
+
RW=Administrators:ProjectOwners
|
|
52
|
+
R=RegisteredUsers:GroupA
|
|
53
|
+
|
|
Binary file
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 be3563ae3f795b2b4353bcce3a527ad0a4f7f644 Ben Straub <bstraub@github.com> 1335806563 -0700 clone: from /Users/ben/src/libgit2/tests/resources/testrepo.git
|
|
2
|
+
be3563ae3f795b2b4353bcce3a527ad0a4f7f644 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1335806603 -0900 commit:
|
|
3
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750 5b5b025afb0b4c913b4c338a42934a3863bf3644 Ben Straub <bstraub@github.com> 1335806604 -0900 checkout: moving from master to 5b5b025
|
|
4
|
+
5b5b025afb0b4c913b4c338a42934a3863bf3644 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1335806605 -0900 checkout: moving from 5b5b025 to master
|
|
5
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750 c47800c7266a2be04c571c04d5a6614691ea99bd Ben Straub <bstraub@github.com> 1335806608 -0900 checkout: moving from master to br2
|
|
6
|
+
c47800c7266a2be04c571c04d5a6614691ea99bd a4a7dce85cf63874e984719f4fdd239f5145052f Ben Straub <bstraub@github.com> 1335806617 -0900 commit: checking in
|
|
7
|
+
a4a7dce85cf63874e984719f4fdd239f5145052f a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1335806621 -0900 checkout: moving from br2 to master
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 c47800c7266a2be04c571c04d5a6614691ea99bd Ben Straub <bstraub@github.com> 1335806608 -0700 branch: Created from refs/remotes/origin/br2
|
|
2
|
+
a4a7dce85cf63874e984719f4fdd239f5145052f a4a7dce85cf63874e984719f4fdd239f5145052f Ben Straub <bstraub@github.com> 1335806617 -0700 commit: checking in
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 be3563ae3f795b2b4353bcce3a527ad0a4f7f644 Ben Straub <bstraub@github.com> 1335806563 -0800 clone: from /Users/ben/src/libgit2/tests/resources/testrepo.git
|
|
2
|
+
be3563ae3f795b2b4353bcce3a527ad0a4f7f644 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1335806603 -0800 commit: checking in
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1336761944 -0700 branch: Created from master
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 be3563ae3f795b2b4353bcce3a527ad0a4f7f644 Ben Straub <bstraub@github.com> 1335806563 -0700 clone: from /Users/ben/src/libgit2/tests/resources/testrepo.git
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
0000000000000000000000000000000000000000 a65fedf39aefe402d3bb6e24df4d4f5fe4547750 Ben Straub <bstraub@github.com> 1335806565 -0800 update by push
|
|
2
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750 be3563ae3f795b2b4353bcce3a527ad0a4f7f644 Ben Straub <bstraub@github.com> 1335806688 -0800 update by push
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
x��Aj!��?0����09�o}�H�6�}��jUPP��Z&Y��� Aԛ��p��Fd��pz�[f�Y��P�qLJ.,Z�`�Ů�.�`�v��q
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
x+)JMU044b040031Qrut�ueX�l��mmA�m�̣�J}G�;U�T���������WRQ�`6���Kǥ�^/�-*|��W��3P�y��`%�E���\&g��|�0���{Ӎ1X
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.idx
ADDED
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-a81e489679b7d3418f9ab594bda8ceb37dd4c695.pack
ADDED
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx
ADDED
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack
ADDED
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.idx
ADDED
|
Binary file
|
data/spec/fixtures/spec_repo.git/objects/pack/pack-d85f5d483273108c9d8dd0e4728ccf0b2982423a.pack
ADDED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a4a7dce85cf63874e984719f4fdd239f5145052f
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a4a7dce85cf63874e984719f4fdd239f5145052f
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e90810b8df3e80c413d903f631643c716887138d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
258f0e2a959a364e40ed6603d5d44fbb24765b10
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
4a202b346bb0fb0db7eff3cffeb3c70babbd2045
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
763d71aadf09a7951596c9746c024e7eece7c7af
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e90810b8df3e80c413d903f631643c716887138d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
9fd738e8f7967c078dceed8190330fc8648ee56a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e90810b8df3e80c413d903f631643c716887138d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d07b0f9a8c89f1d9e74dc4fce6421dec5ef8a659
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
be3563ae3f795b2b4353bcce3a527ad0a4f7f644
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a65fedf39aefe402d3bb6e24df4d4f5fe4547750
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
5b5b025afb0b4c913b4c338a42934a3863bf3644
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
6dcf9bf7541ee10456529833502442f385010c3d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
e90810b8df3e80c413d903f631643c716887138d
|
data/spec/git_spec.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Blaggard::Git do
|
|
4
|
+
subject { Blaggard::Git }
|
|
5
|
+
before do
|
|
6
|
+
@git = subject.new(TestEnv.repo_path)
|
|
7
|
+
end
|
|
8
|
+
it 'should correctly order the refs by time' do
|
|
9
|
+
expected = ["refs/heads/subtrees", "refs/heads/master", "refs/heads/not-good",
|
|
10
|
+
"refs/heads/test", "refs/heads/chomped", "refs/heads/trailing",
|
|
11
|
+
"refs/heads/br2", "refs/heads/cannot-fetch", "refs/heads/track-local",
|
|
12
|
+
"refs/heads/packed-test", "refs/heads/packed", "refs/heads/haacked"]
|
|
13
|
+
expect(@git.time_ordered_refs).to eq(expected)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should get only the tags for the selected branch' do
|
|
17
|
+
expect(@git.tags_on_branch('refs/heads/test')).to eq(%W(test-r2 test-r1))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should validate the git-ness of a directory' do
|
|
21
|
+
expect(@git.valid_repo?).to eq(true)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Blaggard::GroupConfig do
|
|
4
|
+
subject { Blaggard::GroupConfig }
|
|
5
|
+
before do
|
|
6
|
+
@config = subject.new(TestEnv.repo_path)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should create the directory structure" do
|
|
10
|
+
meta_dir = File.join(TestEnv.repo_path, 'refs/meta')
|
|
11
|
+
expect(File.directory?(meta_dir)).to eq(true)
|
|
12
|
+
expect(@config.groups).to eq({})
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# This tests the cascade of group, priv and branch being created properly
|
|
16
|
+
it "should add a branch to a group properly" do
|
|
17
|
+
group = "admin_group"
|
|
18
|
+
branch = "refs/heads/test"
|
|
19
|
+
|
|
20
|
+
expect(@config.add_branch(group, :write, branch)).to eq(true)
|
|
21
|
+
expect(@config.branches([group], :write)).to include(branch)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context 'delete' do
|
|
25
|
+
before do
|
|
26
|
+
@group = "admin_group"
|
|
27
|
+
@branch = "refs/heads/test"
|
|
28
|
+
@config.add_branch(@group, :write, @branch)
|
|
29
|
+
end
|
|
30
|
+
it 'should delete a branch properly' do
|
|
31
|
+
|
|
32
|
+
expect(@config.delete_branch(@group, :write, @branch)).to eq(true)
|
|
33
|
+
expect(@config.branches([@group], :write)).not_to include(@branch)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'should delete a group properly and validate group existence' do
|
|
37
|
+
expect(@config.delete_group(@group)).to eq(true)
|
|
38
|
+
begin
|
|
39
|
+
@config.branches([@group], :write)
|
|
40
|
+
rescue => e
|
|
41
|
+
expect(e.message).to include("Group #{@group} does not exist.")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
it 'should error if branch does not exist' do
|
|
46
|
+
group = "admin_group"
|
|
47
|
+
branch = "refs/heads/not-a-branch"
|
|
48
|
+
begin
|
|
49
|
+
@config.add_branch(group, :write, branch)
|
|
50
|
+
rescue => e
|
|
51
|
+
expect(e.message).to include("Branch name #{branch} invalid.")
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'should validate privilege type' do
|
|
56
|
+
group = "admin_group"
|
|
57
|
+
branch = "test"
|
|
58
|
+
begin
|
|
59
|
+
@config.add_branch(group, :invalid, branch)
|
|
60
|
+
rescue => e
|
|
61
|
+
expect(e.message).to eq("Privilege must be either :read or :write")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|