Compare commits

..

10 Commits

Author SHA1 Message Date
Dawa Ometto d8ebba114f Release 5.0.1 2020-04-04 13:44:00 +02:00
Dawa Ometto b9d7375dba Fix migration script when using page-file-dir (#1542) 2020-04-04 13:43:29 +02:00
Dawa Ometto 676811206d Add tests for base_path (#1540) 2020-04-03 17:12:09 +02:00
Watal M. Iwasaki ff1baf0036 Replace redirect_to() with 'redirect to()` (#1536) 2020-04-03 15:32:51 +02:00
Sam 3d12aeb8b2 Update layout.mustache (#1539)
Fix loading of MathJax when run with a base path.
2020-04-03 15:28:00 +02:00
Dawa Ometto 5a8750a975 Fix migrate script path argument. Fix gollum --version (#1538) 2020-04-02 14:08:17 +02:00
Watal M. Iwasaki 0cb303f09f Check page.nil? before page.wiki (#1535) 2020-04-02 11:07:33 +02:00
Dawa Ometto edc7d0b50b Merge pull request #1531 from repotag/check_empty_repo
Add regression test against #1530
2020-03-31 16:51:19 +02:00
Dawa Ometto 2c268a9f8c Add regression test against #1530 2020-03-31 11:56:42 +02:00
Dawa Ometto d61a09d421 Update README.md 2020-03-30 12:33:57 +02:00
9 changed files with 157 additions and 63 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ Gollum is a simple wiki system built on top of Git. A Gollum Wiki is simply a gi
* May be written in a variety of [markups](#markups). * May be written in a variety of [markups](#markups).
* Can be edited with your favourite system editor or IDE (changes will be visible after committing) or with the built-in web interface. * Can be edited with your favourite system editor or IDE (changes will be visible after committing) or with the built-in web interface.
* Can be displayed in all versions, reverted, etc. * Can be displayed in all versions, reverted, etc.
* Gollum strives to be compatible with GitHub wikis (see `--hyphened-tag-lookup`) * Gollum strives to be compatible with GitHub wikis (see `--lenient-tag-lookup`)
* Gollum supports advanced functionality like: * Gollum supports advanced functionality like:
* [UML diagrams](https://github.com/gollum/gollum/wiki#plantuml-diagrams) * [UML diagrams](https://github.com/gollum/gollum/wiki#plantuml-diagrams)
* [BibTeX and Citation support](https://github.com/gollum/gollum/wiki/BibTeX-and-Citations) * [BibTeX and Citation support](https://github.com/gollum/gollum/wiki/BibTeX-and-Citations)
+2 -23
View File
@@ -172,6 +172,7 @@ MSG
end end
opts.on('--version', 'Display the current version of Gollum.') do opts.on('--version', 'Display the current version of Gollum.') do
puts 'Gollum ' + Gollum::VERSION puts 'Gollum ' + Gollum::VERSION
exit 0
end end
opts.on('--versions', 'Display the current version of Gollum and auxiliary gems.') do opts.on('--versions', 'Display the current version of Gollum and auxiliary gems.') do
require 'gollum-lib' require 'gollum-lib'
@@ -286,29 +287,7 @@ else
else else
require 'rack' require 'rack'
class MapGollum
def initialize(base_path)
@mg = Rack::Builder.new do
map "/#{base_path}" do
run Precious::App
end
map '/' do
run Proc.new { [302, { 'Location' => "/#{base_path}" }, []] }
end
map '/*' do
run Proc.new { [302, { 'Location' => "/#{base_path}" }, []] }
end
end
end
def call(env)
@mg.call(env)
end
end
# Rack::Handler does not work with Ctrl + C. Use Rack::Server instead. # Rack::Handler does not work with Ctrl + C. Use Rack::Server instead.
Rack::Server.new(:app => MapGollum.new(base_path), :Port => options[:port], :Host => options[:bind]).start Rack::Server.new(:app => Precious::MapGollum.new(base_path), :Port => options[:port], :Host => options[:bind]).start
end end
end end
+4 -3
View File
@@ -4,8 +4,6 @@ require 'optparse'
require 'pathname' require 'pathname'
require 'rubygems' require 'rubygems'
REPO = ARGV[0] || Dir.pwd
wiki_options = {} wiki_options = {}
options = {} options = {}
@@ -83,12 +81,15 @@ begin
const = setting.to_s.upcase const = setting.to_s.upcase
Object.const_set(const, value) unless Object.const_defined?(const) Object.const_set(const, value) unless Object.const_defined?(const)
end end
wiki_options[:page_file_dir] = setting(:page_file_dir) ? setting(:page_file_dir) : wiki_options[:page_file_dir] # Allow settings :page_file_dir through PAGE_FILE_DIR constant.
rescue OptionParser::InvalidOption rescue OptionParser::InvalidOption
puts "gollum-migrate-tags: #{$!.message}" puts "gollum-migrate-tags: #{$!.message}"
puts "gollum-migrate-tags: try 'gollum-migrate-tags --help' for more information" puts "gollum-migrate-tags: try 'gollum-migrate-tags --help' for more information"
exit exit
end end
REPO = ARGV[0] || Dir.pwd
require 'gollum-lib' require 'gollum-lib'
if cfg = options[:config] if cfg = options[:config]
@@ -261,7 +262,7 @@ wiki.pages.each do |page|
log(:info,"Page #{page.path}") log(:info,"Page #{page.path}")
new_data = page.formatted_data new_data = page.formatted_data
if setting(:no_dry_run) if setting(:no_dry_run)
path = ::File.join([wiki.path, wiki.page_file_dir, page.path].compact) path = ::File.join(wiki.path, page.path)
f = File.new(path, 'w') f = File.new(path, 'w')
f.write(new_data) f.write(new_data)
f.close f.close
+2 -2
View File
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
s.required_ruby_version = '>= 1.9' s.required_ruby_version = '>= 1.9'
s.name = 'gollum' s.name = 'gollum'
s.version = '5.0.0' s.version = '5.0.1'
s.date = '2020-03-30' s.date = '2020-04-04'
s.license = 'MIT' s.license = 'MIT'
s.summary = 'A simple, Git-powered wiki.' s.summary = 'A simple, Git-powered wiki.'
+1 -1
View File
@@ -12,7 +12,7 @@ require 'rhino' if RUBY_PLATFORM == 'java'
require File.expand_path('../gollum/uri_encode_component', __FILE__) require File.expand_path('../gollum/uri_encode_component', __FILE__)
module Gollum module Gollum
VERSION = '5.0.0' VERSION = '5.0.1'
def self.assets_path def self.assets_path
::File.expand_path('gollum/public', ::File.dirname(__FILE__)) ::File.expand_path('gollum/public', ::File.dirname(__FILE__))
+30 -5
View File
@@ -40,6 +40,30 @@ Gollum::set_git_max_filesize(190 * 10**6)
# See the wiki.rb file for more details on wiki options # See the wiki.rb file for more details on wiki options
module Precious module Precious
# For use with the --base-path option.
class MapGollum
def initialize(base_path)
@mg = Rack::Builder.new do
map "/#{base_path}" do
run Precious::App
end
map '/' do
run Proc.new { [302, { 'Location' => "/#{base_path}" }, []] }
end
map '/*' do
run Proc.new { [302, { 'Location' => "/#{base_path}" }, []] }
end
end
end
def call(env)
@mg.call(env)
end
end
class App < Sinatra::Base class App < Sinatra::Base
register Mustache::Sinatra register Mustache::Sinatra
register Sinatra::Namespace register Sinatra::Namespace
@@ -188,7 +212,8 @@ module Precious
@etag = page.sha @etag = page.sha
mustache :edit mustache :edit
else else
redirect_to("/create/#{encodeURIComponent(@name)}") path = ::File.join('gollum/create', @path, @name)
redirect to(clean_url(encodeURIComponent(path)))
end end
end end
@@ -413,8 +438,8 @@ module Precious
@page = wikip.page @page = wikip.page
@page_num = [params[:page_num].to_i, 1].max @page_num = [params[:page_num].to_i, 1].max
@max_count = settings.wiki_options.fetch(:pagination_count, 10) @max_count = settings.wiki_options.fetch(:pagination_count, 10)
@wiki = @page.wiki
unless @page.nil? unless @page.nil?
@wiki = @page.wiki
@versions = @page.versions( @versions = @page.versions(
per_page: @max_count, per_page: @max_count,
page_num: @page_num, page_num: @page_num,
@@ -435,12 +460,12 @@ module Precious
end end
post '/compare/*' do post '/compare/*' do
@file = encodeURIComponent(params[:splat].first) @file = clean_url(encodeURIComponent(params[:splat].first))
@versions = params[:versions] || [] @versions = params[:versions] || []
if @versions.size < 2 if @versions.size < 2
redirect_to("/history/#{@file}") redirect to("gollum/history/#{@file}")
else else
redirect_to("/compare/%s/%s...%s" % [ redirect to("gollum/compare/%s/%s...%s" % [
@file, @file,
@versions.last, @versions.last,
@versions.first] @versions.first]
+1 -1
View File
@@ -51,7 +51,7 @@
{{#mathjax_config}} {{#mathjax_config}}
<script type="text/javascript" src="{{base_url}}/{{mathjax_config}}"></script> <script type="text/javascript" src="{{base_url}}/{{mathjax_config}}"></script>
{{/mathjax_config}} {{/mathjax_config}}
<script defer src="{{base_path}}/gollum/assets/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <script defer src="{{base_url}}/gollum/assets/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
{{/mathjax}} {{/mathjax}}
{{#js}}<script type="text/javascript" src="{{custom_path}}/custom.js"></script>{{/js}} {{#js}}<script type="text/javascript" src="{{custom_path}}/custom.js"></script>{{/js}}
+83 -9
View File
@@ -479,15 +479,6 @@ EOF
assert last_response.body.include?('Samewise Gamgee</h1>') assert last_response.body.include?('Samewise Gamgee</h1>')
end end
test "previews content on the first page of an empty wiki" do
@path = cloned_testpath("examples/empty.git")
@wiki = Gollum::Wiki.new(@path)
Precious::App.set(:gollum_path, @path)
Precious::App.set(:wiki_options, {})
post "/gollum/preview", :content => 'abc', :format => 'markdown'
assert last_response.ok?
end
test 'throws an error when comparing two identical revisions for a page' do test 'throws an error when comparing two identical revisions for a page' do
get '/gollum/compare/A.md/fc66539528eb96f21b2bbdbf557788fe8a1196ac...fc66539528eb96f21b2bbdbf557788fe8a1196ac' get '/gollum/compare/A.md/fc66539528eb96f21b2bbdbf557788fe8a1196ac...fc66539528eb96f21b2bbdbf557788fe8a1196ac'
assert last_response.ok? assert last_response.ok?
@@ -656,6 +647,14 @@ EOF
assert_match /meta name="robots" content="noindex, nofollow"/, last_response.body assert_match /meta name="robots" content="noindex, nofollow"/, last_response.body
end end
test 'history/NO-EXIST redirects to Home' do
get '/gollum/history/NO-EXIST'
follow_redirect!
assert_equal last_request.fullpath, '/'
# redirect again from / to /Home
assert_equal last_response.status, 302
end
def app def app
Precious::App Precious::App
end end
@@ -898,3 +897,78 @@ context "Frontend with page-file-dir" do
Precious::App Precious::App
end end
end end
context "Frontend with empty repo" do
include Rack::Test::Methods
setup do
@path = cloned_testpath("examples/empty.git")
@wiki = Gollum::Wiki.new(@path)
Precious::App.set(:gollum_path, @path)
Precious::App.set(:wiki_options, {allow_editing: true})
end
teardown do
FileUtils.rm_rf(@path)
end
def app
Precious::App
end
test 'previews content on the first page of an empty wiki' do
post '/gollum/preview', :content => 'abc', :format => 'markdown'
assert last_response.ok?
end
test 'wiki redirects to create page with newly initialized repo' do
get '/Home'
follow_redirect!
assert_equal '/gollum/create/Home', last_request.fullpath
assert last_response.ok?
end
end
context 'Frontend with base path' do
include Rack::Test::Methods
setup do
@path = cloned_testpath("examples/lotr.git")
@wiki = Gollum::Wiki.new(@path)
@base_path = 'wiki'
Precious::App.set(:gollum_path, @path)
Precious::App.set(:wiki_options, {base_path: @base_path, mathjax: true})
end
teardown do
FileUtils.rm_rf(@path)
end
test 'page with base path' do
get '/wiki/Home'
assert last_response.ok?
end
test 'base path mathjax assets' do
get '/wiki/Home'
assert last_response.ok?
assert last_response.body.include?('<script defer src="/wiki/gollum/assets/mathjax/MathJax.js')
end
test 'compare view' do
post '/wiki/gollum/compare/Bilbo-Baggins.md', :versions => ['f25eccd98e9b667f9e22946f3e2f945378b8a72d', '5bc1aaec6149e854078f1d0f8b71933bbc6c2e43']
follow_redirect!
assert last_response.ok?
assert_equal '/wiki/gollum/compare/Bilbo-Baggins.md/5bc1aaec6149e854078f1d0f8b71933bbc6c2e43...f25eccd98e9b667f9e22946f3e2f945378b8a72d', last_request.fullpath
post '/wiki/gollum/compare/Bilbo-Baggins.md', :versions => ['f25eccd98e9b667f9e22946f3e2f945378b8a72d']
follow_redirect!
assert last_response.ok?
assert_equal '/wiki/gollum/history/Bilbo-Baggins.md', last_request.fullpath
end
def app
Precious::MapGollum.new(@base_path)
end
end
+31 -16
View File
@@ -23,7 +23,26 @@ waa
[[Subsub/Zaa.md]] [[Subsub/Zaa.md]]
EOF EOF
script_path = File.expand_path(File.join(File.dirname(__FILE__), '../', 'bin', 'gollum-migrate-tags')) def load_script(**args)
settings = {
:run_silent => true,
:no_dry_run => true,
:prefer_relative => true,
:hyphenate => false,
:page_file_dir => nil,
}.merge(args)
settings.each do |const, val|
const_name = const.to_s.upcase
Object.const_set(const_name, val) unless Object.const_defined?(const_name) && Object.const_get(const_name) == val
end
script_path = File.expand_path(File.join(File.dirname(__FILE__), '../', 'bin', 'gollum-migrate-tags'))
Dir.chdir(@path) do
load script_path
end
end
unless ENV['TRAVIS'] unless ENV['TRAVIS']
@@ -35,27 +54,14 @@ unless ENV['TRAVIS']
end end
test 'repair broken links' do test 'repair broken links' do
PREFER_RELATIVE = true load_script
RUN_SILENT = true
NO_DRY_RUN = true
HYPHENATE = false
Dir.chdir(@path) do
load script_path
end
f = ::File.new(::File.join(@path, 'Subdir/Foo.md'), 'r') f = ::File.new(::File.join(@path, 'Subdir/Foo.md'), 'r')
assert_equal result, f.read assert_equal result, f.read
end end
test 'change spaced filenames to hyphenated filenames' do test 'change spaced filenames to hyphenated filenames' do
RUN_SILENT = true load_script(hyphenate: true)
NO_DRY_RUN = true
PREFER_RELATIVE = true
HYPHENATE = true
Dir.chdir(@path) do
load script_path
end
f = ::File.new(::File.join(@path, 'Home.textile'), 'r') f = ::File.new(::File.join(@path, 'Home.textile'), 'r')
output = f.read output = f.read
@@ -63,6 +69,15 @@ unless ENV['TRAVIS']
assert_equal true, output.include?('[[evil|Mordor/Eye-Of-Sauron.md]]') assert_equal true, output.include?('[[evil|Mordor/Eye-Of-Sauron.md]]')
end end
test 'migration with page file dir' do
load_script(page_file_dir: 'Subdir')
f = ::File.new(::File.join(@path, 'Subdir/Foo.md'), 'r')
output = f.read
assert_equal true, output.include?('[[Subsub/Zaa.md]]')
assert_equal true, output.include?('[[Samwi]]')
end
teardown do teardown do
FileUtils.rm_rf(@path) FileUtils.rm_rf(@path)
end end