diff --git a/lib/gollum/app.rb b/lib/gollum/app.rb index 645d0b91..257f4445 100644 --- a/lib/gollum/app.rb +++ b/lib/gollum/app.rb @@ -440,23 +440,18 @@ module Precious mustache :page end + get %r{ + /history/ # match any URL beginning with /history/ + (.+?) # extract the full path (including any directories) + / + ([0-9a-f]{40}) # match SHA + }x do |path, version| + wiki = wiki_new + show_history wiki_page(path, wiki.commit_for(version), wiki) + end + get '/history/*' do - wikip = wiki_page(params[:splat].first) - @name = wikip.fullname - @page = wikip.page - @page_num = [params[:page_num].to_i, 1].max - @max_count = settings.wiki_options.fetch(:pagination_count, 10) - unless @page.nil? - @wiki = @page.wiki - @versions = @page.versions( - per_page: @max_count, - page_num: @page_num, - follow: settings.wiki_options.fetch(:follow_renames, true) - ) - mustache :history - else - redirect to("/") - end + show_history wiki_page(params[:splat].first) end get '/latest_changes' do @@ -603,6 +598,24 @@ module Precious private + def show_history(wikip) + @name = wikip.fullname + @page = wikip.page + @page_num = [params[:page_num].to_i, 1].max + @max_count = settings.wiki_options.fetch(:pagination_count, 10) + unless @page.nil? + @wiki = @page.wiki + @versions = @page.versions( + per_page: @max_count, + page_num: @page_num, + follow: settings.wiki_options.fetch(:follow_renames, true) + ) + mustache :history + else + redirect to("/") + end + end + def show_page_or_file(fullpath) wiki = wiki_new if page = wiki.page(fullpath) @@ -659,9 +672,9 @@ module Precious wiki.update_page(page, name, format, content.to_s, commit) end - def wiki_page(path, version = nil) + def wiki_page(path, version = nil, wiki = nil) pathname = (Pathname.new('/') + path).cleanpath - wiki = wiki_new + wiki = wiki_new if wiki.nil? OpenStruct.new(:wiki => wiki, :page => wiki.page(pathname.to_s, version = version), :name => pathname.basename.sub_ext('').to_s, :path => pathname.dirname.to_s, :ext => pathname.extname, :fullname => pathname.basename.to_s, :fullpath => pathname.to_s) end diff --git a/lib/gollum/templates/navbar.mustache b/lib/gollum/templates/navbar.mustache index 5938590e..07b47d71 100644 --- a/lib/gollum/templates/navbar.mustache +++ b/lib/gollum/templates/navbar.mustache @@ -52,7 +52,7 @@ {{#history}} History diff --git a/lib/gollum/views/page.rb b/lib/gollum/views/page.rb index cc653021..3a9845fe 100644 --- a/lib/gollum/views/page.rb +++ b/lib/gollum/views/page.rb @@ -4,8 +4,8 @@ module Precious include HasPage include HasMath - attr_reader :content, :page, :header, :footer, :preview, :historical - + attr_reader :content, :page, :header, :footer, :preview, :historical, :version + VALID_COUNTER_STYLES = ['decimal', 'decimal-leading-zero', 'arabic-indic', 'armenian', 'upper-armenian', 'lower-armenian', 'bengali', 'cambodian', 'khmer', 'cjk-decimal', 'devanagari', 'georgian', 'gujarati', 'gurmukhi', 'hebrew', 'kannada', 'lao', 'malayalam', 'mongolian', 'myanmar', 'oriya', 'persian', 'lower-roman', 'upper-roman', diff --git a/test/examples/revert.git/index b/test/examples/revert.git/index index 7913b433..3d987f88 100644 Binary files a/test/examples/revert.git/index and b/test/examples/revert.git/index differ diff --git a/test/examples/revert.git/logs/HEAD b/test/examples/revert.git/logs/HEAD index 62fed8fc..a0656443 100644 --- a/test/examples/revert.git/logs/HEAD +++ b/test/examples/revert.git/logs/HEAD @@ -3,3 +3,5 @@ f403b791119f8232b7cb0ba455c624ac6435f433 ed6c9f63b98acf73c25b5ffbb38da557d3682023 bootstraponline 1336421777 -0600 commit: Add header. ed6c9f63b98acf73c25b5ffbb38da557d3682023 084a558a1fb3cded23129e2dfad3a17d07d73fd3 Daniel Kimsey 1354899095 -0500 push 084a558a1fb3cded23129e2dfad3a17d07d73fd3 02796b1450691f90db5d6dc6a816a4980ce80d07 Dawa Ometto 1538516954 +0200 push +02796b1450691f90db5d6dc6a816a4980ce80d07 db8b297cf5a31b46ac24500edfdbd0d3d8eed4eb Nikita Ivanov 1640368693 +0500 commit: Created C (markdown) +db8b297cf5a31b46ac24500edfdbd0d3d8eed4eb c736e410f98df7a1173a540364dbb8a18274273e Nikita Ivanov 1640368721 +0500 commit: Deleted C.md diff --git a/test/examples/revert.git/logs/refs/heads/master b/test/examples/revert.git/logs/refs/heads/master index 62fed8fc..a0656443 100644 --- a/test/examples/revert.git/logs/refs/heads/master +++ b/test/examples/revert.git/logs/refs/heads/master @@ -3,3 +3,5 @@ f403b791119f8232b7cb0ba455c624ac6435f433 ed6c9f63b98acf73c25b5ffbb38da557d3682023 bootstraponline 1336421777 -0600 commit: Add header. ed6c9f63b98acf73c25b5ffbb38da557d3682023 084a558a1fb3cded23129e2dfad3a17d07d73fd3 Daniel Kimsey 1354899095 -0500 push 084a558a1fb3cded23129e2dfad3a17d07d73fd3 02796b1450691f90db5d6dc6a816a4980ce80d07 Dawa Ometto 1538516954 +0200 push +02796b1450691f90db5d6dc6a816a4980ce80d07 db8b297cf5a31b46ac24500edfdbd0d3d8eed4eb Nikita Ivanov 1640368693 +0500 commit: Created C (markdown) +db8b297cf5a31b46ac24500edfdbd0d3d8eed4eb c736e410f98df7a1173a540364dbb8a18274273e Nikita Ivanov 1640368721 +0500 commit: Deleted C.md diff --git a/test/examples/revert.git/objects/2a/857891e18b65a0d41e09a51c61e7a8a00673b9 b/test/examples/revert.git/objects/2a/857891e18b65a0d41e09a51c61e7a8a00673b9 new file mode 100644 index 00000000..8d33a2df Binary files /dev/null and b/test/examples/revert.git/objects/2a/857891e18b65a0d41e09a51c61e7a8a00673b9 differ diff --git a/test/examples/revert.git/objects/43/ee8b003d9f7cf7b5ce6a5ac1f12cdaae6ee93c b/test/examples/revert.git/objects/43/ee8b003d9f7cf7b5ce6a5ac1f12cdaae6ee93c new file mode 100644 index 00000000..b2fc05b5 Binary files /dev/null and b/test/examples/revert.git/objects/43/ee8b003d9f7cf7b5ce6a5ac1f12cdaae6ee93c differ diff --git a/test/examples/revert.git/objects/c7/36e410f98df7a1173a540364dbb8a18274273e b/test/examples/revert.git/objects/c7/36e410f98df7a1173a540364dbb8a18274273e new file mode 100644 index 00000000..de962b65 --- /dev/null +++ b/test/examples/revert.git/objects/c7/36e410f98df7a1173a540364dbb8a18274273e @@ -0,0 +1,6 @@ +xK +0@]ʤ4A7n$3AJoo +.[<^K:ɸbYI'Rh8 hS4SE +|>&KZ(v" +'ًлȕ4p~خct/m3;{ܲf*< +ù-Q \ No newline at end of file diff --git a/test/examples/revert.git/objects/db/8b297cf5a31b46ac24500edfdbd0d3d8eed4eb b/test/examples/revert.git/objects/db/8b297cf5a31b46ac24500edfdbd0d3d8eed4eb new file mode 100644 index 00000000..eae8b9dc Binary files /dev/null and b/test/examples/revert.git/objects/db/8b297cf5a31b46ac24500edfdbd0d3d8eed4eb differ diff --git a/test/examples/revert.git/refs/heads/master b/test/examples/revert.git/refs/heads/master index 56d1ca4a..47e4a670 100644 --- a/test/examples/revert.git/refs/heads/master +++ b/test/examples/revert.git/refs/heads/master @@ -1 +1 @@ -02796b1450691f90db5d6dc6a816a4980ce80d07 +c736e410f98df7a1173a540364dbb8a18274273e diff --git a/test/test_app.rb b/test/test_app.rb index 0fd44f8b..332c755a 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -171,7 +171,7 @@ EOF assert_equal 'sidebar', side_2.raw_data assert_equal 'def', side_2.version.message assert_not_equal side_1.version.sha, side_2.version.sha - assert_equal commits+1, @wiki.repo.commits('master').size + assert_equal commits, @wiki.repo.commits('master').size end test "renames page" do @@ -668,6 +668,13 @@ EOF assert_equal last_response.status, 302 end + test "view deleted page in history" do + get 'C/db8b297cf5a31b46ac24500edfdbd0d3d8eed4eb' + + assert last_response.ok? + assert_match /This page will be deleted in the next commit :\(/, last_response.body + end + def app Precious::App end