read-only-gollum 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/HISTORY.md +102 -0
- data/Home.md +3 -0
- data/LICENSE +21 -0
- data/README.md +477 -0
- data/Rakefile +142 -0
- data/bin/read-only-gollum +126 -0
- data/docs/sanitization.md +32 -0
- data/lib/gollum.rb +41 -0
- data/lib/gollum/blob_entry.rb +78 -0
- data/lib/gollum/committer.rb +218 -0
- data/lib/gollum/file.rb +64 -0
- data/lib/gollum/frontend/app.rb +225 -0
- data/lib/gollum/frontend/public/css/dialog.css +141 -0
- data/lib/gollum/frontend/public/css/editor.css +537 -0
- data/lib/gollum/frontend/public/css/gollum.css +660 -0
- data/lib/gollum/frontend/public/css/ie7.css +69 -0
- data/lib/gollum/frontend/public/css/template.css +381 -0
- data/lib/gollum/frontend/public/images/icon-sprite.png +0 -0
- data/lib/gollum/frontend/public/javascript/editor/gollum.editor.js +1096 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/asciidoc.js +167 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/creole.js +104 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/markdown.js +211 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/org.js +173 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/pod.js +111 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/rdoc.js +74 -0
- data/lib/gollum/frontend/public/javascript/editor/langs/textile.js +175 -0
- data/lib/gollum/frontend/public/javascript/gollum.dialog.js +263 -0
- data/lib/gollum/frontend/public/javascript/gollum.js +161 -0
- data/lib/gollum/frontend/public/javascript/gollum.placeholder.js +54 -0
- data/lib/gollum/frontend/public/javascript/jquery.color.js +123 -0
- data/lib/gollum/frontend/public/javascript/jquery.js +7179 -0
- data/lib/gollum/frontend/templates/compare.mustache +38 -0
- data/lib/gollum/frontend/templates/create.mustache +17 -0
- data/lib/gollum/frontend/templates/edit.mustache +17 -0
- data/lib/gollum/frontend/templates/editor.mustache +116 -0
- data/lib/gollum/frontend/templates/error.mustache +8 -0
- data/lib/gollum/frontend/templates/history.mustache +58 -0
- data/lib/gollum/frontend/templates/layout.mustache +28 -0
- data/lib/gollum/frontend/templates/page.mustache +37 -0
- data/lib/gollum/frontend/templates/pages.mustache +35 -0
- data/lib/gollum/frontend/templates/search.mustache +36 -0
- data/lib/gollum/frontend/templates/searchbar.mustache +10 -0
- data/lib/gollum/frontend/views/compare.rb +94 -0
- data/lib/gollum/frontend/views/create.rb +48 -0
- data/lib/gollum/frontend/views/edit.rb +52 -0
- data/lib/gollum/frontend/views/editable.rb +13 -0
- data/lib/gollum/frontend/views/error.rb +7 -0
- data/lib/gollum/frontend/views/history.rb +44 -0
- data/lib/gollum/frontend/views/layout.rb +20 -0
- data/lib/gollum/frontend/views/page.rb +57 -0
- data/lib/gollum/frontend/views/pages.rb +19 -0
- data/lib/gollum/frontend/views/search.rb +20 -0
- data/lib/gollum/git_access.rb +248 -0
- data/lib/gollum/markup.rb +489 -0
- data/lib/gollum/page.rb +430 -0
- data/lib/gollum/pagination.rb +61 -0
- data/lib/gollum/sanitization.rb +174 -0
- data/lib/gollum/tex.rb +89 -0
- data/lib/gollum/web_sequence_diagram.rb +43 -0
- data/lib/gollum/wiki.rb +636 -0
- data/read-only-gollum.gemspec +224 -0
- data/templates/formatting.html +92 -0
- data/test/examples/empty.git/HEAD +1 -0
- data/test/examples/empty.git/config +5 -0
- data/test/examples/empty.git/description +1 -0
- data/test/examples/empty.git/hooks/applypatch-msg.sample +15 -0
- data/test/examples/empty.git/hooks/commit-msg.sample +24 -0
- data/test/examples/empty.git/hooks/post-commit.sample +8 -0
- data/test/examples/empty.git/hooks/post-receive.sample +15 -0
- data/test/examples/empty.git/hooks/post-update.sample +8 -0
- data/test/examples/empty.git/hooks/pre-applypatch.sample +14 -0
- data/test/examples/empty.git/hooks/pre-commit.sample +46 -0
- data/test/examples/empty.git/hooks/pre-rebase.sample +169 -0
- data/test/examples/empty.git/hooks/prepare-commit-msg.sample +36 -0
- data/test/examples/empty.git/hooks/update.sample +128 -0
- data/test/examples/empty.git/info/exclude +6 -0
- data/test/examples/empty.git/objects/info/.gitkeep +0 -0
- data/test/examples/empty.git/objects/pack/.gitkeep +0 -0
- data/test/examples/empty.git/refs/heads/.gitkeep +0 -0
- data/test/examples/lotr.git/COMMIT_EDITMSG +1 -0
- data/test/examples/lotr.git/HEAD +1 -0
- data/test/examples/lotr.git/ORIG_HEAD +1 -0
- data/test/examples/lotr.git/config +12 -0
- data/test/examples/lotr.git/description +1 -0
- data/test/examples/lotr.git/index +0 -0
- data/test/examples/lotr.git/info/exclude +6 -0
- data/test/examples/lotr.git/logs/HEAD +3 -0
- data/test/examples/lotr.git/logs/refs/heads/master +3 -0
- data/test/examples/lotr.git/objects/06/131480411710c92a82fe2d1e76932c70feb2e5 +0 -0
- data/test/examples/lotr.git/objects/0a/de1e2916346d4c1f2fb63b863fd3c16808fe44 +0 -0
- data/test/examples/lotr.git/objects/0e/d8cbe0a25235bd867e65193c7d837c66b328ef +3 -0
- data/test/examples/lotr.git/objects/12/629d666c5e3178f82f533f543d61b53dc78c0b +0 -0
- data/test/examples/lotr.git/objects/1d/b89ebba7e2c14d93b94ff98cfa3708a4f0d4e3 +2 -0
- data/test/examples/lotr.git/objects/24/49c2681badfd3c189e8ed658dacffe8ba48fe5 +0 -0
- data/test/examples/lotr.git/objects/25/4bdc1ba27d8b8a794538a8522d9a2b56ec2dd9 +0 -0
- data/test/examples/lotr.git/objects/2c/b9156ad383914561a8502fc70f5a1d887e48ad +4 -0
- data/test/examples/lotr.git/objects/5d/cac289a8603188d2c5caf481dcba2985126aaa +0 -0
- data/test/examples/lotr.git/objects/60/f12f4254f58801b9ee7db7bca5fa8aeefaa56b +0 -0
- data/test/examples/lotr.git/objects/71/4323c104239440a5c66ab12a67ed07a83c404f +0 -0
- data/test/examples/lotr.git/objects/84/0ec5b1ba1320e8ec443f28f99566f615d5af10 +0 -0
- data/test/examples/lotr.git/objects/93/6b83ee0dd8837adb82511e40d5e4ebe59bb675 +0 -0
- data/test/examples/lotr.git/objects/94/523d7ae48aeba575099dd12926420d8fd0425d +2 -0
- data/test/examples/lotr.git/objects/96/97dc65e095658bbd1b8e8678e08881e86d32f1 +0 -0
- data/test/examples/lotr.git/objects/a3/1ca2a7c352c92531a8b99815d15843b259e814 +0 -0
- data/test/examples/lotr.git/objects/a6/59b3763b822dd97544621fd0beef162ea37b14 +4 -0
- data/test/examples/lotr.git/objects/a8/ad3c09dd842a3517085bfadd37718856dee813 +0 -0
- data/test/examples/lotr.git/objects/aa/b61fe89d56f8614c0a8151da34f939dcedfa68 +0 -0
- data/test/examples/lotr.git/objects/bc/4b5fc0ce2c2ba3acef6647e4f67256ee45ab60 +0 -0
- data/test/examples/lotr.git/objects/c3/b43e9f08966b088e7a0192e436b7a884542e05 +0 -0
- data/test/examples/lotr.git/objects/dc/596d6b2dd89ab05c66f4abd7d5eb706bc17f19 +0 -0
- data/test/examples/lotr.git/objects/ec/da3205bee14520aab5a7bb307392064b938e83 +0 -0
- data/test/examples/lotr.git/objects/f4/84ebb1f40f8eb20d1bcd8d1d71934d2b8ae961 +0 -0
- data/test/examples/lotr.git/objects/fa/e7ef5344202bba4129abdc13060d9297d99465 +3 -0
- data/test/examples/lotr.git/objects/info/packs +2 -0
- data/test/examples/lotr.git/objects/pack/pack-dcbeaf3f6ff6c5eb08ea2b0a2d83626e8763546b.idx +0 -0
- data/test/examples/lotr.git/objects/pack/pack-dcbeaf3f6ff6c5eb08ea2b0a2d83626e8763546b.pack +0 -0
- data/test/examples/lotr.git/packed-refs +2 -0
- data/test/examples/lotr.git/refs/heads/master +1 -0
- data/test/examples/lotr.git/refs/remotes/origin/HEAD +1 -0
- data/test/examples/page_file_dir.git/COMMIT_EDITMSG +1 -0
- data/test/examples/page_file_dir.git/HEAD +1 -0
- data/test/examples/page_file_dir.git/config +6 -0
- data/test/examples/page_file_dir.git/description +1 -0
- data/test/examples/page_file_dir.git/index +0 -0
- data/test/examples/page_file_dir.git/info/exclude +6 -0
- data/test/examples/page_file_dir.git/logs/HEAD +1 -0
- data/test/examples/page_file_dir.git/logs/refs/heads/master +1 -0
- data/test/examples/page_file_dir.git/objects/0c/7d27db1f575263efdcab3dc650f4502a2dbcbf +0 -0
- data/test/examples/page_file_dir.git/objects/22/b404803c966dd92865614d86ff22ca12e50c1e +0 -0
- data/test/examples/page_file_dir.git/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 +0 -0
- data/test/examples/page_file_dir.git/objects/57/16ca5987cbf97d6bb54920bea6adde242d87e6 +0 -0
- data/test/examples/page_file_dir.git/objects/5b/43e14e0a15fb6f08feab1773d1c0991e9f71e2 +0 -0
- data/test/examples/page_file_dir.git/refs/heads/master +1 -0
- data/test/examples/revert.git/COMMIT_EDITMSG +1 -0
- data/test/examples/revert.git/HEAD +1 -0
- data/test/examples/revert.git/config +12 -0
- data/test/examples/revert.git/description +1 -0
- data/test/examples/revert.git/index +0 -0
- data/test/examples/revert.git/info/exclude +6 -0
- data/test/examples/revert.git/logs/HEAD +2 -0
- data/test/examples/revert.git/logs/refs/heads/master +2 -0
- data/test/examples/revert.git/objects/20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d +0 -0
- data/test/examples/revert.git/objects/41/76394bfa11222363c66ce7e84b5f154095b6d9 +0 -0
- data/test/examples/revert.git/objects/6a/69f92020f5df77af6e8813ff1232493383b708 +0 -0
- data/test/examples/revert.git/objects/b4/785957bc986dc39c629de9fac9df46972c00fc +0 -0
- data/test/examples/revert.git/objects/f4/03b791119f8232b7cb0ba455c624ac6435f433 +0 -0
- data/test/examples/revert.git/objects/info/packs +2 -0
- data/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.idx +0 -0
- data/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack +0 -0
- data/test/examples/revert.git/packed-refs +2 -0
- data/test/examples/revert.git/refs/heads/master +1 -0
- data/test/examples/revert.git/refs/remotes/origin/HEAD +1 -0
- data/test/examples/yubiwa.git/HEAD +1 -0
- data/test/examples/yubiwa.git/config +5 -0
- data/test/examples/yubiwa.git/description +1 -0
- data/test/examples/yubiwa.git/info/exclude +6 -0
- data/test/examples/yubiwa.git/objects/10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 +0 -0
- data/test/examples/yubiwa.git/objects/52/4b82874327ea7cbf730389964ba7cb3de966de +0 -0
- data/test/examples/yubiwa.git/objects/58/3fc201cb457fb3f1480f3e1e5999b119633835 +0 -0
- data/test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 +1 -0
- data/test/examples/yubiwa.git/objects/89/64ed1b4e21aa90e831763bbce9034bfda81b70 +0 -0
- data/test/examples/yubiwa.git/objects/9f/f6dd0660da5fba2d3374adb2b84fa653bb538b +0 -0
- data/test/examples/yubiwa.git/objects/ac/e97abf2b177815a1972d7db22f229f58c83309 +0 -0
- data/test/examples/yubiwa.git/objects/b1/f443863a4816628807fbf86141ebef055dda34 +0 -0
- data/test/examples/yubiwa.git/refs/heads/master +1 -0
- data/test/helper.rb +66 -0
- data/test/test_app.rb +169 -0
- data/test/test_committer.rb +64 -0
- data/test/test_file.rb +27 -0
- data/test/test_git_access.rb +52 -0
- data/test/test_markup.rb +628 -0
- data/test/test_page.rb +166 -0
- data/test/test_page_revert.rb +45 -0
- data/test/test_wiki.rb +462 -0
- metadata +470 -0
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e3
|
@@ -0,0 +1 @@
|
|
1
|
+
ref: refs/remotes/origin/master
|
@@ -0,0 +1 @@
|
|
1
|
+
initial commit
|
@@ -0,0 +1 @@
|
|
1
|
+
ref: refs/heads/master
|
@@ -0,0 +1 @@
|
|
1
|
+
Unnamed repository; edit this file 'description' to name the repository.
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
0000000000000000000000000000000000000000 22b404803c966dd92865614d86ff22ca12e50c1e rick <technoweenie@gmail.com> 1295287591 -0800 commit (initial): initial commit
|
@@ -0,0 +1 @@
|
|
1
|
+
0000000000000000000000000000000000000000 22b404803c966dd92865614d86ff22ca12e50c1e rick <technoweenie@gmail.com> 1295287591 -0800 commit (initial): initial commit
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
22b404803c966dd92865614d86ff22ca12e50c1e
|
@@ -0,0 +1 @@
|
|
1
|
+
add footer and sidebar
|
@@ -0,0 +1 @@
|
|
1
|
+
ref: refs/heads/master
|
@@ -0,0 +1,12 @@
|
|
1
|
+
[core]
|
2
|
+
repositoryformatversion = 0
|
3
|
+
filemode = true
|
4
|
+
bare = false
|
5
|
+
logallrefupdates = true
|
6
|
+
ignorecase = true
|
7
|
+
[remote "origin"]
|
8
|
+
fetch = +refs/heads/*:refs/remotes/origin/*
|
9
|
+
url = /Users/rick/p/gollum/test/examples/revert.git
|
10
|
+
[branch "master"]
|
11
|
+
remote = origin
|
12
|
+
merge = refs/heads/master
|
@@ -0,0 +1 @@
|
|
1
|
+
Unnamed repository; edit this file 'description' to name the repository.
|
Binary file
|
@@ -0,0 +1,2 @@
|
|
1
|
+
0000000000000000000000000000000000000000 7c45b5f16ff3bae2a0063191ef832701214d4df5 rick <technoweenie@gmail.com> 1291942707 -0800 clone: from /Users/rick/p/gollum/test/examples/revert.git
|
2
|
+
7c45b5f16ff3bae2a0063191ef832701214d4df5 f403b791119f8232b7cb0ba455c624ac6435f433 rick <technoweenie@gmail.com> 1291942743 -0800 commit: add footer and sidebar
|
@@ -0,0 +1,2 @@
|
|
1
|
+
0000000000000000000000000000000000000000 7c45b5f16ff3bae2a0063191ef832701214d4df5 rick <technoweenie@gmail.com> 1291942707 -0800 clone: from /Users/rick/p/gollum/test/examples/revert.git
|
2
|
+
7c45b5f16ff3bae2a0063191ef832701214d4df5 f403b791119f8232b7cb0ba455c624ac6435f433 rick <technoweenie@gmail.com> 1291942743 -0800 commit: add footer and sidebar
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
f403b791119f8232b7cb0ba455c624ac6435f433
|
@@ -0,0 +1 @@
|
|
1
|
+
ref: refs/remotes/origin/master
|
@@ -0,0 +1 @@
|
|
1
|
+
ref: refs/heads/master
|
@@ -0,0 +1 @@
|
|
1
|
+
Unnamed repository; edit this file 'description' to name the repository.
|
@@ -0,0 +1 @@
|
|
1
|
+
x��Aj�0E��)���Ȓ��PJC�4�i${ �Y��A��-ދ�m�`��jJ�s���{�4�@��;���i��G����O[��S���J�����7��Fr{��������̌g3�=�c�ҿ݉91wZ����FRv-8]ϗ�ሸR�شÄT������[N�
|
@@ -0,0 +1 @@
|
|
1
|
+
8964ed1b4e21aa90e831763bbce9034bfda81b70
|
data/test/helper.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rack/test'
|
3
|
+
require 'test/unit'
|
4
|
+
require 'shoulda'
|
5
|
+
require 'mocha'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
dir = File.dirname(File.expand_path(__FILE__))
|
9
|
+
$LOAD_PATH.unshift(File.join(dir, '..', 'lib'))
|
10
|
+
$LOAD_PATH.unshift(dir)
|
11
|
+
|
12
|
+
ENV['RACK_ENV'] = 'test'
|
13
|
+
require 'gollum'
|
14
|
+
require 'gollum/frontend/app'
|
15
|
+
|
16
|
+
# Make sure we're in the test dir, the tests expect that to be the current
|
17
|
+
# directory.
|
18
|
+
TEST_DIR = File.join(File.dirname(__FILE__), *%w[.])
|
19
|
+
|
20
|
+
def testpath(path)
|
21
|
+
File.join(TEST_DIR, path)
|
22
|
+
end
|
23
|
+
|
24
|
+
def cloned_testpath(path)
|
25
|
+
repo = File.expand_path(testpath(path))
|
26
|
+
path = File.dirname(repo)
|
27
|
+
cloned = File.join(path, self.class.name)
|
28
|
+
FileUtils.rm_rf(cloned)
|
29
|
+
Dir.chdir(path) do
|
30
|
+
%x{git clone #{File.basename(repo)} #{self.class.name} 2>/dev/null}
|
31
|
+
end
|
32
|
+
cloned
|
33
|
+
end
|
34
|
+
|
35
|
+
def commit_details
|
36
|
+
{ :message => "Did something at #{Time.now}",
|
37
|
+
:name => "Tom Preston-Werner",
|
38
|
+
:email => "tom@github.com" }
|
39
|
+
end
|
40
|
+
|
41
|
+
def normal(text)
|
42
|
+
text.gsub!(' ', '')
|
43
|
+
text.gsub!("\n", '')
|
44
|
+
text
|
45
|
+
end
|
46
|
+
|
47
|
+
# test/spec/mini 3
|
48
|
+
# http://gist.github.com/25455
|
49
|
+
# chris@ozmm.org
|
50
|
+
# file:lib/test/spec/mini.rb
|
51
|
+
def context(*args, &block)
|
52
|
+
return super unless (name = args.first) && block
|
53
|
+
require 'test/unit'
|
54
|
+
klass = Class.new(defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase) do
|
55
|
+
def self.test(name, &block)
|
56
|
+
define_method("test_#{name.gsub(/\W/,'_')}", &block) if block
|
57
|
+
end
|
58
|
+
def self.xtest(*args) end
|
59
|
+
def self.setup(&block) define_method(:setup, &block) end
|
60
|
+
def self.teardown(&block) define_method(:teardown, &block) end
|
61
|
+
end
|
62
|
+
(class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
|
63
|
+
$contexts << klass
|
64
|
+
klass.class_eval &block
|
65
|
+
end
|
66
|
+
$contexts = []
|
data/test/test_app.rb
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
# ~*~ encoding: utf-8 ~*~
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
|
3
|
+
|
4
|
+
context "Frontend" do
|
5
|
+
include Rack::Test::Methods
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@path = cloned_testpath("examples/revert.git")
|
9
|
+
@wiki = Gollum::Wiki.new(@path)
|
10
|
+
Precious::App.set(:gollum_path, @path)
|
11
|
+
Precious::App.set(:wiki_options, {})
|
12
|
+
end
|
13
|
+
|
14
|
+
teardown do
|
15
|
+
FileUtils.rm_rf(@path)
|
16
|
+
end
|
17
|
+
|
18
|
+
test "edits page" do
|
19
|
+
page_1 = @wiki.page('A')
|
20
|
+
post "/edit/A", :content => 'abc',
|
21
|
+
:format => page_1.format, :message => 'def'
|
22
|
+
follow_redirect!
|
23
|
+
assert last_response.ok?
|
24
|
+
|
25
|
+
@wiki.clear_cache
|
26
|
+
page_2 = @wiki.page(page_1.name)
|
27
|
+
assert_equal 'abc', page_2.raw_data
|
28
|
+
assert_equal 'def', page_2.version.message
|
29
|
+
assert_not_equal page_1.version.sha, page_2.version.sha
|
30
|
+
end
|
31
|
+
|
32
|
+
test "edits page footer and sidebar" do
|
33
|
+
commits = @wiki.repo.commits('master').size
|
34
|
+
page_1 = @wiki.page('A')
|
35
|
+
foot_1 = page_1.footer
|
36
|
+
side_1 = page_1.sidebar
|
37
|
+
|
38
|
+
post "/edit/A",
|
39
|
+
:footer => 'footer', :page => "A", :sidebar => 'sidebar', :message => 'def'
|
40
|
+
follow_redirect!
|
41
|
+
assert_equal "/A", last_request.fullpath
|
42
|
+
assert last_response.ok?
|
43
|
+
|
44
|
+
@wiki.clear_cache
|
45
|
+
page_2 = @wiki.page(page_1.name)
|
46
|
+
foot_2 = page_2.footer
|
47
|
+
side_2 = page_2.sidebar
|
48
|
+
assert_equal page_1.raw_data, page_2.raw_data
|
49
|
+
|
50
|
+
assert_equal 'footer', foot_2.raw_data
|
51
|
+
assert_equal 'def', foot_2.version.message
|
52
|
+
assert_not_equal foot_1.version.sha, foot_2.version.sha
|
53
|
+
|
54
|
+
assert_equal 'sidebar', side_2.raw_data
|
55
|
+
assert_equal 'def', side_2.version.message
|
56
|
+
assert_not_equal side_1.version.sha, side_2.version.sha
|
57
|
+
assert_equal commits+1, @wiki.repo.commits('master').size
|
58
|
+
end
|
59
|
+
|
60
|
+
test "renames page" do
|
61
|
+
page_1 = @wiki.page('B')
|
62
|
+
post "/edit/B", :content => 'abc',
|
63
|
+
:rename => "C",
|
64
|
+
:format => page_1.format, :message => 'def'
|
65
|
+
follow_redirect!
|
66
|
+
assert_equal "/C", last_request.fullpath
|
67
|
+
assert last_response.ok?
|
68
|
+
|
69
|
+
@wiki.clear_cache
|
70
|
+
assert_nil @wiki.page("B")
|
71
|
+
page_2 = @wiki.page('C')
|
72
|
+
assert_equal 'abc', page_2.raw_data
|
73
|
+
assert_equal 'def', page_2.version.message
|
74
|
+
assert_not_equal page_1.version.sha, page_2.version.sha
|
75
|
+
end
|
76
|
+
|
77
|
+
test "creates page" do
|
78
|
+
post "/create", :content => 'abc', :page => "D",
|
79
|
+
:format => 'markdown', :message => 'def'
|
80
|
+
follow_redirect!
|
81
|
+
assert last_response.ok?
|
82
|
+
|
83
|
+
page = @wiki.page('D')
|
84
|
+
assert_equal 'abc', page.raw_data
|
85
|
+
assert_equal 'def', page.version.message
|
86
|
+
end
|
87
|
+
|
88
|
+
test "creates pages with escaped characters in title" do
|
89
|
+
post "/create", :content => 'abc', :page => 'Title with spaces',
|
90
|
+
:format => 'markdown', :message => 'foo'
|
91
|
+
assert_equal 'http://example.org/Title-with-spaces', last_response.headers['Location']
|
92
|
+
get "/Title-with-spaces"
|
93
|
+
assert_match /abc/, last_response.body
|
94
|
+
|
95
|
+
post "/create", :content => 'ghi', :page => 'Title/with/slashes',
|
96
|
+
:format => 'markdown', :message => 'bar'
|
97
|
+
assert_equal 'http://example.org/Title-with-slashes', last_response.headers['Location']
|
98
|
+
get "/Title-with-slashes"
|
99
|
+
assert_match /ghi/, last_response.body
|
100
|
+
end
|
101
|
+
|
102
|
+
test "guards against creation of existing page" do
|
103
|
+
name = "A"
|
104
|
+
post "/create", :content => 'abc', :page => name,
|
105
|
+
:format => 'markdown', :message => 'def'
|
106
|
+
assert last_response.ok?
|
107
|
+
|
108
|
+
@wiki.clear_cache
|
109
|
+
page = @wiki.page(name)
|
110
|
+
assert_not_equal 'abc', page.raw_data
|
111
|
+
end
|
112
|
+
|
113
|
+
test "previews content" do
|
114
|
+
post "/preview", :content => 'abc', :format => 'markdown'
|
115
|
+
assert last_response.ok?
|
116
|
+
end
|
117
|
+
|
118
|
+
test "previews content on the first page of an empty wiki" do
|
119
|
+
@path = cloned_testpath("examples/empty.git")
|
120
|
+
@wiki = Gollum::Wiki.new(@path)
|
121
|
+
Precious::App.set(:gollum_path, @path)
|
122
|
+
Precious::App.set(:wiki_options, {})
|
123
|
+
|
124
|
+
post "/preview", :content => 'abc', :format => 'markdown'
|
125
|
+
assert last_response.ok?
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
test "reverts single commit" do
|
130
|
+
page1 = @wiki.page('B')
|
131
|
+
|
132
|
+
post "/revert/B/7c45b5f16ff3bae2a0063191ef832701214d4df5"
|
133
|
+
follow_redirect!
|
134
|
+
assert last_response.ok?
|
135
|
+
|
136
|
+
@wiki.clear_cache
|
137
|
+
page2 = @wiki.page('B')
|
138
|
+
assert_not_equal page1.version.sha, page2.version.sha
|
139
|
+
assert_equal "INITIAL", page2.raw_data.strip
|
140
|
+
end
|
141
|
+
|
142
|
+
test "reverts multiple commits" do
|
143
|
+
page1 = @wiki.page('A')
|
144
|
+
|
145
|
+
post "/revert/A/fc66539528eb96f21b2bbdbf557788fe8a1196ac/b26b791cb7917c4f37dd9cb4d1e0efb24ac4d26f"
|
146
|
+
follow_redirect!
|
147
|
+
assert last_response.ok?
|
148
|
+
|
149
|
+
@wiki.clear_cache
|
150
|
+
page2 = @wiki.page('A')
|
151
|
+
assert_not_equal page1.version.sha, page2.version.sha
|
152
|
+
assert_equal "INITIAL", page2.raw_data.strip
|
153
|
+
end
|
154
|
+
|
155
|
+
test "cannot revert conflicting commit" do
|
156
|
+
page1 = @wiki.page('A')
|
157
|
+
|
158
|
+
post "/revert/A/302a5491a9a5ba12c7652ac831a44961afa312d2"
|
159
|
+
assert last_response.ok?
|
160
|
+
|
161
|
+
@wiki.clear_cache
|
162
|
+
page2 = @wiki.page('A')
|
163
|
+
assert_equal page1.version.sha, page2.version.sha
|
164
|
+
end
|
165
|
+
|
166
|
+
def app
|
167
|
+
Precious::App
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# ~*~ encoding: utf-8 ~*~
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "helper"))
|
3
|
+
|
4
|
+
context "Wiki" do
|
5
|
+
setup do
|
6
|
+
@wiki = Gollum::Wiki.new(testpath("examples/lotr.git"))
|
7
|
+
end
|
8
|
+
|
9
|
+
test "normalizes commit hash" do
|
10
|
+
commit = {:message => 'abc'}
|
11
|
+
name = @wiki.repo.config['user.name']
|
12
|
+
email = @wiki.repo.config['user.email']
|
13
|
+
committer = Gollum::Committer.new(@wiki, commit)
|
14
|
+
assert_equal name, committer.actor.name
|
15
|
+
assert_equal email, committer.actor.email
|
16
|
+
|
17
|
+
commit[:name] = 'bob'
|
18
|
+
commit[:email] = ''
|
19
|
+
committer = Gollum::Committer.new(@wiki, commit)
|
20
|
+
assert_equal 'bob', committer.actor.name
|
21
|
+
assert_equal email, committer.actor.email
|
22
|
+
|
23
|
+
commit[:email] = 'foo@bar.com'
|
24
|
+
committer = Gollum::Committer.new(@wiki, commit)
|
25
|
+
assert_equal 'bob', committer.actor.name
|
26
|
+
assert_equal 'foo@bar.com', committer.actor.email
|
27
|
+
end
|
28
|
+
|
29
|
+
test "yield after_commit callback" do
|
30
|
+
@path = cloned_testpath('examples/lotr.git')
|
31
|
+
yielded = nil
|
32
|
+
begin
|
33
|
+
wiki = Gollum::Wiki.new(@path)
|
34
|
+
committer = Gollum::Committer.new(wiki)
|
35
|
+
committer.after_commit do |index, sha1|
|
36
|
+
yielded = sha1
|
37
|
+
assert_equal committer, index
|
38
|
+
end
|
39
|
+
|
40
|
+
res = wiki.write_page("Gollum", :markdown, "# Gollum",
|
41
|
+
:committer => committer)
|
42
|
+
|
43
|
+
assert_equal committer, res
|
44
|
+
|
45
|
+
sha1 = committer.commit
|
46
|
+
assert_equal sha1, yielded
|
47
|
+
ensure
|
48
|
+
FileUtils.rm_rf(@path)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
test "parents with default master ref" do
|
53
|
+
ref = '1db89ebba7e2c14d93b94ff98cfa3708a4f0d4e3'
|
54
|
+
committer = Gollum::Committer.new(@wiki)
|
55
|
+
assert_equal ref, committer.parents.first.sha
|
56
|
+
end
|
57
|
+
|
58
|
+
test "parents with custom ref" do
|
59
|
+
ref = '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'
|
60
|
+
@wiki = Gollum::Wiki.new(testpath("examples/lotr.git"), :ref => ref)
|
61
|
+
committer = Gollum::Committer.new(@wiki)
|
62
|
+
assert_equal ref, committer.parents.first.sha
|
63
|
+
end
|
64
|
+
end
|