gollum-lib 5.0.a.4-java → 5.0.1-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/README.md +12 -7
- data/Rakefile +7 -7
- data/adapter_dependencies.rb +7 -0
- data/gemspec.rb +18 -10
- data/gollum-lib.gemspec +2 -6
- data/gollum-lib_java.gemspec +2 -2
- data/lib/gollum-lib.rb +9 -9
- data/lib/gollum-lib/blob_entry.rb +2 -8
- data/lib/gollum-lib/committer.rb +22 -60
- data/lib/gollum-lib/file.rb +105 -82
- data/lib/gollum-lib/file_view.rb +8 -4
- data/lib/gollum-lib/filter.rb +12 -0
- data/lib/gollum-lib/filter/code.rb +9 -13
- data/lib/gollum-lib/filter/critic_markup.rb +97 -0
- data/lib/gollum-lib/filter/emoji.rb +10 -8
- data/lib/gollum-lib/filter/macro.rb +5 -2
- data/lib/gollum-lib/filter/plantuml.rb +1 -1
- data/lib/gollum-lib/filter/remote_code.rb +3 -2
- data/lib/gollum-lib/filter/render.rb +25 -2
- data/lib/gollum-lib/filter/sanitize.rb +1 -8
- data/lib/gollum-lib/filter/tags.rb +57 -47
- data/lib/gollum-lib/filter/toc.rb +17 -21
- data/lib/gollum-lib/filter/yaml.rb +1 -1
- data/lib/gollum-lib/git_access.rb +0 -25
- data/lib/gollum-lib/helpers.rb +13 -3
- data/lib/gollum-lib/macro/audio.rb +9 -0
- data/lib/gollum-lib/macro/global_toc.rb +2 -1
- data/lib/gollum-lib/macro/navigation.rb +8 -6
- data/lib/gollum-lib/macro/note.rb +19 -0
- data/lib/gollum-lib/macro/octicon.rb +12 -0
- data/lib/gollum-lib/macro/warn.rb +11 -0
- data/lib/gollum-lib/markup.rb +17 -32
- data/lib/gollum-lib/markups.rb +11 -7
- data/lib/gollum-lib/page.rb +79 -165
- data/lib/gollum-lib/pagination.rb +7 -6
- data/lib/gollum-lib/redirects.rb +38 -0
- data/lib/gollum-lib/sanitization.rb +32 -357
- data/lib/gollum-lib/version.rb +1 -1
- data/lib/gollum-lib/wiki.rb +216 -404
- metadata +125 -79
- data/ROADMAP +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5662c1525277435507ced6f525a59cf50b16a054e5026acd2a014c6ded340789
|
4
|
+
data.tar.gz: f9bd5b7bdf94bad28f59317199544fc7fdb9cf99e8fefd576de96316f7cf77e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f19aeec8848ae1d3b67264de96cc4e10050e0a662106ef554a23efc50e54c5a1369f0fe8b8ef4d87c88d137dac885b07af708b8760365ef632fdf3fe9695d8fe
|
7
|
+
data.tar.gz: c6d87ce1dc06acef4a4db237073c9240ae41d614df9e1c01772e4b0ad9b23c2cb9ae2b33596c298718075d2d810d4c7922d5bc71b38af832329bbfdbad8d4f53
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,10 +19,9 @@ Gollum-lib follows the rules of [Semantic Versioning](http://semver.org/) and us
|
|
19
19
|
|
20
20
|
## SYSTEM REQUIREMENTS
|
21
21
|
|
22
|
-
-
|
23
|
-
- Ruby 2.1.0+ (>= 2.3.3 recommended)
|
22
|
+
- Ruby 2.4.0+
|
24
23
|
- Unix like operating system (OS X, Ubuntu, Debian, and more)
|
25
|
-
- Will not work on Windows with the default [
|
24
|
+
- Will not work on Windows with the default [rugged](https://github.com/github/grit) adapter, but works via JRuby.
|
26
25
|
|
27
26
|
## INSTALLATION
|
28
27
|
|
@@ -92,7 +91,13 @@ Note that `base_path` just modifies the links.
|
|
92
91
|
Get the latest version of the given human or canonical page name:
|
93
92
|
|
94
93
|
```ruby
|
95
|
-
page = wiki.page('page
|
94
|
+
page = wiki.page('/page name') # Finds pages in the root directory of the wiki that are named 'page name' with a valid extension.
|
95
|
+
# => <Gollum::Page>
|
96
|
+
|
97
|
+
page = wiki.page('page name') # For convenience, you can leave out the '/' in front. Paths are assumed to be relative to '/'.
|
98
|
+
# => <Gollum::Page>
|
99
|
+
|
100
|
+
page = wiki.page('page name.md') # You can also specifiy the extension explicitly to disambiguate between pages with the same name, but different formats.
|
96
101
|
# => <Gollum::Page>
|
97
102
|
|
98
103
|
page.raw_data
|
@@ -141,7 +146,7 @@ vsns.first.authored_date
|
|
141
146
|
Get a specific version of a given canonical page file:
|
142
147
|
|
143
148
|
```ruby
|
144
|
-
wiki.page('page
|
149
|
+
wiki.page('page name', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a')
|
145
150
|
```
|
146
151
|
|
147
152
|
Get the latest version of a given static file:
|
@@ -182,10 +187,10 @@ commit = { :message => 'commit message',
|
|
182
187
|
```
|
183
188
|
|
184
189
|
Write a new version of a page (the file will be created if it does not already
|
185
|
-
exist) and commit the change. The file will be written at the repo root.
|
190
|
+
exist) and commit the change. The file will be written at the repo root if no subdirectory is specified.
|
186
191
|
|
187
192
|
```ruby
|
188
|
-
wiki.write_page('Page Name', :markdown, 'Page contents', commit)
|
193
|
+
wiki.write_page('Subdirectory/Page Name', :markdown, 'Page contents', commit)
|
189
194
|
```
|
190
195
|
|
191
196
|
Update an existing page. If the format is different than the page's current
|
data/Rakefile
CHANGED
@@ -51,11 +51,11 @@ def gemspec_file
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def gemspecs
|
54
|
-
["#{name}.gemspec"
|
54
|
+
[RUBY_PLATFORM == 'java' ? "#{name}_java.gemspec" : "#{name}.gemspec"]
|
55
55
|
end
|
56
56
|
|
57
57
|
def gem_files
|
58
|
-
["#{name}-#{version}.gem"
|
58
|
+
[RUBY_PLATFORM == 'java' ? "#{name}-#{version}-java.gem" : "#{name}-#{version}.gem"]
|
59
59
|
end
|
60
60
|
|
61
61
|
def replace_header(head, header_name)
|
@@ -107,7 +107,7 @@ end
|
|
107
107
|
|
108
108
|
desc "Build and install"
|
109
109
|
task :install => :build do
|
110
|
-
sh "gem install --local --no-
|
110
|
+
sh "gem install --local --no-document pkg/#{name}-#{version}.gem"
|
111
111
|
end
|
112
112
|
|
113
113
|
#############################################################################
|
@@ -118,14 +118,14 @@ end
|
|
118
118
|
|
119
119
|
desc 'Create a release build'
|
120
120
|
task :release => :build do
|
121
|
-
unless `git branch` =~ /
|
122
|
-
puts "You must be on the
|
121
|
+
unless `git branch` =~ /master/
|
122
|
+
puts "You must be on the master branch to release!"
|
123
123
|
exit!
|
124
124
|
end
|
125
125
|
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
126
|
-
sh "git pull --rebase origin
|
126
|
+
sh "git pull --rebase origin master"
|
127
127
|
sh "git tag v#{version}"
|
128
|
-
sh "git push origin
|
128
|
+
sh "git push origin master"
|
129
129
|
sh "git push origin v#{version}"
|
130
130
|
sh "gem push pkg/#{name}-#{version}.gem"
|
131
131
|
sh "gem push pkg/#{name}-#{version}-java.gem"
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Set the default git adapter for use in gollum-lib.gemspec and gollum-lib_java.gemspec
|
2
|
+
|
3
|
+
if RUBY_PLATFORM == 'java' then
|
4
|
+
DEFAULT_ADAPTER_REQ = ['gollum-rjgit_adapter', '>= 0.5.1', '~> 0.5.1']
|
5
|
+
else
|
6
|
+
DEFAULT_ADAPTER_REQ = ['gollum-rugged_adapter', '>= 0.99.4', '~> 0.99.4']
|
7
|
+
end
|
data/gemspec.rb
CHANGED
@@ -3,12 +3,12 @@ def specification(version, default_adapter, platform = nil)
|
|
3
3
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
4
4
|
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
5
5
|
s.rubygems_version = '0.0.1'
|
6
|
-
s.required_ruby_version = '>= 2.
|
6
|
+
s.required_ruby_version = '>= 2.4'
|
7
7
|
|
8
8
|
s.name = 'gollum-lib'
|
9
9
|
s.version = version
|
10
10
|
s.platform = platform if platform
|
11
|
-
s.date = '
|
11
|
+
s.date = '2020-03-29'
|
12
12
|
s.date = '2017-04-13'
|
13
13
|
s.rubyforge_project = 'gollum-lib'
|
14
14
|
s.license = 'MIT'
|
@@ -28,27 +28,29 @@ def specification(version, default_adapter, platform = nil)
|
|
28
28
|
s.add_dependency *default_adapter
|
29
29
|
s.add_dependency 'rouge', '~> 3.1'
|
30
30
|
s.add_dependency 'nokogiri', '~> 1.8'
|
31
|
-
s.add_dependency '
|
32
|
-
s.add_dependency '
|
33
|
-
s.add_dependency '
|
34
|
-
s.add_dependency '
|
31
|
+
s.add_dependency 'loofah', '~> 2.3'
|
32
|
+
s.add_dependency 'github-markup', '~> 3.0'
|
33
|
+
s.add_dependency 'gemojione', '~> 4.1'
|
34
|
+
s.add_dependency 'octicons', '~> 8.5'
|
35
35
|
s.add_dependency 'twitter-text', '1.14.7'
|
36
36
|
|
37
37
|
s.add_development_dependency 'org-ruby', '~> 0.9.9'
|
38
|
-
s.add_development_dependency 'kramdown', '~> 1.
|
38
|
+
s.add_development_dependency 'kramdown', '~> 2.1.0'
|
39
|
+
s.add_development_dependency 'kramdown-parser-gfm', '~> 1.1.0'
|
39
40
|
s.add_development_dependency 'RedCloth', '~> 4.2.9'
|
40
41
|
s.add_development_dependency 'mocha', '~> 1.2.0'
|
41
42
|
s.add_development_dependency 'shoulda', '~> 3.5.0'
|
42
43
|
s.add_development_dependency 'wikicloth', '~> 0.8.3'
|
43
44
|
s.add_development_dependency 'bibtex-ruby', '~> 4.3'
|
44
45
|
s.add_development_dependency 'citeproc-ruby', '~> 1.1'
|
45
|
-
s.add_development_dependency '
|
46
|
+
s.add_development_dependency 'unicode_utils', '~> 1.4.0' # required by citeproc-ruby on ruby < 2.4
|
47
|
+
s.add_development_dependency 'rake', '~> 12.3', '>= 12.3.3'
|
46
48
|
s.add_development_dependency 'pry', '~> 0.10.1'
|
47
49
|
# required by pry
|
48
50
|
s.add_development_dependency 'rb-readline', '~> 0.5.1'
|
49
51
|
# updating minitest-reporters requires a new minitest which fails with gollum's tests.
|
50
52
|
s.add_development_dependency 'test-unit', '~> 3.1.5'
|
51
|
-
s.add_development_dependency 'minitest-reporters', '~>
|
53
|
+
s.add_development_dependency 'minitest-reporters', '~> 1.4'
|
52
54
|
s.add_development_dependency 'nokogiri-diff', '~> 0.2.0'
|
53
55
|
# required by guard
|
54
56
|
s.add_development_dependency 'guard', '~> 2.8.2'
|
@@ -63,8 +65,8 @@ def specification(version, default_adapter, platform = nil)
|
|
63
65
|
HISTORY.md
|
64
66
|
LICENSE
|
65
67
|
README.md
|
66
|
-
ROADMAP
|
67
68
|
Rakefile
|
69
|
+
adapter_dependencies.rb
|
68
70
|
docs/sanitization.md
|
69
71
|
gemspec.rb
|
70
72
|
gollum-lib.gemspec
|
@@ -77,6 +79,7 @@ def specification(version, default_adapter, platform = nil)
|
|
77
79
|
lib/gollum-lib/filter.rb
|
78
80
|
lib/gollum-lib/filter/bibtex.rb
|
79
81
|
lib/gollum-lib/filter/code.rb
|
82
|
+
lib/gollum-lib/filter/critic_markup.rb
|
80
83
|
lib/gollum-lib/filter/emoji.rb
|
81
84
|
lib/gollum-lib/filter/macro.rb
|
82
85
|
lib/gollum-lib/filter/pandoc_bib.rb
|
@@ -93,14 +96,19 @@ def specification(version, default_adapter, platform = nil)
|
|
93
96
|
lib/gollum-lib/hook.rb
|
94
97
|
lib/gollum-lib/macro.rb
|
95
98
|
lib/gollum-lib/macro/all_pages.rb
|
99
|
+
lib/gollum-lib/macro/audio.rb
|
96
100
|
lib/gollum-lib/macro/global_toc.rb
|
97
101
|
lib/gollum-lib/macro/navigation.rb
|
102
|
+
lib/gollum-lib/macro/note.rb
|
103
|
+
lib/gollum-lib/macro/octicon.rb
|
98
104
|
lib/gollum-lib/macro/series.rb
|
99
105
|
lib/gollum-lib/macro/video.rb
|
106
|
+
lib/gollum-lib/macro/warn.rb
|
100
107
|
lib/gollum-lib/markup.rb
|
101
108
|
lib/gollum-lib/markups.rb
|
102
109
|
lib/gollum-lib/page.rb
|
103
110
|
lib/gollum-lib/pagination.rb
|
111
|
+
lib/gollum-lib/redirects.rb
|
104
112
|
lib/gollum-lib/sanitization.rb
|
105
113
|
lib/gollum-lib/version.rb
|
106
114
|
lib/gollum-lib/wiki.rb
|
data/gollum-lib.gemspec
CHANGED
@@ -1,8 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'gemspec.rb')
|
2
|
+
require File.join(File.dirname(__FILE__), 'adapter_dependencies.rb')
|
2
3
|
require File.join(File.dirname(__FILE__), 'lib', 'gollum-lib', 'version.rb')
|
3
|
-
|
4
|
-
default_adapter = ['gollum-rjgit_adapter', '~> 0.3']
|
5
|
-
else
|
6
|
-
default_adapter = ['gollum-grit_adapter', '~> 1.0']
|
7
|
-
end
|
8
|
-
Gem::Specification.new &specification(Gollum::Lib::VERSION, default_adapter)
|
4
|
+
Gem::Specification.new &specification(Gollum::Lib::VERSION, DEFAULT_ADAPTER_REQ)
|
data/gollum-lib_java.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'gemspec.rb')
|
2
|
+
require File.join(File.dirname(__FILE__), 'adapter_dependencies.rb')
|
2
3
|
require File.join(File.dirname(__FILE__), 'lib', 'gollum-lib', 'version.rb')
|
3
|
-
|
4
|
-
Gem::Specification.new &specification(Gollum::Lib::VERSION, default_adapter, "java")
|
4
|
+
Gem::Specification.new &specification(Gollum::Lib::VERSION, DEFAULT_ADAPTER_REQ, "java")
|
data/lib/gollum-lib.rb
CHANGED
@@ -5,15 +5,17 @@ require 'digest/sha1'
|
|
5
5
|
require 'ostruct'
|
6
6
|
require 'pathname'
|
7
7
|
|
8
|
-
DEFAULT_ADAPTER = RUBY_PLATFORM == 'java' ? 'rjgit' : '
|
8
|
+
DEFAULT_ADAPTER = RUBY_PLATFORM == 'java' ? 'rjgit' : 'rugged'
|
9
9
|
|
10
|
+
module Gollum; end
|
10
11
|
Gollum::GIT_ADAPTER = DEFAULT_ADAPTER if !defined?(Gollum::GIT_ADAPTER)
|
11
12
|
require "#{Gollum::GIT_ADAPTER.downcase}_adapter"
|
12
13
|
|
13
14
|
# external
|
14
15
|
require 'github/markup'
|
15
|
-
require '
|
16
|
+
require 'erb'
|
16
17
|
require 'gemojione'
|
18
|
+
require 'loofah'
|
17
19
|
|
18
20
|
# internal
|
19
21
|
require File.expand_path('../gollum-lib/git_access', __FILE__)
|
@@ -22,9 +24,10 @@ require File.expand_path('../gollum-lib/committer', __FILE__)
|
|
22
24
|
require File.expand_path('../gollum-lib/pagination', __FILE__)
|
23
25
|
require File.expand_path('../gollum-lib/blob_entry', __FILE__)
|
24
26
|
require File.expand_path('../gollum-lib/wiki', __FILE__)
|
27
|
+
require File.expand_path('../gollum-lib/redirects', __FILE__)
|
28
|
+
require File.expand_path('../gollum-lib/file', __FILE__)
|
25
29
|
require File.expand_path('../gollum-lib/page', __FILE__)
|
26
30
|
require File.expand_path('../gollum-lib/macro', __FILE__)
|
27
|
-
require File.expand_path('../gollum-lib/file', __FILE__)
|
28
31
|
require File.expand_path('../gollum-lib/file_view', __FILE__)
|
29
32
|
require File.expand_path('../gollum-lib/markup', __FILE__)
|
30
33
|
require File.expand_path('../gollum-lib/markups', __FILE__)
|
@@ -40,19 +43,16 @@ module Gollum
|
|
40
43
|
class Error < StandardError; end
|
41
44
|
|
42
45
|
class DuplicatePageError < Error
|
43
|
-
attr_accessor :dir
|
44
|
-
attr_accessor :existing_path
|
45
46
|
attr_accessor :attempted_path
|
46
47
|
|
47
|
-
def initialize(
|
48
|
-
@dir = dir
|
49
|
-
@existing_path = existing
|
48
|
+
def initialize(attempted, message = nil)
|
50
49
|
@attempted_path = attempted
|
51
|
-
super(message || "Cannot write #{@
|
50
|
+
super(message || "Cannot write #{@attempted_path}: path already exists.")
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
55
54
|
class InvalidGitRepositoryError < StandardError; end
|
56
55
|
class NoSuchPathError < StandardError; end
|
56
|
+
class IllegalDirectoryPath < StandardError; end
|
57
57
|
|
58
58
|
end
|
@@ -47,10 +47,7 @@ module Gollum
|
|
47
47
|
#
|
48
48
|
# Returns a Gollum::Page instance.
|
49
49
|
def page(wiki, commit)
|
50
|
-
|
51
|
-
page = wiki.page_class.new(wiki).populate(blob, self.dir)
|
52
|
-
page.version = commit
|
53
|
-
page
|
50
|
+
::Gollum::Page.new(wiki, self.blob(wiki.repo), self.dir, commit)
|
54
51
|
end
|
55
52
|
|
56
53
|
# Gets a File instance for this blob.
|
@@ -59,10 +56,7 @@ module Gollum
|
|
59
56
|
#
|
60
57
|
# Returns a Gollum::File instance.
|
61
58
|
def file(wiki, commit)
|
62
|
-
|
63
|
-
file = wiki.file_class.new(wiki).populate(blob, self.dir)
|
64
|
-
file.version = commit
|
65
|
-
file
|
59
|
+
::Gollum::File.new(wiki, self.blob(wiki.repo), self.dir, commit)
|
66
60
|
end
|
67
61
|
|
68
62
|
def inspect
|
data/lib/gollum-lib/committer.rb
CHANGED
@@ -30,7 +30,6 @@ module Gollum
|
|
30
30
|
@wiki = wiki
|
31
31
|
@options = options
|
32
32
|
@callbacks = []
|
33
|
-
after_commit { |*args| Hook.execute(:post_commit, *args) }
|
34
33
|
end
|
35
34
|
|
36
35
|
# Public: References the Git index for this commit.
|
@@ -71,82 +70,46 @@ module Gollum
|
|
71
70
|
end
|
72
71
|
end
|
73
72
|
|
74
|
-
# Adds a
|
73
|
+
# Adds a path to the Index.
|
75
74
|
#
|
76
|
-
#
|
77
|
-
# prefix or suffix slashes (e.g. "foo/bar").
|
78
|
-
# name - The String Gollum::Page filename_stripped.
|
79
|
-
# format - The Symbol Gollum::Page format.
|
75
|
+
# path - The String path to be added
|
80
76
|
# data - The String wiki data to store in the tree map.
|
81
77
|
#
|
82
|
-
# Raises Gollum::DuplicatePageError if a matching filename already exists.
|
78
|
+
# Raises Gollum::DuplicatePageError if a matching filename already exists, unless force_overwrite is explicitly enabled.
|
83
79
|
# This way, pages are not inadvertently overwritten.
|
84
80
|
#
|
85
81
|
# Returns nothing (modifies the Index in place).
|
86
|
-
def add_to_index(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
fullpath = ::File.join(*[dir, path])
|
92
|
-
fullpath = fullpath[1..-1] if fullpath =~ /^\//
|
93
|
-
|
94
|
-
if index.current_tree && (tree = index.current_tree / (@wiki.page_file_dir || '/'))
|
95
|
-
tree = tree / dir unless tree.nil?
|
96
|
-
end
|
97
|
-
|
98
|
-
if tree
|
99
|
-
downpath = path.downcase.sub(/\.\w+$/, '')
|
100
|
-
|
101
|
-
tree.blobs.each do |blob|
|
102
|
-
next if page_path_scheduled_for_deletion?(index.tree, fullpath)
|
103
|
-
|
104
|
-
existing_file = blob.name.downcase.sub(/\.\w+$/, '')
|
105
|
-
existing_file_ext = ::File.extname(blob.name).sub(/^\./, '')
|
106
|
-
|
107
|
-
new_file_ext = ::File.extname(path).sub(/^\./, '')
|
108
|
-
|
109
|
-
if downpath == existing_file && (new_file_ext == existing_file_ext)
|
110
|
-
raise DuplicatePageError.new(dir, blob.name, path)
|
111
|
-
end
|
82
|
+
def add_to_index(path, data, options = {}, force_overwrite = false)
|
83
|
+
if tree = index.current_tree
|
84
|
+
unless page_path_scheduled_for_deletion?(index.tree, path) || force_overwrite
|
85
|
+
raise DuplicatePageError.new(path) if tree / path
|
112
86
|
end
|
113
87
|
end
|
114
88
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
89
|
+
unless options[:normalize] == false
|
90
|
+
begin
|
91
|
+
data = @wiki.normalize(data)
|
92
|
+
rescue ArgumentError => err
|
93
|
+
# Swallow errors that arise from data being binary
|
94
|
+
raise err unless err.message.include?('invalid byte sequence')
|
95
|
+
end
|
122
96
|
end
|
123
|
-
index.add(
|
97
|
+
index.add(path, data)
|
124
98
|
end
|
125
99
|
|
126
100
|
# Update the given file in the repository's working directory if there
|
127
101
|
# is a working directory present.
|
128
102
|
#
|
129
|
-
#
|
130
|
-
# name - The String name of the page or the stripped filename
|
131
|
-
# (should be pre-canonicalized if required).
|
132
|
-
# format - The Symbol format of the page.
|
103
|
+
# path - The String path to update
|
133
104
|
#
|
134
105
|
# Returns nothing.
|
135
|
-
def update_working_dir(
|
106
|
+
def update_working_dir(path)
|
136
107
|
unless @wiki.repo.bare
|
137
|
-
if @wiki.page_file_dir &&
|
138
|
-
|
108
|
+
if @wiki.page_file_dir && !path.start_with?(@wiki.page_file_dir)
|
109
|
+
# Skip the path if it is not under the wiki's page file dir
|
110
|
+
return nil
|
139
111
|
end
|
140
112
|
|
141
|
-
path =
|
142
|
-
if dir == ''
|
143
|
-
@wiki.page_file_name(name, format)
|
144
|
-
else
|
145
|
-
::File.join(dir, @wiki.page_file_name(name, format))
|
146
|
-
end
|
147
|
-
|
148
|
-
path = path.force_encoding('ascii-8bit') if path.respond_to?(:force_encoding)
|
149
|
-
|
150
113
|
Dir.chdir(::File.join(@wiki.repo.path, '..')) do
|
151
114
|
if file_path_scheduled_for_deletion?(index.tree, path)
|
152
115
|
@wiki.repo.git.rm(path, :force => true)
|
@@ -165,6 +128,7 @@ module Gollum
|
|
165
128
|
@callbacks.each do |cb|
|
166
129
|
cb.call(self, sha1)
|
167
130
|
end
|
131
|
+
Hook.execute(:post_commit, self, sha1)
|
168
132
|
sha1
|
169
133
|
end
|
170
134
|
|
@@ -192,8 +156,7 @@ module Gollum
|
|
192
156
|
parts = path.split('/')
|
193
157
|
if parts.size == 1
|
194
158
|
deletions = map.keys.select { |k| !map[k] }
|
195
|
-
|
196
|
-
deletions.any? { |d| d.downcase.sub(/\.\w+$/, '') == downfile }
|
159
|
+
deletions.any? { |d| d == parts.first }
|
197
160
|
else
|
198
161
|
part = parts.shift
|
199
162
|
if (rest = map[part])
|
@@ -230,7 +193,6 @@ module Gollum
|
|
230
193
|
|
231
194
|
# Proxies methods t
|
232
195
|
def method_missing(name, *args)
|
233
|
-
args.map! { |item| item.respond_to?(:force_encoding) ? item.force_encoding('ascii-8bit') : item }
|
234
196
|
index.send(name, *args)
|
235
197
|
end
|
236
198
|
end
|
data/lib/gollum-lib/file.rb
CHANGED
@@ -2,55 +2,125 @@
|
|
2
2
|
|
3
3
|
module Gollum
|
4
4
|
class File
|
5
|
-
|
5
|
+
|
6
|
+
# Does the filesystem support reading symlinks?
|
7
|
+
FS_SUPPORT_SYMLINKS = !Gem.win_platform?
|
8
|
+
|
9
|
+
class << self
|
10
|
+
|
11
|
+
# For use with self.find: returns true if the given query corresponds to the in-repo path of the BlobEntry.
|
12
|
+
#
|
13
|
+
# query - The String path to match.
|
14
|
+
# entry - The BlobEntry to check against.
|
15
|
+
# global_match - (Not implemented for File, see Page.path_match)
|
16
|
+
# hyphened_tags - If true, replace spaces in match_path with hyphens.
|
17
|
+
# case_insensitive - If true, compare query and match_path case-insensitively
|
18
|
+
def path_match(query, entry, global_match = false, hyphened_tags = false, case_insensitive = false)
|
19
|
+
path_compare(query, ::File.join('/', entry.path), hyphened_tags, case_insensitive)
|
20
|
+
end
|
21
|
+
|
22
|
+
# For use with self.path_match: returns true if 'query' and 'match_path' match, strictly or taking account of the following parameters:
|
23
|
+
# hyphened_tags - If true, replace spaces in match_path with hyphens.
|
24
|
+
# case_insensitive - If true, compare query and match_path case-insensitively
|
25
|
+
def path_compare(query, match_path, hyphened_tags, case_insensitive)
|
26
|
+
if hyphened_tags
|
27
|
+
final_query = query.gsub(' ', '-')
|
28
|
+
final_match = match_path.gsub(' ', '-')
|
29
|
+
else
|
30
|
+
final_query = query
|
31
|
+
final_match = match_path
|
32
|
+
end
|
33
|
+
final_match.send(case_insensitive ? :casecmp? : :==, final_query)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Find a file in the given Gollum wiki.
|
38
|
+
#
|
39
|
+
# wiki - The wiki.
|
40
|
+
# path - The full String path.
|
41
|
+
# version - The String version ID to find.
|
42
|
+
# try_on_disk - If true, try to return just a reference to a file
|
43
|
+
# that exists on the disk.
|
44
|
+
# global_match - If true, find a File matching path's filename, but not it's directory (so anywhere in the repo)
|
45
|
+
#
|
46
|
+
# Returns a Gollum::File or nil if the file could not be found. Note
|
47
|
+
# that if you specify try_on_disk=true, you may or may not get a file
|
48
|
+
# for which on_disk? is actually true.
|
49
|
+
def self.find(wiki, path, version, try_on_disk = false, global_match = false)
|
50
|
+
map = wiki.tree_map_for(version.to_s)
|
51
|
+
|
52
|
+
query_path = Pathname.new(::File.join(['/', wiki.page_file_dir, path].compact)).cleanpath.to_s
|
53
|
+
query_path.sub!(/^\/\//, '/') if Gem.win_platform? # On Windows, Pathname#cleanpath will leave double slashes at the start of a path intact, so sub them out.
|
54
|
+
|
55
|
+
begin
|
56
|
+
entry = map.detect do |entry|
|
57
|
+
path_match(query_path, entry, global_match, wiki.hyphened_tag_lookup, wiki.case_insensitive_tag_lookup)
|
58
|
+
end
|
59
|
+
entry ? self.new(wiki, entry.blob(wiki.repo), entry.dir, version, try_on_disk) : nil
|
60
|
+
rescue Gollum::Git::NoSuchShaFound
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
end
|
6
64
|
|
7
65
|
# Public: Initialize a file.
|
8
66
|
#
|
9
|
-
# wiki - The Gollum::Wiki
|
67
|
+
# wiki - The Gollum::Wiki
|
68
|
+
# blob - The Gollum::Git::Blob
|
69
|
+
# path - The String path
|
70
|
+
# version - The String SHA or Gollum::Git::Commit version
|
71
|
+
# try_on_disk - If true, try to get an on disk reference for this file.
|
10
72
|
#
|
11
73
|
# Returns a newly initialized Gollum::File.
|
12
|
-
def initialize(wiki)
|
74
|
+
def initialize(wiki, blob, path, version, try_on_disk = false)
|
13
75
|
@wiki = wiki
|
14
|
-
@blob =
|
15
|
-
@path =
|
16
|
-
@
|
17
|
-
|
76
|
+
@blob = blob
|
77
|
+
@path = "#{path}/#{blob.name}"[1..-1]
|
78
|
+
@version = version.is_a?(Gollum::Git::Commit) ? version : @wiki.commit_for(version)
|
79
|
+
get_disk_reference if try_on_disk
|
18
80
|
end
|
19
81
|
|
20
|
-
# Public: The
|
82
|
+
# Public: The path of the page within the repo.
|
21
83
|
#
|
22
|
-
# Returns the String
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
84
|
+
# Returns the String path.
|
85
|
+
attr_reader :path
|
86
|
+
|
87
|
+
# Public: The Gollum::Git::Commit version of the file.
|
88
|
+
attr_accessor :version
|
28
89
|
|
29
|
-
# Public:
|
90
|
+
# Public: Whether the file can be read from disk.
|
91
|
+
attr_accessor :on_disk
|
92
|
+
|
93
|
+
# Public: The SHA hash identifying this page
|
30
94
|
#
|
31
95
|
# Returns the String SHA.
|
32
96
|
def sha
|
33
97
|
@blob && @blob.id
|
34
98
|
end
|
35
99
|
|
36
|
-
# Public: The
|
100
|
+
# Public: The on-disk filename of the page including extension.
|
37
101
|
#
|
38
|
-
# Returns the String
|
39
|
-
def
|
40
|
-
|
102
|
+
# Returns the String name.
|
103
|
+
def filename
|
104
|
+
@blob && @blob.name
|
41
105
|
end
|
106
|
+
alias :name :filename
|
42
107
|
|
43
|
-
# Public: The
|
108
|
+
# Public: The url path required to reach this file within the repo.
|
44
109
|
#
|
45
|
-
# Returns the String
|
46
|
-
def
|
47
|
-
|
48
|
-
@
|
110
|
+
# Returns the String url_path
|
111
|
+
def url_path
|
112
|
+
# Chop off the page_file_dir and first slash if necessary
|
113
|
+
@wiki.page_file_dir ? self.path[@wiki.page_file_dir.length+1..-1] : self.path
|
49
114
|
end
|
50
115
|
|
51
|
-
|
116
|
+
# Public: The url_path, but URL encoded.
|
117
|
+
#
|
118
|
+
# Returns the String url_path
|
119
|
+
def escaped_url_path
|
120
|
+
ERB::Util.url_encode(self.url_path).gsub('%2F', '/').force_encoding('utf-8')
|
121
|
+
end
|
52
122
|
|
53
|
-
# Public: The raw contents of the
|
123
|
+
# Public: The raw contents of the file.
|
54
124
|
#
|
55
125
|
# Returns the String data.
|
56
126
|
def raw_data
|
@@ -69,7 +139,7 @@ module Gollum
|
|
69
139
|
#
|
70
140
|
# Returns true if this is a pointer to an on-disk file
|
71
141
|
def on_disk?
|
72
|
-
|
142
|
+
!!@on_disk
|
73
143
|
end
|
74
144
|
|
75
145
|
# Public: The path to this file on disk
|
@@ -79,48 +149,29 @@ module Gollum
|
|
79
149
|
@on_disk_path
|
80
150
|
end
|
81
151
|
|
82
|
-
# Public: The Gollum::Git::Commit version of the file.
|
83
|
-
attr_accessor :version
|
84
|
-
|
85
|
-
# Public: The String path of the file.
|
86
|
-
attr_reader :path
|
87
|
-
|
88
152
|
# Public: The String mime type of the file.
|
89
153
|
def mime_type
|
90
154
|
@blob && @blob.mime_type
|
91
155
|
end
|
92
156
|
|
93
|
-
|
94
|
-
|
95
|
-
# blob - The Gollum::Git::Blob that contains the info.
|
96
|
-
# path - The String directory path of the file.
|
97
|
-
#
|
98
|
-
# Returns the populated Gollum::File.
|
99
|
-
def populate(blob, path = nil)
|
100
|
-
@blob = blob
|
101
|
-
@path = "#{path}/#{blob.name}"[1..-1]
|
102
|
-
@on_disk = false
|
103
|
-
@on_disk_path = nil
|
104
|
-
self
|
157
|
+
def self.protected_files
|
158
|
+
['custom.css', 'custom.js', '.redirects.gollum']
|
105
159
|
end
|
106
160
|
|
107
|
-
|
108
|
-
#
|
109
|
-
# Internal Methods
|
110
|
-
#
|
111
|
-
#########################################################################
|
161
|
+
private
|
112
162
|
|
113
163
|
# Return the file path to this file on disk, if available.
|
114
164
|
#
|
115
165
|
# Returns nil if the file isn't available on disk. This can occur if the
|
116
166
|
# repo is bare, if the commit isn't the HEAD, or if there are problems
|
117
167
|
# resolving symbolic links.
|
118
|
-
def get_disk_reference
|
168
|
+
def get_disk_reference
|
119
169
|
return false if @wiki.repo.bare
|
120
|
-
return false if
|
170
|
+
return false if @version.sha != @wiki.repo.head.commit.sha
|
171
|
+
return false if @blob.is_symlink && !FS_SUPPORT_SYMLINKS
|
121
172
|
|
122
173
|
# This will try to resolve symbolic links, as well
|
123
|
-
pathname = Pathname.new(::File.expand_path(::File.join(@wiki.repo.path, '..',
|
174
|
+
pathname = Pathname.new(::File.expand_path(::File.join(@wiki.repo.path, '..', @path)))
|
124
175
|
if pathname.symlink?
|
125
176
|
source = ::File.readlink(pathname.to_path)
|
126
177
|
realpath = ::File.join(::File.dirname(pathname.to_path), source)
|
@@ -129,36 +180,8 @@ module Gollum
|
|
129
180
|
else
|
130
181
|
@on_disk_path = pathname.to_path
|
131
182
|
end
|
132
|
-
true
|
183
|
+
@on_disk = true
|
133
184
|
end
|
134
185
|
|
135
|
-
# Find a file in the given Gollum repo.
|
136
|
-
#
|
137
|
-
# name - The full String path.
|
138
|
-
# version - The String version ID to find.
|
139
|
-
# try_on_disk - If true, try to return just a reference to a file
|
140
|
-
# that exists on the disk.
|
141
|
-
#
|
142
|
-
# Returns a Gollum::File or nil if the file could not be found. Note
|
143
|
-
# that if you specify try_on_disk=true, you may or may not get a file
|
144
|
-
# for which on_disk? is actually true.
|
145
|
-
def find(name, version, try_on_disk = false)
|
146
|
-
checked = name.downcase
|
147
|
-
map = @wiki.tree_map_for(version)
|
148
|
-
commit = version.is_a?(Gollum::Git::Commit) ? version : @wiki.commit_for(version)
|
149
|
-
|
150
|
-
if (result = map.detect { |entry| entry.path.downcase == checked })
|
151
|
-
@path = name
|
152
|
-
@version = commit
|
153
|
-
|
154
|
-
if try_on_disk && get_disk_reference(name, commit)
|
155
|
-
@on_disk = true
|
156
|
-
else
|
157
|
-
@blob = result.blob(@wiki.repo)
|
158
|
-
end
|
159
|
-
|
160
|
-
self
|
161
|
-
end
|
162
|
-
end
|
163
186
|
end
|
164
187
|
end
|