gollum 5.0.1 → 5.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -2
  3. data/Gemfile +1 -1
  4. data/HISTORY.md +21 -0
  5. data/README.md +1 -0
  6. data/Rakefile +2 -5
  7. data/bin/gollum +1 -1
  8. data/contrib/automation/gollum-post +66 -0
  9. data/gollum.gemspec +21 -17
  10. data/lib/gollum.rb +17 -1
  11. data/lib/gollum/app.rb +63 -31
  12. data/lib/gollum/assets.rb +3 -3
  13. data/lib/gollum/helpers.rb +1 -1
  14. data/lib/gollum/public/assets/.sprockets-manifest-15b663a27211dc9de9a452b4b74462d7.json +1 -0
  15. data/lib/gollum/public/assets/app-7a0bbff2e8bad3033e7c17e0e0f886f336a9d23d3b912dcd2ae389c48b4b63e6.css +21 -0
  16. data/lib/gollum/public/assets/app-7a0bbff2e8bad3033e7c17e0e0f886f336a9d23d3b912dcd2ae389c48b4b63e6.css.gz +0 -0
  17. data/lib/gollum/public/assets/app-7a4bd115f4bc7ece39bc8073ca0ffad7c5e55cc5837b1464a12dead4905cefb2.js +5 -0
  18. data/lib/gollum/public/assets/app-7a4bd115f4bc7ece39bc8073ca0ffad7c5e55cc5837b1464a12dead4905cefb2.js.gz +0 -0
  19. data/lib/gollum/public/assets/criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css.gz +0 -0
  20. data/lib/gollum/public/assets/editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js +24 -0
  21. data/lib/gollum/public/assets/editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js.gz +0 -0
  22. data/lib/gollum/public/assets/print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css.gz +0 -0
  23. data/lib/gollum/public/gollum/javascript/app.js +1 -0
  24. data/lib/gollum/public/gollum/javascript/editor/gollum.editor.js +59 -0
  25. data/lib/gollum/public/gollum/javascript/editor/modes.js.erb +1 -1
  26. data/lib/gollum/public/gollum/javascript/gollum.js.erb +16 -15
  27. data/lib/gollum/public/gollum/javascript/polyfills.js +6 -0
  28. data/lib/gollum/public/gollum/stylesheets/primer.css +23 -0
  29. data/lib/gollum/public/gollum/stylesheets/template.scss.erb +132 -57
  30. data/lib/gollum/templates/commit.mustache +26 -0
  31. data/lib/gollum/templates/editor.mustache +7 -2
  32. data/lib/gollum/templates/history.mustache +5 -2
  33. data/lib/gollum/templates/latest_changes.mustache +8 -6
  34. data/lib/gollum/templates/layout.mustache +4 -5
  35. data/lib/gollum/templates/mobilenav.mustache +72 -0
  36. data/lib/gollum/templates/navbar.mustache +104 -42
  37. data/lib/gollum/templates/overview.mustache +2 -2
  38. data/lib/gollum/templates/search.mustache +2 -3
  39. data/lib/gollum/templates/wiki_content.mustache +18 -17
  40. data/lib/gollum/views/commit.rb +45 -0
  41. data/lib/gollum/views/compare.rb +19 -8
  42. data/lib/gollum/views/has_page.rb +0 -4
  43. data/lib/gollum/views/helpers.rb +13 -3
  44. data/lib/gollum/views/history.rb +4 -1
  45. data/lib/gollum/views/latest_changes.rb +1 -0
  46. data/lib/gollum/views/layout.rb +17 -1
  47. data/lib/gollum/views/overview.rb +6 -5
  48. data/lib/gollum/views/page.rb +15 -8
  49. data/lib/gollum/views/search.rb +2 -1
  50. metadata +33 -35
  51. data/lib/gollum/public/assets/.sprockets-manifest-3edc7e21737459b21fbf150f5dccd15c.json +0 -1
  52. data/lib/gollum/public/assets/app-982c7fca1832732a24e92474ca2729aeb56f2d0c05bb7a8ff913e9f58a6500d5.js +0 -5
  53. data/lib/gollum/public/assets/app-982c7fca1832732a24e92474ca2729aeb56f2d0c05bb7a8ff913e9f58a6500d5.js.gz +0 -0
  54. data/lib/gollum/public/assets/app-b205e593a30f1cc0054e2e9ed9fc8af3658d8ef4a62b9708c20f204560deefb7.css +0 -21
  55. data/lib/gollum/public/assets/app-b205e593a30f1cc0054e2e9ed9fc8af3658d8ef4a62b9708c20f204560deefb7.css.gz +0 -0
  56. data/lib/gollum/public/assets/editor-0dbae28c53db5a73d666d30504946671eb09948ffdaf1fdd9d1c8d856d4c0ba1.js +0 -24
  57. data/lib/gollum/public/assets/editor-0dbae28c53db5a73d666d30504946671eb09948ffdaf1fdd9d1c8d856d4c0ba1.js.gz +0 -0
  58. data/lib/gollum/public/gollum/stylesheets/_layout.scss +0 -83
  59. data/lib/gollum/public/gollum/stylesheets/primer.scss +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8d4d24ffaa889dd2ccaea1b04803e084020f923f3efb3e1512609676f9fc8647
4
- data.tar.gz: ade42ad7156ebde9985813a051b2f327bc5c597604dc3d1fa20141fc307a197a
3
+ metadata.gz: 210167f0c5540675d37210272db4fe0da3bc6d75647c26a46c7d16a07fd9e1e7
4
+ data.tar.gz: 63298c72adf095678e6cea9b085c3f891ba025b2342d7132cce578974149c5b6
5
5
  SHA512:
6
- metadata.gz: 33521b0483e80acdb63acbceb27dda772684dda4e5bf619e4a1cbf6fa0eb9b60c49c70ff15d0def8f34dce5d8690625e173f35137e3ff51a58e3c18926398ecb
7
- data.tar.gz: 6f9c3b0b3a97ce1789c2f91184d6aebebab966b883be753b30562f41bca42782f1d2c2abb5b1dfd0bf55977521d2f49e77969f1211073b658860222ed772786b
6
+ metadata.gz: 98e609a98e3e38b87f7c929c61d5d07a2c09057050137aeec5bfb5f1d98c589ee965651fdf379688b1fc20845458300a8f0e4ad4314fa8cb999ef998f111654c
7
+ data.tar.gz: 6766945d35d5218eb1dd8efc78755e4331e894b5ae0a85d2e7fdaa825d88aef774c3485accccdd7a94f8bdbe478f80aca0e043143022471934c0f48564f838e3
data/CONTRIBUTING.md CHANGED
@@ -21,7 +21,7 @@ Before submitting an issue, **please carefully look through the following places
21
21
 
22
22
  Security vulnerabilities can be reported directly to the maintainers using these GPG keys:
23
23
 
24
- * [@dometto](https://pgp.mit.edu/pks/lookup?op=vindex&search=0xD637E455CD3E27BF)
24
+ * [@dometto](https://keys.openpgp.org/vks/v1/by-fingerprint/02354CC9F820B52CC2791979BB8CCC95FD83B795)
25
25
 
26
26
  Lastly, please **consider helping out** by opening a Pull Request!
27
27
 
@@ -70,7 +70,7 @@ An example of how to add a test file to the bare repository lotr.git.
70
70
  ```
71
71
  mkdir tmp
72
72
  cd tmp
73
- git clone ../lotr.git/
73
+ git clone ../test/examples/lotr.git/
74
74
  git log
75
75
  echo "test" > test.md
76
76
  git add .
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ end
6
6
 
7
7
  gemspec
8
8
 
9
- gem "rake", '~> 12.3', '>= 12.3.3'
9
+ gem "rake", '~> 13.0'
10
10
 
data/HISTORY.md CHANGED
@@ -1,3 +1,24 @@
1
+ # 5.2.1 2021-02-25
2
+
3
+ * Fix include call to a missing asset (@benjaminwil). This caused slow first page loads on JRuby.
4
+
5
+ # 5.2 2021-02-24
6
+
7
+ * Improved styling and Primer upgrade (@benjaminwil)
8
+ * Add redirect to rename commit (@ViChyavIn)
9
+ * Updated dependencies
10
+ * Bugfixes
11
+
12
+ # 5.1.2
13
+
14
+ * Guard against malicious filenames in breadcrumbs
15
+
16
+ # 5.1
17
+
18
+ * Bugfixes
19
+ * Add autosave feature (#1576)
20
+ * Add Add quick access to diff of each commit in the history
21
+
1
22
  # 5.0 / 2020-03-17
2
23
 
3
24
  This is a major new release that introduces many new features, bugfixes, and removes major limitations. See [here](https://github.com/gollum/gollum/wiki/5.0-release-notes) for a list of changes.
data/README.md CHANGED
@@ -4,6 +4,7 @@ gollum -- A git-based Wiki
4
4
  [![Gem Version](https://badge.fury.io/rb/gollum.svg)](http://badge.fury.io/rb/gollum)
5
5
  [![Build Status](https://travis-ci.org/gollum/gollum.svg?branch=master)](https://travis-ci.org/gollum/gollum)
6
6
  [![Open Source Helpers](https://www.codetriage.com/gollum/gollum/badges/users.svg)](https://www.codetriage.com/gollum/gollum)
7
+ [![Cutting Edge Dependency Status](https://dometto-cuttingedge.herokuapp.com/github/gollum/gollum/svg 'Cutting Edge Dependency Status')](https://dometto-cuttingedge.herokuapp.com/github/gollum/gollum/info)
7
8
 
8
9
  **Gollum version 5.0 is out!** See [here](https://github.com/gollum/gollum/wiki/5.0-release-notes) for a list of changes and new features compared to Gollum version 4.x, and see some [Screenshots](https://github.com/gollum/gollum/wiki/Screenshots) of Gollum's features.
9
10
 
data/Rakefile CHANGED
@@ -181,11 +181,8 @@ end
181
181
 
182
182
  desc 'Precompile assets'
183
183
  task :precompile do
184
- require './lib/gollum/views/helpers.rb'
185
- require './lib/gollum/assets.rb'
186
- require 'sprockets'
187
- require 'sprockets-helpers'
188
- require 'sass'
184
+ require './lib/gollum/app.rb'
185
+ Precious::App.set(:environment, :production)
189
186
  env = Precious::Assets.sprockets
190
187
  path = ENV.fetch('GOLLUM_ASSETS_PATH', ::File.join(File.dirname(__FILE__), 'lib/gollum/public/assets'))
191
188
  manifest = Sprockets::Manifest.new(env, path)
data/bin/gollum CHANGED
@@ -152,7 +152,7 @@ MSG
152
152
  opts.on('--template-dir [PATH]', 'Specify custom mustache template directory.') do |path|
153
153
  wiki_options[:template_dir] = path
154
154
  end
155
- opts.on('--template-page', 'Use _Template in root as a template for new pages.') do
155
+ opts.on('--template-page', 'Use _Template.{ext} as a template for new pages.') do
156
156
  wiki_options[:template_page] = true
157
157
  end
158
158
  opts.on('--lenient-tag-lookup', 'Internal links resolve case-insensitively, will treat spaces as hyphens, and will match the first page found with a certain filename, anywhere in the repository. Provides compatibility with Gollum 4.x.') do
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Distributed under the terms of the MIT License.
4
+ #
5
+ # Author: Sam Baskinger <basking2@yahoo.com>
6
+ #
7
+ # Description: gollum-post is an example script that shows how
8
+ # to post a file to Gollum. This may be used
9
+ # to build scripts around CI/CD pipelines that
10
+ # publish their documentation to Gollum.
11
+ #
12
+
13
+ require 'uri'
14
+ require 'mechanize'
15
+ require 'digest'
16
+
17
+ GOLLUM=URI('https://mygollum.server')
18
+
19
+ m = Mechanize.new()
20
+
21
+ page="TestPage"
22
+ path="/automated/docs"
23
+ format="asciidoc"
24
+ content="""
25
+ = This is #{page}
26
+
27
+ This page is automatically generated.
28
+ """
29
+ message='Posting current documentation.'
30
+
31
+ # Check if the page exists.
32
+ p = m.get("#{GOLLUM}#{path}/#{page}")
33
+
34
+ # If we were redirected to the creat page...
35
+ if p.uri.to_s =~ /\/gollum\/create/
36
+
37
+ # ... then create the page.
38
+ p = m.post("#{GOLLUM}/gollum/create",
39
+ 'keybinding' => 'default',
40
+ 'page' => page,
41
+ 'path' => path,
42
+ 'format' => 'asciidoc',
43
+ 'message' => 'Publish bot.',
44
+ 'content' => content)
45
+ else
46
+ # ... else, get the previous content and update it.
47
+ p = m.get("#{GOLLUM}/gollum/edit#{path}/#{page}")
48
+
49
+ # Get the previous content. You _could_ check if this is unchanged at this
50
+ # step and post nothing.
51
+ previous_content = p.xpath('//textarea[@id="gollum-editor-body"]')[0].text
52
+
53
+ # The previous ETag is the Git SHA-1. We need this to replace the previous contents.
54
+ prev_etag = Digest::SHA1.hexdigest("blob #{previous_content.length}\0#{previous_content}")
55
+
56
+ # Post the updated document using the ETag of the previous document to avoid collisions.
57
+ p = m.post("#{GOLLUM}/gollum/edit#{path}/#{page}",
58
+ 'keybinding' => 'default',
59
+ 'page' => page,
60
+ 'path' => path,
61
+ 'format' => 'asciidoc',
62
+ 'message' => message,
63
+ 'etag' => prev_etag,
64
+ 'content' => content)
65
+ end
66
+
data/gollum.gemspec CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
5
5
  s.required_ruby_version = '>= 1.9'
6
6
 
7
7
  s.name = 'gollum'
8
- s.version = '5.0.1'
9
- s.date = '2020-04-04'
8
+ s.version = '5.2.1'
9
+ s.date = '2021-02-25'
10
10
  s.license = 'MIT'
11
11
 
12
12
  s.summary = 'A simple, Git-powered wiki.'
@@ -23,18 +23,18 @@ Gem::Specification.new do |s|
23
23
  s.rdoc_options = ['--charset=UTF-8']
24
24
  s.extra_rdoc_files = %w[README.md LICENSE]
25
25
 
26
- s.add_dependency 'gollum-lib', '~> 5.0'
27
- s.add_dependency 'kramdown', '~> 2.1.0'
28
- s.add_dependency 'kramdown-parser-gfm', '~> 1.0.0'
26
+ s.add_dependency 'gollum-lib', '~> 5.1'
27
+ s.add_dependency 'kramdown', '~> 2.3'
28
+ s.add_dependency 'kramdown-parser-gfm', '~> 1.1.0'
29
29
  s.add_dependency 'sinatra', '~> 2.0'
30
30
  s.add_dependency 'sinatra-contrib', '~> 2.0'
31
- s.add_dependency 'mustache', ['>= 0.99.5', '< 1.0.0']
31
+ s.add_dependency 'mustache-sinatra', '~> 1.0'
32
32
  s.add_dependency 'useragent', '~> 0.16.2'
33
33
  s.add_dependency 'gemojione', '~> 4.1'
34
- s.add_dependency 'octicons', '~> 8.5'
34
+ s.add_dependency 'octicons', '~> 12.0'
35
35
  s.add_dependency 'sprockets', '~> 3.7'
36
36
  s.add_dependency 'sass', '~> 3.5'
37
- s.add_dependency 'uglifier', '~> 3.2'
37
+ s.add_dependency 'uglifier', '~> 4.2'
38
38
  s.add_dependency 'sprockets-helpers', '~> 1.2'
39
39
  s.add_dependency 'rss', '~> 0.2.9'
40
40
  s.add_dependency 'therubyrhino', '~> 2.1.0'
@@ -59,6 +59,7 @@ Gem::Specification.new do |s|
59
59
  bin/gollum-migrate-tags
60
60
  config.rb
61
61
  config.ru
62
+ contrib/automation/gollum-post
62
63
  contrib/openrc/conf.d/gollum
63
64
  contrib/openrc/init.d/gollum
64
65
  contrib/systemd/gollum@.service
@@ -68,15 +69,15 @@ Gem::Specification.new do |s|
68
69
  lib/gollum/app.rb
69
70
  lib/gollum/assets.rb
70
71
  lib/gollum/helpers.rb
71
- lib/gollum/public/assets/.sprockets-manifest-3edc7e21737459b21fbf150f5dccd15c.json
72
- lib/gollum/public/assets/app-982c7fca1832732a24e92474ca2729aeb56f2d0c05bb7a8ff913e9f58a6500d5.js
73
- lib/gollum/public/assets/app-982c7fca1832732a24e92474ca2729aeb56f2d0c05bb7a8ff913e9f58a6500d5.js.gz
74
- lib/gollum/public/assets/app-b205e593a30f1cc0054e2e9ed9fc8af3658d8ef4a62b9708c20f204560deefb7.css
75
- lib/gollum/public/assets/app-b205e593a30f1cc0054e2e9ed9fc8af3658d8ef4a62b9708c20f204560deefb7.css.gz
72
+ lib/gollum/public/assets/.sprockets-manifest-15b663a27211dc9de9a452b4b74462d7.json
73
+ lib/gollum/public/assets/app-7a0bbff2e8bad3033e7c17e0e0f886f336a9d23d3b912dcd2ae389c48b4b63e6.css
74
+ lib/gollum/public/assets/app-7a0bbff2e8bad3033e7c17e0e0f886f336a9d23d3b912dcd2ae389c48b4b63e6.css.gz
75
+ lib/gollum/public/assets/app-7a4bd115f4bc7ece39bc8073ca0ffad7c5e55cc5837b1464a12dead4905cefb2.js
76
+ lib/gollum/public/assets/app-7a4bd115f4bc7ece39bc8073ca0ffad7c5e55cc5837b1464a12dead4905cefb2.js.gz
76
77
  lib/gollum/public/assets/criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css
77
78
  lib/gollum/public/assets/criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css.gz
78
- lib/gollum/public/assets/editor-0dbae28c53db5a73d666d30504946671eb09948ffdaf1fdd9d1c8d856d4c0ba1.js
79
- lib/gollum/public/assets/editor-0dbae28c53db5a73d666d30504946671eb09948ffdaf1fdd9d1c8d856d4c0ba1.js.gz
79
+ lib/gollum/public/assets/editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js
80
+ lib/gollum/public/assets/editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js.gz
80
81
  lib/gollum/public/assets/print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css
81
82
  lib/gollum/public/assets/print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css.gz
82
83
  lib/gollum/public/gollum/javascript/HOWTO_UPDATE_ACE.md
@@ -1174,22 +1175,23 @@ Gem::Specification.new do |s|
1174
1175
  lib/gollum/public/gollum/javascript/jquery-1.7.2.min.js
1175
1176
  lib/gollum/public/gollum/javascript/jquery.resize.js
1176
1177
  lib/gollum/public/gollum/javascript/mousetrap.min.js
1178
+ lib/gollum/public/gollum/javascript/polyfills.js
1177
1179
  lib/gollum/public/gollum/stylesheets/_base.scss
1178
1180
  lib/gollum/public/gollum/stylesheets/_breakpoint.scss
1179
1181
  lib/gollum/public/gollum/stylesheets/_component.scss
1180
1182
  lib/gollum/public/gollum/stylesheets/_features.scss
1181
- lib/gollum/public/gollum/stylesheets/_layout.scss
1182
1183
  lib/gollum/public/gollum/stylesheets/_spinners.scss
1183
1184
  lib/gollum/public/gollum/stylesheets/app.scss
1184
1185
  lib/gollum/public/gollum/stylesheets/criticmarkup.scss
1185
1186
  lib/gollum/public/gollum/stylesheets/dialog.scss
1186
1187
  lib/gollum/public/gollum/stylesheets/editor.scss
1187
1188
  lib/gollum/public/gollum/stylesheets/emoji.scss
1188
- lib/gollum/public/gollum/stylesheets/primer.scss
1189
+ lib/gollum/public/gollum/stylesheets/primer.css
1189
1190
  lib/gollum/public/gollum/stylesheets/print.scss
1190
1191
  lib/gollum/public/gollum/stylesheets/spinner.scss
1191
1192
  lib/gollum/public/gollum/stylesheets/tables.scss
1192
1193
  lib/gollum/public/gollum/stylesheets/template.scss.erb
1194
+ lib/gollum/templates/commit.mustache
1193
1195
  lib/gollum/templates/compare.mustache
1194
1196
  lib/gollum/templates/create.mustache
1195
1197
  lib/gollum/templates/edit.mustache
@@ -1201,6 +1203,7 @@ Gem::Specification.new do |s|
1201
1203
  lib/gollum/templates/history_authors/none.mustache
1202
1204
  lib/gollum/templates/latest_changes.mustache
1203
1205
  lib/gollum/templates/layout.mustache
1206
+ lib/gollum/templates/mobilenav.mustache
1204
1207
  lib/gollum/templates/navbar.mustache
1205
1208
  lib/gollum/templates/overview.mustache
1206
1209
  lib/gollum/templates/page.mustache
@@ -1209,6 +1212,7 @@ Gem::Specification.new do |s|
1209
1212
  lib/gollum/templates/searchbar.mustache
1210
1213
  lib/gollum/templates/wiki_content.mustache
1211
1214
  lib/gollum/uri_encode_component.rb
1215
+ lib/gollum/views/commit.rb
1212
1216
  lib/gollum/views/compare.rb
1213
1217
  lib/gollum/views/create.rb
1214
1218
  lib/gollum/views/edit.rb
data/lib/gollum.rb CHANGED
@@ -12,7 +12,7 @@ require 'rhino' if RUBY_PLATFORM == 'java'
12
12
  require File.expand_path('../gollum/uri_encode_component', __FILE__)
13
13
 
14
14
  module Gollum
15
- VERSION = '5.0.1'
15
+ VERSION = '5.2.1'
16
16
 
17
17
  def self.assets_path
18
18
  ::File.expand_path('gollum/public', ::File.dirname(__FILE__))
@@ -33,4 +33,20 @@ module Gollum
33
33
  super(message || "Cannot write #{@dir}/#{@attempted_path}, found #{@dir}/#{@existing_path}.")
34
34
  end
35
35
  end
36
+
37
+ class TemplateFilter
38
+ @@filters = {}
39
+
40
+ def self.add_filter(pattern, &replacement)
41
+ @@filters[pattern] = replacement
42
+ end
43
+
44
+ def self.apply_filters(data)
45
+ @@filters.each do |pattern, replacement|
46
+ data.gsub!(pattern, replacement.call)
47
+ end
48
+ data
49
+ end
50
+ end
51
+
36
52
  end
data/lib/gollum/app.rb CHANGED
@@ -230,14 +230,15 @@ module Precious
230
230
  halt 500 unless tempfile.is_a? Tempfile
231
231
 
232
232
  if wiki.per_page_uploads
233
- # remove base_url and gollum/* subpath if necessary
234
- dir = request.referer.
235
- sub(request.base_url, '').
236
- sub(/.*gollum\/[-\w]+\//, '')
233
+ dir = request.referer.sub(request.base_url, '')
237
234
  # remove base path if it is set
238
- dir = dir.sub(wiki.base_path, '') if wiki.base_path
235
+ dir.sub!(/^#{wiki.base_path}/, '') if wiki.base_path
236
+ # remove base_url and gollum/* subpath if necessary
237
+ dir.sub!(/^\/gollum\/[-\w]+\//, '')
239
238
  # remove file extension
240
- dir = dir.sub(::File.extname(dir), '')
239
+ dir.sub!(/#{::File.extname(dir)}$/, '')
240
+ # revert escaped whitespaces
241
+ dir.gsub!(/%20/, ' ')
241
242
  dir = ::File.join('uploads', dir)
242
243
  else
243
244
  # store all uploads together
@@ -302,12 +303,13 @@ module Precious
302
303
  redirect to("/#{page.escaped_url_path}")
303
304
  return
304
305
  end
305
- committer.commit
306
-
306
+
307
307
  # Renaming preserves format, so add the page's format to the renamed path to retrieve the renamed page
308
308
  new_path = "#{rename}.#{Gollum::Page.format_to_ext(page.format)}"
309
309
  # Add a redirect from the old page to the new
310
- wiki.add_redirect(page.url_path, clean_url(new_path)) if @redirects_enabled
310
+ wiki.add_redirect(page.url_path, clean_url(new_path), commit) if @redirects_enabled
311
+
312
+ committer.commit
311
313
 
312
314
  page = wiki_page(new_path).page
313
315
  return if page.nil?
@@ -317,9 +319,8 @@ module Precious
317
319
  post '/edit/*' do
318
320
  etag = params[:etag]
319
321
  path = "/#{clean_url(sanitize_empty_params(params[:path]))}"
320
- page_name = CGI.unescape(params[:page])
321
322
  wiki = wiki_new
322
- page = wiki.page(::File.join(path, page_name))
323
+ page = wiki.page(::File.join(path, params[:page]))
323
324
 
324
325
  return if page.nil?
325
326
  if etag != page.sha
@@ -351,14 +352,11 @@ module Precious
351
352
 
352
353
  get '/create/*' do
353
354
  forbid unless @allow_editing
354
- if settings.wiki_options[:template_page] then
355
- temppage = wiki_page('/_Template')
356
- @template_page = (temppage.page != nil) ? temppage.page.raw_data : 'Template page option is set, but no /_Template page is present or committed.'
357
- end
358
355
  wikip = wiki_page(params[:splat].first)
359
356
  @name = wikip.name
360
357
  @ext = wikip.ext
361
358
  @path = wikip.path
359
+ @template_page = load_template(@path) if settings.wiki_options[:template_page]
362
360
  @allow_uploads = wikip.wiki.allow_uploads
363
361
  @upload_dest = find_upload_dest(wikip.fullpath)
364
362
 
@@ -416,7 +414,7 @@ module Precious
416
414
 
417
415
  post '/preview' do
418
416
  wiki = wiki_new
419
- @name = params[:page] ? strip_page_name(CGI.unescape(params[:page])) : 'Preview'
417
+ @name = params[:page] ? strip_page_name(params[:page]) : 'Preview'
420
418
  @page = wiki.preview_page(@name, params[:content], params[:format])
421
419
  ['sidebar', 'header', 'footer'].each do |subpage|
422
420
  @page.send("set_#{subpage}".to_sym, params[subpage]) if params[subpage]
@@ -459,20 +457,6 @@ module Precious
459
457
  mustache :latest_changes
460
458
  end
461
459
 
462
- post '/compare/*' do
463
- @file = clean_url(encodeURIComponent(params[:splat].first))
464
- @versions = params[:versions] || []
465
- if @versions.size < 2
466
- redirect to("gollum/history/#{@file}")
467
- else
468
- redirect to("gollum/compare/%s/%s...%s" % [
469
- @file,
470
- @versions.last,
471
- @versions.first]
472
- )
473
- end
474
- end
475
-
476
460
  get %r{
477
461
  /compare/ # match any URL beginning with /compare/
478
462
  (.+) # extract the full path (including any directories)
@@ -496,8 +480,51 @@ module Precious
496
480
  end
497
481
  end
498
482
 
483
+ get '/compare/*' do
484
+ @file = clean_url(encodeURIComponent(params[:splat].first))
485
+ @versions = params[:versions] || []
486
+ if @versions.size == 1
487
+ wikip = wiki_page(params[:splat].first)
488
+ commit = wikip.wiki.repo.commit(@versions.first)
489
+ parent = commit.parent
490
+ if parent.nil?
491
+ redirect to("#{@file}/#{@commit.id}")
492
+ else
493
+ @versions.push(parent.id)
494
+ end
495
+ end
496
+ if @versions.empty?
497
+ redirect to("gollum/history/#{@file}")
498
+ else
499
+ redirect to("gollum/compare/%s/%s...%s" % [
500
+ @file,
501
+ @versions.last,
502
+ @versions.first]
503
+ )
504
+ end
505
+ end
506
+
507
+
508
+ get %r{
509
+ /commit/ # match any URL beginning with /show/
510
+ (\w+) # match the SHA1
511
+ }x do |version|
512
+ @version = version
513
+ wiki = wiki_new
514
+ begin
515
+ @commit = wiki.repo.commit(version)
516
+ parent = @commit.parent
517
+ parent_id = parent.nil? ? nil : parent.id
518
+ @diff = wiki.repo.diff(parent_id, version)
519
+ mustache :commit
520
+ rescue Gollum::Git::NoSuchShaFound
521
+ @message = "Invalid commit: #{@version}"
522
+ mustache :error
523
+ end
524
+ end
525
+
499
526
  get '/search' do
500
- @query = params[:q]
527
+ @query = params[:q] || ''
501
528
  @name = @query
502
529
  if @query.empty?
503
530
  @results = []
@@ -609,6 +636,11 @@ module Precious
609
636
  end
610
637
  end
611
638
 
639
+ def load_template(path)
640
+ template_page = wiki_page(::File.join(path, '_Template')).page || wiki_page('/_Template').page
641
+ template_page ? Gollum::TemplateFilter.apply_filters(template_page.raw_data) : nil
642
+ end
643
+
612
644
  def update_wiki_page(wiki, page, content, commit, name = nil, format = nil)
613
645
  return if !page ||
614
646
  ((!content || page.raw_data == content) && page.format == format)