From 6926746624aa5717559bf7dc27fb32c2935ef62a Mon Sep 17 00:00:00 2001 From: Arran Cudbard-Bell Date: Tue, 31 May 2011 18:29:09 -0700 Subject: [PATCH] Do not re-canonicalize names referring to existing page files when updating format extensions --- lib/gollum/committer.rb | 5 +++-- lib/gollum/page.rb | 20 ++++++++++++++++++-- lib/gollum/wiki.rb | 34 +++++++++++++++++++--------------- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index 002a9531..f100685c 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -73,7 +73,7 @@ module Gollum # # dir - The String subdirectory of the Gollum::Page without any # prefix or suffix slashes (e.g. "foo/bar"). - # name - The String Gollum::Page name. + # name - The String Gollum::Page filename_stripped. # format - The Symbol Gollum::Page format. # data - The String wiki data to store in the tree map. # allow_same_ext - A Boolean determining if the tree map allows the same @@ -111,7 +111,8 @@ module Gollum # is a working directory present. # # dir - The String directory in which the file lives. - # name - The String name of the page (may be in human format). + # name - The String name of the page or the stripped filename + # (should be pre-canonicalized if required). # format - The Symbol format of the page. # # Returns nothing. diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 22bf778f..365c3c54 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -76,11 +76,20 @@ module Gollum end # Reusable filter to turn a filename (without path) into a canonical name. - # Strips extension, converts spaces to dashes. + # Strips extension, converts dashes to spaces. # # Returns the filtered String. def self.canonicalize_filename(filename) - filename.split('.')[0..-2].join('.').gsub('-', ' ') + strip_filename(filename).gsub('-', ' ') + end + + # Reusable filter to strip extension and path from filename + # + # filename - The string path or filename to strip + # + # Returns the stripped String. + def self.strip_filename(filename) + ::File.basename(filename, ::File.extname(filename)) end # Public: Initialize a page. @@ -100,6 +109,13 @@ module Gollum @blob && @blob.name end + # Public: The on-disk filename of the page with extension stripped. + # + # Returns the String name. + def filename_stripped + self.class.strip_filename(filename) + end + # Public: The canonical page name without extension, and dashes converted # to spaces. # diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index cef50981..7c61f024 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -222,12 +222,14 @@ module Gollum else Committer.new(self, commit) end - - committer.add_to_index('', name, format, data) + + filename = Gollum::Page.cname(name) + + committer.add_to_index('', filename, format, data) committer.after_commit do |index, sha| @access.refresh - index.update_working_dir('', name, format) + index.update_working_dir('', filename, format) end multi_commit ? committer : committer.commit @@ -259,7 +261,10 @@ module Gollum name ||= page.name format ||= page.format dir = ::File.dirname(page.path) - dir = '' if dir == '.' + dir = '' if dir == '.' + filename = (rename = page.name != name) ? + Gollum::Page.cname(name) : page.filename_stripped + multi_commit = false committer = if obj = commit[:committer] @@ -268,18 +273,18 @@ module Gollum else Committer.new(self, commit) end - - if page.name == name && page.format == format + + if !rename && page.format == format committer.add(page.path, normalize(data)) else committer.delete(page.path) - committer.add_to_index(dir, name, format, data, :allow_same_ext) + committer.add_to_index(dir, filename, format, data, :allow_same_ext) end - + committer.after_commit do |index, sha| @access.refresh - index.update_working_dir(dir, page.name, page.format) - index.update_working_dir(dir, name, format) + index.update_working_dir(dir, page.filename_stripped, page.format) + index.update_working_dir(dir, filename, format) end multi_commit ? committer : committer.commit @@ -318,7 +323,7 @@ module Gollum dir = '' if dir == '.' @access.refresh - index.update_working_dir(dir, page.name, page.format) + index.update_working_dir(dir, page.filename_stripped, page.format) end multi_commit ? committer : committer.commit @@ -356,7 +361,7 @@ module Gollum files = [] if page - files << [page.path, page.name, page.format] + files << [page.path, page.filename_stripped, page.format] else # Grit::Diff can't parse reverse diffs.... yet patch.each_line do |line| @@ -516,13 +521,12 @@ module Gollum # Assemble a Page's filename from its name and format. # - # name - The String name of the page (may be in human format). + # name - The String name of the page (should be pre-canonicalized). # format - The Symbol format of the page. # # Returns the String filename. def page_file_name(name, format) - ext = @page_class.format_to_ext(format) - @page_class.cname(name) + '.' + ext + name + '.' + @page_class.format_to_ext(format) end # Fill an array with a list of pages.