read-only-gollum 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (176) hide show
  1. data/Gemfile +4 -0
  2. data/HISTORY.md +102 -0
  3. data/Home.md +3 -0
  4. data/LICENSE +21 -0
  5. data/README.md +477 -0
  6. data/Rakefile +142 -0
  7. data/bin/read-only-gollum +126 -0
  8. data/docs/sanitization.md +32 -0
  9. data/lib/gollum.rb +41 -0
  10. data/lib/gollum/blob_entry.rb +78 -0
  11. data/lib/gollum/committer.rb +218 -0
  12. data/lib/gollum/file.rb +64 -0
  13. data/lib/gollum/frontend/app.rb +225 -0
  14. data/lib/gollum/frontend/public/css/dialog.css +141 -0
  15. data/lib/gollum/frontend/public/css/editor.css +537 -0
  16. data/lib/gollum/frontend/public/css/gollum.css +660 -0
  17. data/lib/gollum/frontend/public/css/ie7.css +69 -0
  18. data/lib/gollum/frontend/public/css/template.css +381 -0
  19. data/lib/gollum/frontend/public/images/icon-sprite.png +0 -0
  20. data/lib/gollum/frontend/public/javascript/editor/gollum.editor.js +1096 -0
  21. data/lib/gollum/frontend/public/javascript/editor/langs/asciidoc.js +167 -0
  22. data/lib/gollum/frontend/public/javascript/editor/langs/creole.js +104 -0
  23. data/lib/gollum/frontend/public/javascript/editor/langs/markdown.js +211 -0
  24. data/lib/gollum/frontend/public/javascript/editor/langs/org.js +173 -0
  25. data/lib/gollum/frontend/public/javascript/editor/langs/pod.js +111 -0
  26. data/lib/gollum/frontend/public/javascript/editor/langs/rdoc.js +74 -0
  27. data/lib/gollum/frontend/public/javascript/editor/langs/textile.js +175 -0
  28. data/lib/gollum/frontend/public/javascript/gollum.dialog.js +263 -0
  29. data/lib/gollum/frontend/public/javascript/gollum.js +161 -0
  30. data/lib/gollum/frontend/public/javascript/gollum.placeholder.js +54 -0
  31. data/lib/gollum/frontend/public/javascript/jquery.color.js +123 -0
  32. data/lib/gollum/frontend/public/javascript/jquery.js +7179 -0
  33. data/lib/gollum/frontend/templates/compare.mustache +38 -0
  34. data/lib/gollum/frontend/templates/create.mustache +17 -0
  35. data/lib/gollum/frontend/templates/edit.mustache +17 -0
  36. data/lib/gollum/frontend/templates/editor.mustache +116 -0
  37. data/lib/gollum/frontend/templates/error.mustache +8 -0
  38. data/lib/gollum/frontend/templates/history.mustache +58 -0
  39. data/lib/gollum/frontend/templates/layout.mustache +28 -0
  40. data/lib/gollum/frontend/templates/page.mustache +37 -0
  41. data/lib/gollum/frontend/templates/pages.mustache +35 -0
  42. data/lib/gollum/frontend/templates/search.mustache +36 -0
  43. data/lib/gollum/frontend/templates/searchbar.mustache +10 -0
  44. data/lib/gollum/frontend/views/compare.rb +94 -0
  45. data/lib/gollum/frontend/views/create.rb +48 -0
  46. data/lib/gollum/frontend/views/edit.rb +52 -0
  47. data/lib/gollum/frontend/views/editable.rb +13 -0
  48. data/lib/gollum/frontend/views/error.rb +7 -0
  49. data/lib/gollum/frontend/views/history.rb +44 -0
  50. data/lib/gollum/frontend/views/layout.rb +20 -0
  51. data/lib/gollum/frontend/views/page.rb +57 -0
  52. data/lib/gollum/frontend/views/pages.rb +19 -0
  53. data/lib/gollum/frontend/views/search.rb +20 -0
  54. data/lib/gollum/git_access.rb +248 -0
  55. data/lib/gollum/markup.rb +489 -0
  56. data/lib/gollum/page.rb +430 -0
  57. data/lib/gollum/pagination.rb +61 -0
  58. data/lib/gollum/sanitization.rb +174 -0
  59. data/lib/gollum/tex.rb +89 -0
  60. data/lib/gollum/web_sequence_diagram.rb +43 -0
  61. data/lib/gollum/wiki.rb +636 -0
  62. data/read-only-gollum.gemspec +224 -0
  63. data/templates/formatting.html +92 -0
  64. data/test/examples/empty.git/HEAD +1 -0
  65. data/test/examples/empty.git/config +5 -0
  66. data/test/examples/empty.git/description +1 -0
  67. data/test/examples/empty.git/hooks/applypatch-msg.sample +15 -0
  68. data/test/examples/empty.git/hooks/commit-msg.sample +24 -0
  69. data/test/examples/empty.git/hooks/post-commit.sample +8 -0
  70. data/test/examples/empty.git/hooks/post-receive.sample +15 -0
  71. data/test/examples/empty.git/hooks/post-update.sample +8 -0
  72. data/test/examples/empty.git/hooks/pre-applypatch.sample +14 -0
  73. data/test/examples/empty.git/hooks/pre-commit.sample +46 -0
  74. data/test/examples/empty.git/hooks/pre-rebase.sample +169 -0
  75. data/test/examples/empty.git/hooks/prepare-commit-msg.sample +36 -0
  76. data/test/examples/empty.git/hooks/update.sample +128 -0
  77. data/test/examples/empty.git/info/exclude +6 -0
  78. data/test/examples/empty.git/objects/info/.gitkeep +0 -0
  79. data/test/examples/empty.git/objects/pack/.gitkeep +0 -0
  80. data/test/examples/empty.git/refs/heads/.gitkeep +0 -0
  81. data/test/examples/lotr.git/COMMIT_EDITMSG +1 -0
  82. data/test/examples/lotr.git/HEAD +1 -0
  83. data/test/examples/lotr.git/ORIG_HEAD +1 -0
  84. data/test/examples/lotr.git/config +12 -0
  85. data/test/examples/lotr.git/description +1 -0
  86. data/test/examples/lotr.git/index +0 -0
  87. data/test/examples/lotr.git/info/exclude +6 -0
  88. data/test/examples/lotr.git/logs/HEAD +3 -0
  89. data/test/examples/lotr.git/logs/refs/heads/master +3 -0
  90. data/test/examples/lotr.git/objects/06/131480411710c92a82fe2d1e76932c70feb2e5 +0 -0
  91. data/test/examples/lotr.git/objects/0a/de1e2916346d4c1f2fb63b863fd3c16808fe44 +0 -0
  92. data/test/examples/lotr.git/objects/0e/d8cbe0a25235bd867e65193c7d837c66b328ef +3 -0
  93. data/test/examples/lotr.git/objects/12/629d666c5e3178f82f533f543d61b53dc78c0b +0 -0
  94. data/test/examples/lotr.git/objects/1d/b89ebba7e2c14d93b94ff98cfa3708a4f0d4e3 +2 -0
  95. data/test/examples/lotr.git/objects/24/49c2681badfd3c189e8ed658dacffe8ba48fe5 +0 -0
  96. data/test/examples/lotr.git/objects/25/4bdc1ba27d8b8a794538a8522d9a2b56ec2dd9 +0 -0
  97. data/test/examples/lotr.git/objects/2c/b9156ad383914561a8502fc70f5a1d887e48ad +4 -0
  98. data/test/examples/lotr.git/objects/5d/cac289a8603188d2c5caf481dcba2985126aaa +0 -0
  99. data/test/examples/lotr.git/objects/60/f12f4254f58801b9ee7db7bca5fa8aeefaa56b +0 -0
  100. data/test/examples/lotr.git/objects/71/4323c104239440a5c66ab12a67ed07a83c404f +0 -0
  101. data/test/examples/lotr.git/objects/84/0ec5b1ba1320e8ec443f28f99566f615d5af10 +0 -0
  102. data/test/examples/lotr.git/objects/93/6b83ee0dd8837adb82511e40d5e4ebe59bb675 +0 -0
  103. data/test/examples/lotr.git/objects/94/523d7ae48aeba575099dd12926420d8fd0425d +2 -0
  104. data/test/examples/lotr.git/objects/96/97dc65e095658bbd1b8e8678e08881e86d32f1 +0 -0
  105. data/test/examples/lotr.git/objects/a3/1ca2a7c352c92531a8b99815d15843b259e814 +0 -0
  106. data/test/examples/lotr.git/objects/a6/59b3763b822dd97544621fd0beef162ea37b14 +4 -0
  107. data/test/examples/lotr.git/objects/a8/ad3c09dd842a3517085bfadd37718856dee813 +0 -0
  108. data/test/examples/lotr.git/objects/aa/b61fe89d56f8614c0a8151da34f939dcedfa68 +0 -0
  109. data/test/examples/lotr.git/objects/bc/4b5fc0ce2c2ba3acef6647e4f67256ee45ab60 +0 -0
  110. data/test/examples/lotr.git/objects/c3/b43e9f08966b088e7a0192e436b7a884542e05 +0 -0
  111. data/test/examples/lotr.git/objects/dc/596d6b2dd89ab05c66f4abd7d5eb706bc17f19 +0 -0
  112. data/test/examples/lotr.git/objects/ec/da3205bee14520aab5a7bb307392064b938e83 +0 -0
  113. data/test/examples/lotr.git/objects/f4/84ebb1f40f8eb20d1bcd8d1d71934d2b8ae961 +0 -0
  114. data/test/examples/lotr.git/objects/fa/e7ef5344202bba4129abdc13060d9297d99465 +3 -0
  115. data/test/examples/lotr.git/objects/info/packs +2 -0
  116. data/test/examples/lotr.git/objects/pack/pack-dcbeaf3f6ff6c5eb08ea2b0a2d83626e8763546b.idx +0 -0
  117. data/test/examples/lotr.git/objects/pack/pack-dcbeaf3f6ff6c5eb08ea2b0a2d83626e8763546b.pack +0 -0
  118. data/test/examples/lotr.git/packed-refs +2 -0
  119. data/test/examples/lotr.git/refs/heads/master +1 -0
  120. data/test/examples/lotr.git/refs/remotes/origin/HEAD +1 -0
  121. data/test/examples/page_file_dir.git/COMMIT_EDITMSG +1 -0
  122. data/test/examples/page_file_dir.git/HEAD +1 -0
  123. data/test/examples/page_file_dir.git/config +6 -0
  124. data/test/examples/page_file_dir.git/description +1 -0
  125. data/test/examples/page_file_dir.git/index +0 -0
  126. data/test/examples/page_file_dir.git/info/exclude +6 -0
  127. data/test/examples/page_file_dir.git/logs/HEAD +1 -0
  128. data/test/examples/page_file_dir.git/logs/refs/heads/master +1 -0
  129. data/test/examples/page_file_dir.git/objects/0c/7d27db1f575263efdcab3dc650f4502a2dbcbf +0 -0
  130. data/test/examples/page_file_dir.git/objects/22/b404803c966dd92865614d86ff22ca12e50c1e +0 -0
  131. data/test/examples/page_file_dir.git/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 +0 -0
  132. data/test/examples/page_file_dir.git/objects/57/16ca5987cbf97d6bb54920bea6adde242d87e6 +0 -0
  133. data/test/examples/page_file_dir.git/objects/5b/43e14e0a15fb6f08feab1773d1c0991e9f71e2 +0 -0
  134. data/test/examples/page_file_dir.git/refs/heads/master +1 -0
  135. data/test/examples/revert.git/COMMIT_EDITMSG +1 -0
  136. data/test/examples/revert.git/HEAD +1 -0
  137. data/test/examples/revert.git/config +12 -0
  138. data/test/examples/revert.git/description +1 -0
  139. data/test/examples/revert.git/index +0 -0
  140. data/test/examples/revert.git/info/exclude +6 -0
  141. data/test/examples/revert.git/logs/HEAD +2 -0
  142. data/test/examples/revert.git/logs/refs/heads/master +2 -0
  143. data/test/examples/revert.git/objects/20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d +0 -0
  144. data/test/examples/revert.git/objects/41/76394bfa11222363c66ce7e84b5f154095b6d9 +0 -0
  145. data/test/examples/revert.git/objects/6a/69f92020f5df77af6e8813ff1232493383b708 +0 -0
  146. data/test/examples/revert.git/objects/b4/785957bc986dc39c629de9fac9df46972c00fc +0 -0
  147. data/test/examples/revert.git/objects/f4/03b791119f8232b7cb0ba455c624ac6435f433 +0 -0
  148. data/test/examples/revert.git/objects/info/packs +2 -0
  149. data/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.idx +0 -0
  150. data/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack +0 -0
  151. data/test/examples/revert.git/packed-refs +2 -0
  152. data/test/examples/revert.git/refs/heads/master +1 -0
  153. data/test/examples/revert.git/refs/remotes/origin/HEAD +1 -0
  154. data/test/examples/yubiwa.git/HEAD +1 -0
  155. data/test/examples/yubiwa.git/config +5 -0
  156. data/test/examples/yubiwa.git/description +1 -0
  157. data/test/examples/yubiwa.git/info/exclude +6 -0
  158. data/test/examples/yubiwa.git/objects/10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 +0 -0
  159. data/test/examples/yubiwa.git/objects/52/4b82874327ea7cbf730389964ba7cb3de966de +0 -0
  160. data/test/examples/yubiwa.git/objects/58/3fc201cb457fb3f1480f3e1e5999b119633835 +0 -0
  161. data/test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 +1 -0
  162. data/test/examples/yubiwa.git/objects/89/64ed1b4e21aa90e831763bbce9034bfda81b70 +0 -0
  163. data/test/examples/yubiwa.git/objects/9f/f6dd0660da5fba2d3374adb2b84fa653bb538b +0 -0
  164. data/test/examples/yubiwa.git/objects/ac/e97abf2b177815a1972d7db22f229f58c83309 +0 -0
  165. data/test/examples/yubiwa.git/objects/b1/f443863a4816628807fbf86141ebef055dda34 +0 -0
  166. data/test/examples/yubiwa.git/refs/heads/master +1 -0
  167. data/test/helper.rb +66 -0
  168. data/test/test_app.rb +169 -0
  169. data/test/test_committer.rb +64 -0
  170. data/test/test_file.rb +27 -0
  171. data/test/test_git_access.rb +52 -0
  172. data/test/test_markup.rb +628 -0
  173. data/test/test_page.rb +166 -0
  174. data/test/test_page_revert.rb +45 -0
  175. data/test/test_wiki.rb +462 -0
  176. metadata +470 -0
@@ -0,0 +1,3 @@
1
+ x���
2
+ �0=�+�r�^�&4 Rz�ȦY�YH���O30�zX{<Dk�"�<� n�apQ*��褝����
3
+ �R+�{�[ � ?~*A
@@ -0,0 +1,2 @@
1
+ P pack-dcbeaf3f6ff6c5eb08ea2b0a2d83626e8763546b.pack
2
+
@@ -0,0 +1,2 @@
1
+ # pack-refs with: peeled
2
+ 60f12f4254f58801b9ee7db7bca5fa8aeefaa56b refs/remotes/origin/master
@@ -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,6 @@
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = true
4
+ bare = false
5
+ logallrefupdates = true
6
+ ignorecase = true
@@ -0,0 +1 @@
1
+ Unnamed repository; edit this file 'description' to name the repository.
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -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
@@ -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.
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -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
@@ -0,0 +1,2 @@
1
+ P pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack
2
+
@@ -0,0 +1,2 @@
1
+ # pack-refs with: peeled
2
+ 7c45b5f16ff3bae2a0063191ef832701214d4df5 refs/remotes/origin/master
@@ -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,5 @@
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = true
4
+ bare = true
5
+ ignorecase = true
@@ -0,0 +1 @@
1
+ Unnamed repository; edit this file 'description' to name the repository.
@@ -0,0 +1,6 @@
1
+ # git-ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -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
@@ -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 = []
@@ -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