read-only-gollum 1.4.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.
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