gollum 5.2.3 → 5.3.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +41 -0
  3. data/Gemfile +18 -4
  4. data/HISTORY.md +3 -3
  5. data/LATEST_CHANGES.md +13 -0
  6. data/README.md +38 -26
  7. data/Rakefile +55 -12
  8. data/bin/gollum +6 -4
  9. data/bin/gollum-migrate-tags +40 -28
  10. data/docker-run.sh +18 -0
  11. data/gollum.gemspec +19 -14
  12. data/lib/gollum/app.rb +66 -42
  13. data/lib/gollum/public/assets/.sprockets-manifest-160337b312f8e438181baac4aaa37319.json +1 -0
  14. data/lib/gollum/public/assets/{app-ad43ca64b295d8444b10f22ee868f18429268af498f1bc515434878b690e37a2.css → app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css} +1 -1
  15. data/lib/gollum/public/assets/{app-ad43ca64b295d8444b10f22ee868f18429268af498f1bc515434878b690e37a2.css.gz → app-309be032396e783b13a47df58f389b7c8e11c2b2d42640560b874f677c25f6e5.css.gz} +0 -0
  16. data/lib/gollum/public/assets/{app-0fd228e26bfbe6fe31a2da268eb0e98e780c1191c1a918adf383377946e9c838.js → app-f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5.js} +2 -2
  17. data/lib/gollum/public/assets/{app-0fd228e26bfbe6fe31a2da268eb0e98e780c1191c1a918adf383377946e9c838.js.gz → app-f05401ee374f0c7f48fc2bc08e30b4f4db705861fd5895ed70998683b383bfb5.js.gz} +0 -0
  18. data/lib/gollum/public/assets/criticmarkup-31ae5d3282bbb8e7b7c3c9917e9fb68e3315a6b4a75da6cec48d21b8846905c4.css.gz +0 -0
  19. data/lib/gollum/public/assets/{editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js → editor-9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a.js} +2 -2
  20. data/lib/gollum/public/assets/{editor-db10c8351306e92f1926ba225d0cd9c8e886482b3b9820a85825ec3abab5f1cf.js.gz → editor-9881d0c7ae663293f0e3a7e72729eec7e940fa613185c076709b76d292f5703a.js.gz} +0 -0
  21. data/lib/gollum/public/assets/print-512498c368be0d3fb1ba105dfa84289ae48380ec9fcbef948bd4e23b0b095bfb.css.gz +0 -0
  22. data/lib/gollum/public/gollum/javascript/app.js +1 -0
  23. data/lib/gollum/public/gollum/javascript/date.min.js +123 -0
  24. data/lib/gollum/public/gollum/javascript/editor/gollum.editor.js +1 -1
  25. data/lib/gollum/public/gollum/javascript/gollum.js.erb +20 -2
  26. data/lib/gollum/public/gollum/stylesheets/editor.scss +1 -0
  27. data/lib/gollum/public/gollum/stylesheets/template.scss.erb +8 -0
  28. data/lib/gollum/templates/commit.mustache +4 -2
  29. data/lib/gollum/templates/compare.mustache +10 -4
  30. data/lib/gollum/templates/create.mustache +7 -4
  31. data/lib/gollum/templates/edit.mustache +7 -4
  32. data/lib/gollum/templates/history.mustache +10 -3
  33. data/lib/gollum/templates/latest_changes.mustache +8 -5
  34. data/lib/gollum/templates/layout.mustache +1 -0
  35. data/lib/gollum/templates/navbar.mustache +9 -2
  36. data/lib/gollum/templates/overview.mustache +7 -4
  37. data/lib/gollum/templates/search.mustache +7 -1
  38. data/lib/gollum/templates/wiki_content.mustache +4 -2
  39. data/lib/gollum/views/commit.rb +4 -0
  40. data/lib/gollum/views/create.rb +3 -2
  41. data/lib/gollum/views/edit.rb +2 -5
  42. data/lib/gollum/views/has_math.rb +11 -0
  43. data/lib/gollum/views/helpers/locale_helpers.rb +82 -0
  44. data/lib/gollum/views/history.rb +17 -12
  45. data/lib/gollum/views/latest_changes.rb +15 -10
  46. data/lib/gollum/views/layout.rb +6 -1
  47. data/lib/gollum/views/page.rb +23 -18
  48. data/lib/gollum/views/template_cascade.rb +40 -0
  49. data/lib/gollum.rb +10 -6
  50. metadata +55 -28
  51. data/lib/gollum/public/assets/.sprockets-manifest-de7bb79aec424e55af1acdcc4237b301.json +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a1a9ac6cd9b6fe057d1ba7512ee9b37f5f3775db9884d13a39100e51d079c3f4
4
- data.tar.gz: 60719e60d5a98bc85a9de517300d347e9fb92897a4120c03501a72eb64ae6a57
3
+ metadata.gz: fc6498c3f4201b606f4fc3919ce8c900b708e95f4599e8d768eb449f7265b422
4
+ data.tar.gz: c777311336b3da982568b1d6200bed36fef5f1d4cacdebb94fd3dbdd507faa8e
5
5
  SHA512:
6
- metadata.gz: ca4b52144a74a4800718929477c082dc75a1d575f83eebd53c667e60431d6869cf2c4d31eac2886ad3f46fe89f767394fb37c63a11975458465125144186f709
7
- data.tar.gz: 5ff0912dcd727551c2bd7e43e947ca9f05c04ac50c2f6dfe180f67ab47efd69f85c33a63a5f42cbe0649aa54c49bb12005876229334a35849359d2b2d30878a7
6
+ metadata.gz: 24f98884dcef45d1522c94c74da652c72b4ec350b78eb7f073f38144eb30aae41451dd3daefdf751902b17ff20da3a03ba327b82f97859b253428dba97fac868
7
+ data.tar.gz: 7ec0150d4a1d0f9246924cde38ce0e951059838f9df2a915320f7af83d85b445d7959cdefddc8aaf067fa40a8e486c3be33db2cbbd8699ecde897b3825759d03
data/Dockerfile ADDED
@@ -0,0 +1,41 @@
1
+ FROM ruby:2.7-alpine AS builder
2
+
3
+ RUN apk add \
4
+ build-base \
5
+ cmake \
6
+ git \
7
+ icu-dev \
8
+ openssl-dev
9
+
10
+ COPY Gemfile* /tmp/
11
+ COPY gollum.gemspec* /tmp/
12
+ WORKDIR /tmp
13
+ RUN bundle install
14
+
15
+ RUN gem install \
16
+ asciidoctor \
17
+ creole \
18
+ wikicloth \
19
+ org-ruby \
20
+ RedCloth \
21
+ bibtex-ruby \
22
+ && echo "gem-extra complete"
23
+
24
+ WORKDIR /app
25
+ COPY . /app
26
+ RUN bundle exec rake install
27
+
28
+
29
+ FROM ruby:2.7-alpine
30
+
31
+ COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
32
+
33
+ RUN apk add \
34
+ bash \
35
+ git \
36
+ libc6-compat
37
+
38
+ VOLUME /wiki
39
+ WORKDIR /wiki
40
+ COPY docker-run.sh /docker-run.sh
41
+ ENTRYPOINT ["/docker-run.sh"]
data/Gemfile CHANGED
@@ -1,9 +1,23 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- if RUBY_PLATFORM == 'java'
4
- gem 'warbler'
5
- end
3
+ gem 'warbler', platforms: :jruby
4
+
5
+ # FIXME:
6
+ #
7
+ # There's an issue in 1.12.5 that causes XHTML elements to be generated badly,
8
+ # causing Gollum's test suite to fail.[1] The issue has been fixed upstream,
9
+ # but we're still waiting for a new Nokogiri point release.
10
+ #
11
+ # However, 1.12.5 is a security patch, so we don't want end users to use an
12
+ # older version of Nokogiri. But this is safe to do in our CI environment.
13
+ #
14
+ # Once there's a new Nokogiri release, we can remove this dependency and JRuby
15
+ # CI should pass normally again.
16
+ #
17
+ # Note that Nokogiri 1.11+ does not support Ruby v2.4.x anymore. So to make our
18
+ # current CI workflows pass, we should only try to install this version of
19
+ # Nokogiri for newer Ruby versions.
6
20
 
7
21
  gemspec
8
22
 
9
- gem 'rake', '~> 13.0'
23
+ gem 'rake', '~> 13.0'
data/HISTORY.md CHANGED
@@ -1,12 +1,12 @@
1
- # 5.2.3 2021-04-18
1
+ # 5.2.3 / 2021-04-18
2
2
 
3
3
  * Fix bug preventing page titles from being displayed
4
4
 
5
- # 5.2.1 2021-02-25
5
+ # 5.2.1 / 2021-02-25
6
6
 
7
7
  * Fix include call to a missing asset (@benjaminwil). This caused slow first page loads on JRuby.
8
8
 
9
- # 5.2 2021-02-24
9
+ # 5.2 / 2021-02-24
10
10
 
11
11
  * Improved styling and Primer upgrade (@benjaminwil)
12
12
  * Add redirect to rename commit (@ViChyavIn)
data/LATEST_CHANGES.md ADDED
@@ -0,0 +1,13 @@
1
+ # 5.3.0 / 2022-05-24
2
+
3
+ * Feature: allow for overriding only specific Mustache templates/partials (@beporter)
4
+ * Feature: Add option to show browser's local time (@NikitaIvanovV)
5
+ * Improvement: presentation on mobile devises (@benjaminwil)
6
+ * Improvement: Add page context to template filter. #1603 (@tevino)
7
+ * Fix: restore normalize check on file upload (@manofstick)
8
+ * Fix mathjax on edit and create pages. #1772 (@fhchl)
9
+ * Fix utf-8 issues: #1721 #1758 #1801 (@basking2, @dometto)
10
+ * Fix an IME rendering issue. #1735 (@yy0931)
11
+ * Fix broken history button when viewing historical deleted file. (@NikitaIvanovV)
12
+ * Fix: non-ascii characters in page names are not rendered correctly in the preview tab of the "Edit" page. #1739 (@yy0931)
13
+ * Fix: anchors and header display on JRuby. #1779
data/README.md CHANGED
@@ -2,23 +2,27 @@ gollum -- A git-based Wiki
2
2
  ====================================
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/gollum.svg)](http://badge.fury.io/rb/gollum)
5
- [![Build Status](https://travis-ci.org/gollum/gollum.svg?branch=master)](https://travis-ci.org/gollum/gollum)
5
+ ![Build Status](https://github.com/gollum/gollum/actions/workflows/test.yaml/badge.svg)
6
6
  [![Open Source Helpers](https://www.codetriage.com/gollum/gollum/badges/users.svg)](https://www.codetriage.com/gollum/gollum)
7
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)
8
+ [![Docker Pulls](https://img.shields.io/docker/pulls/gollumwiki/gollum)](https://hub.docker.com/r/gollumwiki/gollum)
8
9
 
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.
10
+ See the [wiki](https://github.com/gollum/gollum/wiki) for extensive documentation, along with [screenshots](https://github.com/gollum/gollum/wiki/Screenshots) of Gollum's features.
10
11
 
11
12
  ## DESCRIPTION
12
13
 
13
14
  Gollum is a simple wiki system built on top of Git. A Gollum Wiki is simply a git repository of a specific nature:
15
+
14
16
  * A Gollum repository's contents are human-editable text or markup files.
15
17
  * Pages may be organized into directories any way you choose.
16
18
  * Other content can also be included, for example images, PDFs and headers/footers for your pages.
17
19
  * Gollum pages:
18
20
  * May be written in a variety of [markups](#markups).
19
- * Can be edited with your favourite system editor or IDE (changes will be visible after committing) or with the built-in web interface.
21
+ * Can be edited with your favourite editor (changes will be visible after committing) or with the built-in web interface.
20
22
  * Can be displayed in all versions, reverted, etc.
21
- * Gollum strives to be compatible with GitHub wikis (see `--lenient-tag-lookup`)
23
+ * Gollum strives to be [compatible](https://github.com/gollum/gollum/wiki/5.0-release-notes#compatibility-option) with [GitHub](https://docs.github.com/en/communities/documenting-your-project-with-wikis/about-wikis) and [GitLab](https://docs.gitlab.com/ee/user/project/wiki/#create-or-edit-wiki-pages-locally) wikis.
24
+ * Just clone your GitHub/GitLab wiki and view and edit it locally!
25
+
22
26
  * Gollum supports advanced functionality like:
23
27
  * [UML diagrams](https://github.com/gollum/gollum/wiki#plantuml-diagrams)
24
28
  * [BibTeX and Citation support](https://github.com/gollum/gollum/wiki/BibTeX-and-Citations)
@@ -31,41 +35,48 @@ Gollum is a simple wiki system built on top of Git. A Gollum Wiki is simply a gi
31
35
 
32
36
  ### SYSTEM REQUIREMENTS
33
37
 
34
- Gollum runs on Unix-like systems using its [adapter](https://github.com/gollum/rugged_adapter) for [rugged](https://github.com/libgit2/rugged) by default. You can also run Gollum on [JRuby](https://github.com/jruby/jruby) via its [adapter](https://github.com/repotag/gollum-lib_rjgit_adapter) for [RJGit](https://github.com/repotag/rjgit/). On Windows, Gollum runs only on JRuby.
38
+ Gollum runs on Unix-like systems using its default [adapter](https://github.com/gollum/rugged_adapter) for [rugged](https://github.com/libgit2/rugged). You can also run Gollum on [JRuby](https://github.com/jruby/jruby) via its [adapter](https://github.com/repotag/gollum-lib_rjgit_adapter) for [RJGit](https://github.com/repotag/rjgit/). On Windows, Gollum runs only on JRuby.
35
39
 
36
40
  ## INSTALLATION
37
41
 
38
- 1. Ruby is best installed either via [RVM](https://rvm.io/) or a package manager of choice.
39
- 2. Gollum is best installed via RubyGems:
42
+ ### As a Ruby Gem
43
+
44
+ Ruby is best installed either via [RVM](https://rvm.io/) or a package manager of choice. Then simply:
40
45
  ```
41
- [sudo] gem install gollum
46
+ gem install gollum
42
47
  ```
43
48
 
44
49
  Installation examples for individual systems can be seen [here](https://github.com/gollum/gollum/wiki/Installation).
45
50
 
46
51
  To run, simply:
47
52
 
48
- 1. Run: `gollum /path/to/wiki`.
53
+ 1. Run: `gollum /path/to/wiki` where `/path/to/wiki` is an initialized Git repository.
49
54
  2. Open `http://localhost:4567` in your browser.
50
55
 
56
+ ### Via Docker
57
+
58
+ See [here](https://github.com/gollum/gollum/wiki/Gollum-via-Docker) for instructions on how to run Gollum via Docker.
59
+
60
+ ### Misc
61
+
51
62
  See [below](#running-from-source) for information on running Gollum from source, as a Rack app, and more.
52
63
 
53
- ### Markups
64
+ ## MARKUPS
54
65
 
55
66
  Gollum allows using different markup languages on different wiki pages. It presently ships with support for the following markups:
56
67
  * [Markdown](http://daringfireball.net/projects/markdown/syntax) (see [below](#Markdown-flavors) for more information on Markdown flavors)
57
68
  * [RDoc](http://rdoc.sourceforge.net/)
58
69
 
59
70
  You can easily activate support for other markups by installing additional renderers (any that are supported by [github-markup](https://github.com/github/markup)):
60
- * [AsciiDoc](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) -- `[sudo] gem install asciidoctor`
61
- * [Creole](http://www.wikicreole.org/wiki/CheatSheet) -- `[sudo] gem install creole`
62
- * [MediaWiki](http://www.mediawiki.org/wiki/Help:Formatting) -- `[sudo] gem install wikicloth`
63
- * [Org](http://orgmode.org/worg/dev/org-syntax.html) -- `[sudo] gem install org-ruby`
71
+ * [AsciiDoc](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) -- `gem install asciidoctor`
72
+ * [Creole](http://www.wikicreole.org/wiki/CheatSheet) -- `gem install creole`
73
+ * [MediaWiki](http://www.mediawiki.org/wiki/Help:Formatting) -- `gem install wikicloth`
74
+ * [Org](http://orgmode.org/worg/dev/org-syntax.html) -- `gem install org-ruby`
64
75
  * [Pod](http://perldoc.perl.org/perlpod.html) -- requires Perl >= 5.10 (the `perl` command must be available on your command line)
65
76
  * Lower versions should install `Pod::Simple` from CPAN.
66
- * [ReStructuredText](http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html) -- requires python >= 2 (the `python2` command must be available on your command line)
67
- * Note that Gollum will also need you to install `docutils` for your Python 2.
68
- * [Textile](http://redcloth.org/hobix.com/textile/quick.html) -- `[sudo] gem install RedCloth`
77
+ * [ReStructuredText](http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html) -- requires python >= 3
78
+ * Note that Gollum will also need you to install `docutils` for python
79
+ * [Textile](http://redcloth.org/hobix.com/textile/quick.html) -- `gem install RedCloth`
69
80
 
70
81
  ### Markdown flavors
71
82
 
@@ -83,19 +94,15 @@ See [here](https://github.com/gollum/gollum/wiki/Custom-rendering-gems) for inst
83
94
 
84
95
  ### Rack
85
96
 
86
- Gollum can also be ran with any [rack-compatible web server](https://github.com/rack/rack#supported-web-servers). More on that [over here](https://github.com/gollum/gollum/wiki/Gollum-via-Rack).
97
+ Gollum can also be run with any [rack-compatible web server](https://github.com/rack/rack#supported-web-servers). More on that [over here](https://github.com/gollum/gollum/wiki/Gollum-via-Rack).
87
98
 
88
99
  ### Rack, with an authentication server
89
100
 
90
- Gollum can also be ran alongside a CAS (Central Authentication Service) SSO (single sign-on) server. With a bit of tweaking, this adds basic user-support to Gollum. To see an example and an explanation, navigate [over here](https://github.com/gollum/gollum/wiki/Gollum-via-Rack-and-CAS-SSO).
91
-
92
- ### Docker
93
-
94
- Gollum can also be ran via [Docker](https://www.docker.com/). More on that [over here](https://github.com/gollum/gollum/wiki/Gollum-via-Docker).
101
+ Gollum can also be run alongside a CAS (Central Authentication Service) SSO (single sign-on) server. With a bit of tweaking, this adds basic user-support to Gollum. To see an example and an explanation, navigate [over here](https://github.com/gollum/gollum/wiki/Gollum-via-Rack-and-CAS-SSO).
95
102
 
96
103
  ### Service
97
104
 
98
- Gollum can also be ran as a service. More on that [over here](https://github.com/gollum/gollum/wiki/Gollum-as-a-service).
105
+ Gollum can also be run as a service. More on that [over here](https://github.com/gollum/gollum/wiki/Gollum-as-a-service).
99
106
 
100
107
  ## CONFIGURATION
101
108
 
@@ -105,7 +112,7 @@ Gollum comes with the following command line options:
105
112
  | ----------------- | --------- | ----------- |
106
113
  | --host | [HOST] | Specify the hostname or IP address to listen on. Default: '0.0.0.0'.<sup>1</sup> |
107
114
  | --port | [PORT] | Specify the port to bind Gollum with. Default: `4567`. |
108
- | --config | [FILE] | Specify path to Gollum's configuration file. |
115
+ | --config | [FILE] | Specify path to Gollum's [configuration file](#Config-file). |
109
116
  | --ref | [REF] | Specify the git branch to serve. Default: `master`. |
110
117
  | --bare | none | Tell Gollum that the git repository should be treated as bare. |
111
118
  | --adapter | [ADAPTER] | Launch Gollum using a specific git adapter. Default: `rugged`.<sup>2</sup> |
@@ -116,6 +123,7 @@ Gollum comes with the following command line options:
116
123
  | --css | none | Tell Gollum to inject custom CSS into each page. Uses `custom.css` from wiki root.<sup>3</sup> |
117
124
  | --js | none | Tell Gollum to inject custom JS into each page. Uses `custom.js` from wiki root.<sup>3</sup> |
118
125
  | --no-edit | none | Disable the feature of editing pages. |
126
+ | --local-time | none | Use the browser's local timezone instead of the server's for displaying dates. Default: false.
119
127
  | --follow-renames, --no-follow-renames | none | Follow pages across renames in the History view. Default: true.
120
128
  | --allow-uploads | [MODE] | Enable file uploads. If set to `dir`, Gollum will store all uploads in the `/uploads/` directory in repository root. If set to `page`, Gollum will store each upload at the currently edited page.<sup>4</sup> |
121
129
  | --mathjax | none | Enables MathJax (renders mathematical equations). By default, uses the `TeX-AMS-MML_HTMLorMML` config with the `autoload-all` extension.<sup>5</sup> |
@@ -125,7 +133,7 @@ Gollum comes with the following command line options:
125
133
  | --no-display-metadata | none | Do not render metadata tables in pages. |
126
134
  | --user-icons | [MODE] | Tell Gollum to use specific user icons for history view. Can be set to `gravatar`, `identicon` or `none`. Default: `none`. |
127
135
  | --mathjax-config | [FILE] | Specify path to a custom MathJax configuration. If not specified, uses the `mathjax.config.js` file from repository root. |
128
- | --template-dir | [PATH] | Specify custom mustache template directory. |
136
+ | --template-dir | [PATH] | Specify custom mustache template directory. Only overrides templates that exist in this directory. |
129
137
  | --template-page | none | Use _Template in root as a template for new pages. Must be committed. |
130
138
  | --emoji | none | Parse and interpret emoji tags (e.g. `:heart:`) except when the leading colon is backslashed (e.g. `\:heart:`). |
131
139
  | --lenient-tag-lookup | none | 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. |
@@ -149,3 +157,7 @@ When `--config` option is used, certain inner parts of Gollum can be customized.
149
157
  ## CONTRIBUTING
150
158
 
151
159
  Please consider helping out! See [CONTRIBUTING](CONTRIBUTING.md) for information on how to submit issues, and how to start hacking on gollum.
160
+
161
+ ## THANKS TO
162
+
163
+ [![Testing Powered By SauceLabs](https://opensource.saucelabs.com/images/opensauce/powered-by-saucelabs-badge-gray.png?sanitize=true "Testing Powered By SauceLabs")](https://saucelabs.com)
data/Rakefile CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
3
  require 'date'
4
+ require 'tempfile'
4
5
 
5
6
  #############################################################################
6
7
  #
@@ -8,6 +9,10 @@ require 'date'
8
9
  #
9
10
  #############################################################################
10
11
 
12
+ def date
13
+ Time.now.strftime("%Y-%m-%d")
14
+ end
15
+
11
16
  def name
12
17
  @name ||= Dir['*.gemspec'].first.split('.').first
13
18
  end
@@ -17,6 +22,14 @@ def version
17
22
  line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
18
23
  end
19
24
 
25
+ def latest_changes_file
26
+ 'LATEST_CHANGES.md'
27
+ end
28
+
29
+ def history_file
30
+ 'HISTORY.md'
31
+ end
32
+
20
33
  # assumes x.y.z all digit version
21
34
  def next_version
22
35
  # x.y.z
@@ -38,14 +51,6 @@ def bump_version
38
51
  new_version
39
52
  end
40
53
 
41
- def date
42
- Date.today.to_s
43
- end
44
-
45
- def rubyforge_project
46
- name
47
- end
48
-
49
54
  def gemspec_file
50
55
  "#{name}.gemspec"
51
56
  end
@@ -114,6 +119,7 @@ task :release => :build do
114
119
  puts "You must be on the master branch to release!"
115
120
  exit!
116
121
  end
122
+ Rake::Task[:changelog].execute
117
123
  sh "git commit --allow-empty -a -m 'Release #{version}'"
118
124
  sh "git pull --rebase origin master"
119
125
  sh "git tag v#{version}"
@@ -143,12 +149,9 @@ task :gemspec => :validate do
143
149
  spec = File.read(gemspec_file)
144
150
  head, manifest, tail = spec.split(" # = MANIFEST =\n")
145
151
 
146
- # replace name version and date
152
+ # replace name and version
147
153
  replace_header(head, :name)
148
154
  replace_header(head, :version)
149
- replace_header(head, :date)
150
- #comment this out if your rubyforge_project has a different name
151
- replace_header(head, :rubyforge_project)
152
155
 
153
156
  # determine file list from git ls-files
154
157
  files = `git ls-files`.
@@ -179,6 +182,46 @@ task :validate do
179
182
  end
180
183
  end
181
184
 
185
+ desc 'Build changlog'
186
+ task :changelog do
187
+ [latest_changes_file, history_file].each do |f|
188
+ unless File.exists?(f)
189
+ puts "#{f} does not exist but is required to build a new release."
190
+ exit!
191
+ end
192
+ end
193
+
194
+ latest_changes = File.open(latest_changes_file)
195
+ version_pattern = "# #{version}"
196
+
197
+ if !`grep "#{version_pattern}" #{history_file}`.empty?
198
+ puts "#{version} is already described in #{history_file}"
199
+ exit!
200
+ end
201
+
202
+ begin
203
+ unless latest_changes.readline.chomp! =~ %r{#{version_pattern}}
204
+ puts "#{latest_changes_file} should begin with '#{version_pattern}'"
205
+ exit!
206
+ end
207
+ rescue EOFError
208
+ puts "#{latest_changes_file} is empty!"
209
+ exit!
210
+ end
211
+
212
+ body = latest_changes.read
213
+ body.scan(/\s*#\s+\d\.\d.*/) do |match|
214
+ puts "#{latest_changes_file} may not contain multiple markdown headers!"
215
+ exit!
216
+ end
217
+
218
+ temp = Tempfile.new
219
+ temp.puts("#{version_pattern} / #{date}\n#{body}\n")
220
+ temp.close
221
+ `cat #{history_file} >> #{temp.path}`
222
+ `cat #{temp.path} > #{history_file}`
223
+ end
224
+
182
225
  desc 'Precompile assets'
183
226
  task :precompile do
184
227
  require './lib/gollum/app.rb'
data/bin/gollum CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env -S ruby -Eutf-8
2
2
 
3
3
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
4
 
@@ -112,6 +112,9 @@ MSG
112
112
  opts.on('--no-edit', 'Disable the feature of editing pages.') do
113
113
  wiki_options[:allow_editing] = false
114
114
  end
115
+ opts.on('--local-time', "Use the browser's local timezone instead of the server's for displaying dates.") do
116
+ wiki_options[:show_local_time] = true
117
+ end
115
118
  opts.on('--follow-renames', 'Follow pages across renames in the History view. Default: true.') do
116
119
  wiki_options[:follow_renames] = true
117
120
  end
@@ -149,7 +152,7 @@ MSG
149
152
  'Can be set to \'gravatar\' or \'identicon\'. Default: standard avatar.') do |mode|
150
153
  wiki_options[:user_icons] = mode.to_s
151
154
  end
152
- opts.on('--template-dir [PATH]', 'Specify custom mustache template directory.') do |path|
155
+ opts.on('--template-dir [PATH]', 'Specify custom mustache template directory. Only overrides templates that exist in this directory.') do |path|
153
156
  wiki_options[:template_dir] = path
154
157
  end
155
158
  opts.on('--template-page', 'Use _Template.{ext} as a template for new pages.') do
@@ -206,7 +209,7 @@ begin
206
209
  rescue OptionParser::InvalidOption => e
207
210
  puts "gollum: #{e.message}"
208
211
  puts 'gollum: try \'gollum --help\' for more information'
209
- exit
212
+ exit 1
210
213
  end
211
214
 
212
215
  # --gollum-path wins over ARGV[0]
@@ -271,7 +274,6 @@ else
271
274
  Precious::App.set(:environment, ENV.fetch('RACK_ENV', :production).to_sym)
272
275
  Precious::App.set(:gollum_path, gollum_path)
273
276
  Precious::App.set(:wiki_options, wiki_options)
274
- Precious::App.settings.mustache[:templates] = wiki_options[:template_dir] if wiki_options[:template_dir]
275
277
 
276
278
  if cfg = options[:config]
277
279
  # If the path begins with a '/' it will be considered an absolute path,
@@ -11,8 +11,11 @@ migrate_options = {
11
11
  :hyphenate => true
12
12
  }
13
13
 
14
- def setting(const)
15
- Object.const_defined?(const.upcase) && Object.const_get(const.upcase)
14
+ def setting(variable_name)
15
+ class_variable_name = :"@@#{variable_name.to_s}"
16
+
17
+ Object.class_variable_defined?(class_variable_name) &&
18
+ Object.class_variable_get(class_variable_name)
16
19
  end
17
20
 
18
21
  opts = OptionParser.new do |opts|
@@ -25,7 +28,7 @@ It finds and repairs Gollum link tags that no longer work under 5.x for three re
25
28
  * 5.x wiki internal links are no longer 'global'.
26
29
 
27
30
  * NB: you can use the --lenient-tag-lookup option in gollum >= 5.x to enable 4.x-backwards compatible tags.
28
-
31
+
29
32
  See https://github.com/gollum/gollum/wiki/5.0-release-notes#filename-handling for more information.
30
33
  Usage of this script comes without any warranty.
31
34
 
@@ -38,7 +41,7 @@ You can use the --page-file-dir and --config options as you would normally with
38
41
  Requires a non-bare repository. Recommended usage:
39
42
 
40
43
  1. Clone your wiki's repository to create a backup.
41
- 2. Run this script on your cloned repo.
44
+ 2. Run this script on your cloned repo.
42
45
  3. If all looks sane, run the script with the --write option. This will overwrite files in your working directory, but not commit the changes, so you have time to review them.
43
46
  4. Do a 'git diff' to inspect the changes.
44
47
  5. Commit the changes if all looks sane, and push/pull them back into your original repo.
@@ -52,23 +55,23 @@ EOF
52
55
  opts.on('--page-file-dir [PATH]', 'Specify the subdirectory for all pages. Default: repository root.') do |path|
53
56
  wiki_options[:page_file_dir] = path
54
57
  end
55
-
58
+
56
59
  opts.on('--prefer-relative-links', 'When specified, will try to replace broken links with relative links (\'[[Foo/Bar]]\' instead of \'[[/Subdir/Foo/Bar]]\') where possible.') do
57
60
  migrate_options[:prefer_relative] = true
58
61
  end
59
-
62
+
60
63
  opts.on('--hyphenate', 'Default. Repair links that use spaces instead of hyphens: [[Bilbo Baggins]] -> [[Bilbo-Baggins]]') do
61
64
  migrate_options[:hyphenate] = true
62
65
  end
63
-
66
+
64
67
  opts.on('--no-hyphenate', 'Turn off the --hyphenate option.') do
65
68
  migrate_options[:hyphenate] = false
66
69
  end
67
-
70
+
68
71
  opts.on('--run-silent', 'Don\'t output anything.') do
69
72
  migrate_options[:run_silent] = true
70
73
  end
71
-
74
+
72
75
  opts.on('--write', 'No dry run: actually perform the substitutions.') do
73
76
  migrate_options[:no_dry_run] = true
74
77
  end
@@ -78,8 +81,11 @@ end
78
81
  begin
79
82
  opts.parse!
80
83
  migrate_options.each do |setting, value|
81
- const = setting.to_s.upcase
82
- Object.const_set(const, value) unless Object.const_defined?(const)
84
+ variable_name = :"@@#{setting.to_s}"
85
+
86
+ unless Object.class_variable_defined?(variable_name)
87
+ Object.class_variable_set(variable_name, value)
88
+ end
83
89
  end
84
90
  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.
85
91
  rescue OptionParser::InvalidOption
@@ -88,7 +94,7 @@ rescue OptionParser::InvalidOption
88
94
  exit
89
95
  end
90
96
 
91
- REPO = ARGV[0] || Dir.pwd
97
+ wiki_directory = ARGV[0] || Dir.pwd
92
98
 
93
99
  require 'gollum-lib'
94
100
 
@@ -98,7 +104,7 @@ if cfg = options[:config]
98
104
  cfg = File.join(Dir.getwd, cfg) unless cfg.slice(0) == File::SEPARATOR
99
105
  require cfg
100
106
  end
101
-
107
+
102
108
  class Gollum::Filter::CodeMigrator < Gollum::Filter::Code
103
109
  def extract(data)
104
110
  case @markup.format
@@ -126,7 +132,7 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code
126
132
  next '' if m_end.length < m_start.length
127
133
  lang = m_lang ? m_lang.strip.split.first : nil
128
134
  cache_codeblock($~.to_s)
129
- end
135
+ end
130
136
  end
131
137
 
132
138
  data.gsub!(/^([ ]{0,3})``` ?([^\r\n]+)?\r?\n(.+?)\r?\n[ ]{0,3}```[ \t]*\r?$/m) do
@@ -134,7 +140,7 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code
134
140
  end
135
141
  data
136
142
  end
137
-
143
+
138
144
  def process(data)
139
145
  return data if data.nil? || data.size.zero? || @map.size.zero?
140
146
  @map.each do |id, block| ## Just put the code blocks back in verbatim
@@ -142,23 +148,23 @@ class Gollum::Filter::CodeMigrator < Gollum::Filter::Code
142
148
  end
143
149
  data
144
150
  end
145
-
151
+
146
152
  def cache_codeblock(block)
147
153
  id = "#{open_pattern}#{Digest::SHA1.hexdigest(block)}#{close_pattern}"
148
154
  @map[id] = block
149
155
  id
150
156
  end
151
157
  end
152
-
158
+
153
159
  class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags
154
160
  def process_tag(tag)
155
161
  link_part, extra = parse_tag_parts(tag)
156
162
  orig_tag = %{[[#{tag}]]}
157
163
  return orig_tag if link_part.nil?
158
-
164
+
159
165
  img_args = extra ? [extra, link_part] : [link_part]
160
166
  mime = MIME::Types.type_for(::File.extname(img_args.first.to_s)).first
161
-
167
+
162
168
  # For any kind of tag other than an internal link: just return the tag.
163
169
  if tag =~ /^_TOC_/ || link_part =~ /^_$/ || link_part =~ /^#{INCLUDE_TAG}/ || (mime && mime.content_type =~ /^image/) || process_external_link_tag(link_part, extra) || process_file_link_tag(link_part, extra)
164
170
  return orig_tag
@@ -168,7 +174,7 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags
168
174
  link = link_part
169
175
  page = find_page_or_file_from_path(link)
170
176
  anchor = nil
171
-
177
+
172
178
  if page.nil? # No match yet, now try finding the page with anchor removed
173
179
  if pos = link.rindex('#')
174
180
  anchor = link[pos..-1]
@@ -203,12 +209,12 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags
203
209
  pick = possibles.first
204
210
  return tag_for_pick(pick, orig_tag, extra, anchor, @markup.page.path)
205
211
  end
206
-
212
+
207
213
  end
208
214
  end
209
-
215
+
210
216
  private
211
-
217
+
212
218
  def tag_for_pick(pick, orig_tag, extra, anchor, linking_page_path)
213
219
  pick = if setting(:prefer_relative)
214
220
  overlapping_path = Pathname.new(linking_page_path).dirname.to_s
@@ -220,7 +226,7 @@ class ::Gollum::Filter::TagMigrator < Gollum::Filter::Tags
220
226
  end
221
227
  new_tag = extra.nil? ? %{[[#{pick}#{anchor}]]} : %{[[#{extra}|#{pick}#{anchor}]]}
222
228
  log(:info, "#{@markup.page.path}: Changing #{orig_tag} -> #{new_tag}")
223
- new_tag
229
+ new_tag
224
230
  end
225
231
  end
226
232
 
@@ -232,8 +238,12 @@ end
232
238
 
233
239
  filter_chain = [:PlainTextMigrator, :CodeMigrator, :TagMigrator]
234
240
 
235
- wiki = ::Gollum::Wiki.new(REPO, wiki_options.merge({:filter_chain => filter_chain}))
236
- TREE = wiki.tree_list(wiki.ref, true, true).map {|file| ::File.join('/', file.path)}
241
+ wiki = ::Gollum::Wiki.new(wiki_directory, wiki_options.merge({:filter_chain => filter_chain}))
242
+
243
+ Object.class_variable_set(
244
+ :"@@wiki_tree",
245
+ wiki.tree_list(wiki.ref, true, true).map {|file| ::File.join('/', file.path)}
246
+ )
237
247
 
238
248
  def find_linked(link)
239
249
  link.gsub!(' ', '-') if setting(:hyphenate) # Match paths containing dashes instead of spaces
@@ -243,7 +253,9 @@ def find_linked(link)
243
253
  test_path = ::File.extname(link).empty? ? /#{link}\..+/ : link
244
254
  # Select pages from the wiki whose path =~ 'Foo/Bar/Samwi.*'
245
255
  # Match case-insenstively to mimic 4.x behavior!
246
- TREE.select {|path| path =~ /^\/(.*\/)?#{test_path}/i}
256
+ Object.class_variable_get(:"@@wiki_tree").select { |path|
257
+ path =~ /^\/(.*\/)?#{test_path}/i
258
+ }
247
259
  end
248
260
 
249
261
  def log(kind, msg = nil)
@@ -268,4 +280,4 @@ wiki.pages.each do |page|
268
280
  f.close
269
281
  end
270
282
  log(:none, '====')
271
- end
283
+ end
data/docker-run.sh ADDED
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ # Initialize the wiki
4
+ if [ ! -d .git ]; then
5
+ git init
6
+ fi
7
+
8
+ # Set git user.name and user.email
9
+ if [ ${GOLLUM_AUTHOR_USERNAME:+1} ]; then
10
+ git config user.name "${GOLLUM_AUTHOR_USERNAME}"
11
+ fi
12
+ if [ ${GOLLUM_AUTHOR_EMAIL:+1} ]; then
13
+ git config user.email "${GOLLUM_AUTHOR_EMAIL}"
14
+ fi
15
+
16
+ # Start gollum service
17
+ [[ "$@" != *--mathjax* ]] && echo "WARNING: Mathjax will soon be disabled by default. To explicitly enable it, use --mathjax" >&2
18
+ exec gollum $@ --mathjax