merge latest tweaks to master
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
coverage
|
coverage
|
||||||
pkg
|
pkg
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.bundle
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
PATH
|
||||||
|
remote: .
|
||||||
|
specs:
|
||||||
|
gollum (1.1.0)
|
||||||
|
albino (~> 1.0)
|
||||||
|
github-markup (>= 0.4.0, < 1.0.0)
|
||||||
|
grit (~> 2.3)
|
||||||
|
mustache (>= 0.11.2, < 1.0.0)
|
||||||
|
nokogiri (~> 1.4)
|
||||||
|
sanitize (~> 1.1)
|
||||||
|
sinatra (~> 1.0)
|
||||||
|
|
||||||
|
GEM
|
||||||
|
remote: http://rubygems.org/
|
||||||
|
specs:
|
||||||
|
RedCloth (4.2.3)
|
||||||
|
albino (1.0)
|
||||||
|
diff-lcs (1.1.2)
|
||||||
|
github-markup (0.5.0)
|
||||||
|
grit (2.3.0)
|
||||||
|
diff-lcs (~> 1.1)
|
||||||
|
mime-types (~> 1.15)
|
||||||
|
mime-types (1.16)
|
||||||
|
mocha (0.9.9)
|
||||||
|
rake
|
||||||
|
mustache (0.11.2)
|
||||||
|
nokogiri (1.4.3.1)
|
||||||
|
org-ruby (0.5.3)
|
||||||
|
rubypants (>= 0.2.0)
|
||||||
|
rack (1.2.1)
|
||||||
|
rake (0.8.7)
|
||||||
|
rdiscount (1.6.5)
|
||||||
|
rubypants (0.2.0)
|
||||||
|
sanitize (1.2.1)
|
||||||
|
nokogiri (~> 1.4.1)
|
||||||
|
shoulda (2.11.3)
|
||||||
|
sinatra (1.1.0)
|
||||||
|
rack (~> 1.1)
|
||||||
|
tilt (~> 1.1)
|
||||||
|
tilt (1.1)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
RedCloth
|
||||||
|
albino (~> 1.0)
|
||||||
|
github-markup (>= 0.4.0, < 1.0.0)
|
||||||
|
gollum!
|
||||||
|
grit (~> 2.3)
|
||||||
|
mocha
|
||||||
|
mustache (>= 0.11.2, < 1.0.0)
|
||||||
|
nokogiri (~> 1.4)
|
||||||
|
org-ruby
|
||||||
|
rdiscount
|
||||||
|
sanitize (~> 1.1)
|
||||||
|
shoulda
|
||||||
|
sinatra (~> 1.0)
|
||||||
+10
@@ -1,5 +1,15 @@
|
|||||||
# HEAD
|
# HEAD
|
||||||
|
|
||||||
|
* Minor Enhancements
|
||||||
|
* Add `:sanitization` and `:history_sanitization` options for customizing
|
||||||
|
how `Sanitize.clean` modifies formatted wiki content.
|
||||||
|
* Add `--config` option for the command line, to specify a ruby file that is
|
||||||
|
run during startup.
|
||||||
|
* Bug Fixes
|
||||||
|
* Use `@wiki.page_class` in Gollum::Markup where appropriate (#63).
|
||||||
|
|
||||||
|
# 1.1.0 / 2010-10-28
|
||||||
|
|
||||||
* Major Enhancements
|
* Major Enhancements
|
||||||
* Optimize page write/update/delete to use Grit::Index::read_tree instead
|
* Optimize page write/update/delete to use Grit::Index::read_tree instead
|
||||||
of manually recreating entire index contents.
|
of manually recreating entire index contents.
|
||||||
|
|||||||
+10
@@ -35,6 +35,10 @@ opts = OptionParser.new do |opts|
|
|||||||
exit 0
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
opts.on("--config [CONFIG]", "Path to additional configuration file") do |config|
|
||||||
|
options['config'] = config
|
||||||
|
end
|
||||||
|
|
||||||
opts.on("--irb", "Start an irb process with gollum loaded for the current wiki.") do
|
opts.on("--irb", "Start an irb process with gollum loaded for the current wiki.") do
|
||||||
options['irb'] = true
|
options['irb'] = true
|
||||||
end
|
end
|
||||||
@@ -99,5 +103,11 @@ if options['irb']
|
|||||||
else
|
else
|
||||||
require 'gollum/frontend/app'
|
require 'gollum/frontend/app'
|
||||||
Precious::App.set(:gollum_path, gollum_path)
|
Precious::App.set(:gollum_path, gollum_path)
|
||||||
|
if cfg = options['config']
|
||||||
|
# If the path begins with a '/' it will be considered an absolute path,
|
||||||
|
# otherwise it will be relative to the CWD
|
||||||
|
cfg = File.join(Dir.getwd, cfg) unless cfg.slice(0) == File::SEPARATOR
|
||||||
|
require cfg
|
||||||
|
end
|
||||||
Precious::App.run!(options)
|
Precious::App.run!(options)
|
||||||
end
|
end
|
||||||
|
|||||||
+2
-2
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
|
|||||||
s.rubygems_version = '1.3.5'
|
s.rubygems_version = '1.3.5'
|
||||||
|
|
||||||
s.name = 'gollum'
|
s.name = 'gollum'
|
||||||
s.version = '1.0.1'
|
s.version = '1.1.0'
|
||||||
s.date = '2010-10-11'
|
s.date = '2010-10-28'
|
||||||
s.rubyforge_project = 'gollum'
|
s.rubyforge_project = 'gollum'
|
||||||
|
|
||||||
s.summary = "A simple, Git-powered wiki."
|
s.summary = "A simple, Git-powered wiki."
|
||||||
|
|||||||
+3
-44
@@ -19,54 +19,13 @@ require 'gollum/page'
|
|||||||
require 'gollum/file'
|
require 'gollum/file'
|
||||||
require 'gollum/markup'
|
require 'gollum/markup'
|
||||||
require 'gollum/albino'
|
require 'gollum/albino'
|
||||||
|
require 'gollum/sanitization'
|
||||||
|
|
||||||
module Gollum
|
module Gollum
|
||||||
VERSION = '1.0.1'
|
VERSION = '1.1.0'
|
||||||
|
|
||||||
SANITIZATION_OPTIONS = {
|
|
||||||
:elements => [
|
|
||||||
'a', 'abbr', 'acronym', 'address', 'area', 'b', 'big',
|
|
||||||
'blockquote', 'br', 'button', 'caption', 'center', 'cite',
|
|
||||||
'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir',
|
|
||||||
'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1',
|
|
||||||
'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input',
|
|
||||||
'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu',
|
|
||||||
'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp',
|
|
||||||
'select', 'small', 'span', 'strike', 'strong', 'sub',
|
|
||||||
'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th',
|
|
||||||
'thead', 'tr', 'tt', 'u', 'ul', 'var'
|
|
||||||
],
|
|
||||||
:attributes => {
|
|
||||||
:all => ['abbr', 'accept', 'accept-charset',
|
|
||||||
'accesskey', 'action', 'align', 'alt', 'axis',
|
|
||||||
'border', 'cellpadding', 'cellspacing', 'char',
|
|
||||||
'charoff', 'charset', 'checked', 'cite',
|
|
||||||
'class', 'clear', 'cols', 'colspan', 'color',
|
|
||||||
'compact', 'coords', 'datetime', 'dir',
|
|
||||||
'disabled', 'enctype', 'for', 'frame',
|
|
||||||
'headers', 'height', 'href', 'hreflang',
|
|
||||||
'hspace', 'id', 'ismap', 'label', 'lang',
|
|
||||||
'longdesc', 'maxlength', 'media', 'method',
|
|
||||||
'multiple', 'name', 'nohref', 'noshade',
|
|
||||||
'nowrap', 'prompt', 'readonly', 'rel', 'rev',
|
|
||||||
'rows', 'rowspan', 'rules', 'scope',
|
|
||||||
'selected', 'shape', 'size', 'span', 'src',
|
|
||||||
'start', 'summary', 'tabindex', 'target',
|
|
||||||
'title', 'type', 'usemap', 'valign', 'value',
|
|
||||||
'vspace', 'width']
|
|
||||||
},
|
|
||||||
:protocols => {
|
|
||||||
'a' => {'href' => ['http', 'https', 'mailto', :relative]},
|
|
||||||
'img' => {'href' => ['http', 'https', :relative]}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HISTORY_SANITIZATION_OPTIONS = SANITIZATION_OPTIONS.merge(
|
|
||||||
:add_attributes => {
|
|
||||||
'a' => {'rel' => 'nofollow'}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
class Error < StandardError; end
|
class Error < StandardError; end
|
||||||
|
|
||||||
class DuplicatePageError < Error
|
class DuplicatePageError < Error
|
||||||
attr_accessor :dir
|
attr_accessor :dir
|
||||||
attr_accessor :existing_path
|
attr_accessor :existing_path
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ module Gollum
|
|||||||
def initialize(page)
|
def initialize(page)
|
||||||
@wiki = page.wiki
|
@wiki = page.wiki
|
||||||
@name = page.filename
|
@name = page.filename
|
||||||
@data = page.raw_data
|
@data = page.text_data
|
||||||
@version = page.version.id
|
@version = page.version.id
|
||||||
@dir = ::File.dirname(page.path)
|
@dir = ::File.dirname(page.path)
|
||||||
@tagmap = {}
|
@tagmap = {}
|
||||||
@@ -27,9 +27,10 @@ module Gollum
|
|||||||
#
|
#
|
||||||
# Returns the formatted String content.
|
# Returns the formatted String content.
|
||||||
def render(no_follow = false)
|
def render(no_follow = false)
|
||||||
sanitize_options = no_follow ?
|
sanitize_options = no_follow ?
|
||||||
HISTORY_SANITIZATION_OPTIONS :
|
@wiki.history_sanitization :
|
||||||
SANITIZATION_OPTIONS
|
@wiki.sanitization
|
||||||
|
|
||||||
data = extract_tex(@data)
|
data = extract_tex(@data)
|
||||||
data = extract_code(data)
|
data = extract_code(data)
|
||||||
data = extract_tags(data)
|
data = extract_tags(data)
|
||||||
@@ -43,7 +44,7 @@ module Gollum
|
|||||||
end
|
end
|
||||||
data = process_tags(data)
|
data = process_tags(data)
|
||||||
data = process_code(data)
|
data = process_code(data)
|
||||||
data = Sanitize.clean(data, sanitize_options)
|
data = Sanitize.clean(data, sanitize_options.to_hash) if sanitize_options
|
||||||
data = process_tex(data)
|
data = process_tex(data)
|
||||||
data.gsub!(/<p><\/p>/, '')
|
data.gsub!(/<p><\/p>/, '')
|
||||||
data
|
data
|
||||||
@@ -284,7 +285,7 @@ module Gollum
|
|||||||
def process_page_link_tag(tag, no_follow = false)
|
def process_page_link_tag(tag, no_follow = false)
|
||||||
parts = tag.split('|')
|
parts = tag.split('|')
|
||||||
name = parts[0].strip
|
name = parts[0].strip
|
||||||
cname = Page.cname((parts[1] || parts[0]).strip)
|
cname = @wiki.page_class.cname((parts[1] || parts[0]).strip)
|
||||||
tag = if name =~ %r{^https?://} && parts[1].nil?
|
tag = if name =~ %r{^https?://} && parts[1].nil?
|
||||||
%{<a href="#{name}">#{name}</a>}
|
%{<a href="#{name}">#{name}</a>}
|
||||||
else
|
else
|
||||||
@@ -292,7 +293,7 @@ module Gollum
|
|||||||
link_name = cname
|
link_name = cname
|
||||||
page, extra = find_page_from_name(cname)
|
page, extra = find_page_from_name(cname)
|
||||||
if page
|
if page
|
||||||
link_name = Page.cname(page.name)
|
link_name = @wiki.page_class.cname(page.name)
|
||||||
presence = "present"
|
presence = "present"
|
||||||
end
|
end
|
||||||
link = ::File.join(@wiki.base_path, CGI.escape(link_name))
|
link = ::File.join(@wiki.base_path, CGI.escape(link_name))
|
||||||
|
|||||||
+14
-1
@@ -116,6 +116,19 @@ module Gollum
|
|||||||
@blob && @blob.data
|
@blob && @blob.data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Public: A text data encoded in specified encoding.
|
||||||
|
#
|
||||||
|
# encoding - An Encoding or nil
|
||||||
|
#
|
||||||
|
# Returns a character encoding aware String.
|
||||||
|
def text_data(encoding=nil)
|
||||||
|
if raw_data.respond_to?(:encoding)
|
||||||
|
raw_data.force_encoding(encoding || Encoding::UTF_8)
|
||||||
|
else
|
||||||
|
raw_data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Public: The formatted contents of the page.
|
# Public: The formatted contents of the page.
|
||||||
#
|
#
|
||||||
# Returns the String data.
|
# Returns the String data.
|
||||||
@@ -344,4 +357,4 @@ module Gollum
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,109 @@
|
|||||||
|
module Gollum
|
||||||
|
|
||||||
|
# Encapsulate sanitization options.
|
||||||
|
#
|
||||||
|
# This class does not yet support all options of Sanitize library.
|
||||||
|
# See http://github.com/rgrove/sanitize/.
|
||||||
|
class Sanitization
|
||||||
|
# Default whitelisted elements.
|
||||||
|
ELEMENTS = [
|
||||||
|
'a', 'abbr', 'acronym', 'address', 'area', 'b', 'big',
|
||||||
|
'blockquote', 'br', 'button', 'caption', 'center', 'cite',
|
||||||
|
'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir',
|
||||||
|
'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1',
|
||||||
|
'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input',
|
||||||
|
'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu',
|
||||||
|
'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp',
|
||||||
|
'select', 'small', 'span', 'strike', 'strong', 'sub',
|
||||||
|
'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th',
|
||||||
|
'thead', 'tr', 'tt', 'u', 'ul', 'var'
|
||||||
|
].freeze
|
||||||
|
|
||||||
|
# Default whitelisted attributes.
|
||||||
|
ATTRIBUTES = {
|
||||||
|
'a' => ['href'],
|
||||||
|
'img' => ['src'],
|
||||||
|
:all => ['abbr', 'accept', 'accept-charset',
|
||||||
|
'accesskey', 'action', 'align', 'alt', 'axis',
|
||||||
|
'border', 'cellpadding', 'cellspacing', 'char',
|
||||||
|
'charoff', 'class', 'charset', 'checked', 'cite',
|
||||||
|
'clear', 'cols', 'colspan', 'color',
|
||||||
|
'compact', 'coords', 'datetime', 'dir',
|
||||||
|
'disabled', 'enctype', 'for', 'frame',
|
||||||
|
'headers', 'height', 'hreflang',
|
||||||
|
'hspace', 'ismap', 'label', 'lang',
|
||||||
|
'longdesc', 'maxlength', 'media', 'method',
|
||||||
|
'multiple', 'name', 'nohref', 'noshade',
|
||||||
|
'nowrap', 'prompt', 'readonly', 'rel', 'rev',
|
||||||
|
'rows', 'rowspan', 'rules', 'scope',
|
||||||
|
'selected', 'shape', 'size', 'span',
|
||||||
|
'start', 'summary', 'tabindex', 'target',
|
||||||
|
'title', 'type', 'usemap', 'valign', 'value',
|
||||||
|
'vspace', 'width']
|
||||||
|
}.freeze
|
||||||
|
|
||||||
|
# Default whitelisted protocols for URLs.
|
||||||
|
PROTOCOLS = {
|
||||||
|
'a' => {'href' => ['http', 'https', 'mailto', :relative]},
|
||||||
|
'img' => {'src' => ['http', 'https', :relative]}
|
||||||
|
}.freeze
|
||||||
|
|
||||||
|
# Gets an Array of whitelisted HTML elements. Default: ELEMENTS.
|
||||||
|
attr_reader :elements
|
||||||
|
|
||||||
|
# Gets a Hash describing which attributes are allowed in which HTML
|
||||||
|
# elements. Default: ATTRIBUTES.
|
||||||
|
attr_reader :attributes
|
||||||
|
|
||||||
|
# Gets a Hash describing which URI protocols are allowed in HTML
|
||||||
|
# attributes. Default: PROTOCOLS
|
||||||
|
attr_reader :protocols
|
||||||
|
|
||||||
|
# Gets a Hash describing HTML attributes that Sanitize should add.
|
||||||
|
# Default: {}
|
||||||
|
attr_reader :add_attributes
|
||||||
|
|
||||||
|
# Sets a boolean determining whether Sanitize allows HTML comments in the
|
||||||
|
# output. Default: false.
|
||||||
|
attr_writer :allow_comments
|
||||||
|
|
||||||
|
def initialize
|
||||||
|
@elements = ELEMENTS
|
||||||
|
@attributes = ATTRIBUTES
|
||||||
|
@protocols = PROTOCOLS
|
||||||
|
@add_attributes = {}
|
||||||
|
@allow_comments = false
|
||||||
|
yield self if block_given?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Determines if Sanitize should allow HTML comments.
|
||||||
|
#
|
||||||
|
# Returns True if comments are allowed, or False.
|
||||||
|
def allow_comments?
|
||||||
|
!!@allow_comments
|
||||||
|
end
|
||||||
|
|
||||||
|
# Modifies the current Sanitization instance to sanitize older revisions
|
||||||
|
# of pages.
|
||||||
|
#
|
||||||
|
# Returns a Sanitization instance.
|
||||||
|
def history_sanitization
|
||||||
|
self.class.new do |sanitize|
|
||||||
|
sanitize.add_attributes['a'] = {'rel' => 'nofollow'}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Builds a Hash of options suitable for Sanitize.clean.
|
||||||
|
#
|
||||||
|
# Returns a Hash.
|
||||||
|
def to_hash
|
||||||
|
{ :elements => elements,
|
||||||
|
:attributes => attributes,
|
||||||
|
:protocols => protocols,
|
||||||
|
:add_attributes => add_attributes,
|
||||||
|
:allow_comments => allow_comments?
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@@ -18,6 +18,14 @@ module Gollum
|
|||||||
# Sets the default email for commits.
|
# Sets the default email for commits.
|
||||||
attr_accessor :default_committer_email
|
attr_accessor :default_committer_email
|
||||||
|
|
||||||
|
# Sets sanitization options. Set to false to deactivate
|
||||||
|
# sanitization altogether.
|
||||||
|
attr_writer :sanitization
|
||||||
|
|
||||||
|
# Sets sanitization options. Set to false to deactivate
|
||||||
|
# sanitization altogether.
|
||||||
|
attr_writer :history_sanitization
|
||||||
|
|
||||||
# Gets the page class used by all instances of this Wiki.
|
# Gets the page class used by all instances of this Wiki.
|
||||||
# Default: Gollum::Page.
|
# Default: Gollum::Page.
|
||||||
def page_class
|
def page_class
|
||||||
@@ -50,6 +58,26 @@ module Gollum
|
|||||||
::Gollum::Markup
|
::Gollum::Markup
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Gets the default sanitization options for current pages used by
|
||||||
|
# instances of this Wiki.
|
||||||
|
def sanitization
|
||||||
|
if @sanitization.nil?
|
||||||
|
@sanitization = Sanitization.new
|
||||||
|
end
|
||||||
|
@sanitization
|
||||||
|
end
|
||||||
|
|
||||||
|
# Gets the default sanitization options for older page revisions used by
|
||||||
|
# instances of this Wiki.
|
||||||
|
def history_sanitization
|
||||||
|
if @history_sanitization.nil?
|
||||||
|
@history_sanitization = sanitization ?
|
||||||
|
sanitization.history_sanitization :
|
||||||
|
false
|
||||||
|
end
|
||||||
|
@history_sanitization
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self.default_committer_name = 'Anonymous'
|
self.default_committer_name = 'Anonymous'
|
||||||
@@ -60,6 +88,12 @@ module Gollum
|
|||||||
# to "/".
|
# to "/".
|
||||||
attr_reader :base_path
|
attr_reader :base_path
|
||||||
|
|
||||||
|
# Gets the sanitization options for current pages used by this Wiki.
|
||||||
|
attr_reader :sanitization
|
||||||
|
|
||||||
|
# Gets the sanitization options for older page revisions used by this Wiki.
|
||||||
|
attr_reader :history_sanitization
|
||||||
|
|
||||||
# Public: Initialize a new Gollum Repo.
|
# Public: Initialize a new Gollum Repo.
|
||||||
#
|
#
|
||||||
# repo - The String path to the Git repository that holds the Gollum
|
# repo - The String path to the Git repository that holds the Gollum
|
||||||
@@ -70,6 +104,7 @@ module Gollum
|
|||||||
# :page_class - The page Class. Default: Gollum::Page
|
# :page_class - The page Class. Default: Gollum::Page
|
||||||
# :file_class - The file Class. Default: Gollum::File
|
# :file_class - The file Class. Default: Gollum::File
|
||||||
# :markup_class - The markup Class. Default: Gollum::Markup
|
# :markup_class - The markup Class. Default: Gollum::Markup
|
||||||
|
# :sanitization - An instance of Sanitization.
|
||||||
#
|
#
|
||||||
# Returns a fresh Gollum::Repo.
|
# Returns a fresh Gollum::Repo.
|
||||||
def initialize(path, options = {})
|
def initialize(path, options = {})
|
||||||
@@ -84,6 +119,9 @@ module Gollum
|
|||||||
@file_class = options[:file_class] || self.class.file_class
|
@file_class = options[:file_class] || self.class.file_class
|
||||||
@markup_class = options[:markup_class] || self.class.markup_class
|
@markup_class = options[:markup_class] || self.class.markup_class
|
||||||
@repo = @access.repo
|
@repo = @access.repo
|
||||||
|
@sanitization = options[:sanitization] || self.class.sanitization
|
||||||
|
@history_sanitization = options[:history_sanitization] ||
|
||||||
|
self.class.history_sanitization
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: check whether the wiki's git repo exists on the filesystem.
|
# Public: check whether the wiki's git repo exists on the filesystem.
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
ref: refs/heads/master
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
[core]
|
||||||
|
repositoryformatversion = 0
|
||||||
|
filemode = true
|
||||||
|
bare = true
|
||||||
|
ignorecase = true
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Unnamed repository; edit this file 'description' to name the repository.
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message taken by
|
||||||
|
# applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit. The hook is
|
||||||
|
# allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "applypatch-msg".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
test -x "$GIT_DIR/hooks/commit-msg" &&
|
||||||
|
exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
|
||||||
|
:
|
||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to check the commit log message.
|
||||||
|
# Called by git-commit with one argument, the name of the file
|
||||||
|
# that has the commit message. The hook should exit with non-zero
|
||||||
|
# status after issuing an appropriate message if it wants to stop the
|
||||||
|
# commit. The hook is allowed to edit the commit message file.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "commit-msg".
|
||||||
|
|
||||||
|
# Uncomment the below to add a Signed-off-by line to the message.
|
||||||
|
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
|
||||||
|
# hook is more suited to it.
|
||||||
|
#
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||||
|
|
||||||
|
# This example catches duplicate Signed-off-by lines.
|
||||||
|
|
||||||
|
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||||
|
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||||
|
echo >&2 Duplicate Signed-off-by lines.
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script that is called after a successful
|
||||||
|
# commit is made.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "post-commit".
|
||||||
|
|
||||||
|
: Nothing
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script for the "post-receive" event.
|
||||||
|
#
|
||||||
|
# The "post-receive" script is run after receive-pack has accepted a pack
|
||||||
|
# and the repository has been updated. It is passed arguments in through
|
||||||
|
# stdin in the form
|
||||||
|
# <oldrev> <newrev> <refname>
|
||||||
|
# For example:
|
||||||
|
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
|
||||||
|
#
|
||||||
|
# see contrib/hooks/ for a sample, or uncomment the next line and
|
||||||
|
# rename the file to "post-receive".
|
||||||
|
|
||||||
|
#. /usr/share/doc/git-core/contrib/hooks/post-receive-email
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare a packed repository for use over
|
||||||
|
# dumb transports.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "post-update".
|
||||||
|
|
||||||
|
exec git-update-server-info
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed
|
||||||
|
# by applypatch from an e-mail message.
|
||||||
|
#
|
||||||
|
# The hook should exit with non-zero status after issuing an
|
||||||
|
# appropriate message if it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-applypatch".
|
||||||
|
|
||||||
|
. git-sh-setup
|
||||||
|
test -x "$GIT_DIR/hooks/pre-commit" &&
|
||||||
|
exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
|
||||||
|
:
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to verify what is about to be committed.
|
||||||
|
# Called by git-commit with no arguments. The hook should
|
||||||
|
# exit with non-zero status after issuing an appropriate message if
|
||||||
|
# it wants to stop the commit.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "pre-commit".
|
||||||
|
|
||||||
|
if git-rev-parse --verify HEAD >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
against=HEAD
|
||||||
|
else
|
||||||
|
# Initial commit: diff against an empty tree object
|
||||||
|
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If you want to allow non-ascii filenames set this variable to true.
|
||||||
|
allownonascii=$(git config hooks.allownonascii)
|
||||||
|
|
||||||
|
# Cross platform projects tend to avoid non-ascii filenames; prevent
|
||||||
|
# them from being added to the repository. We exploit the fact that the
|
||||||
|
# printable range starts at the space character and ends with tilde.
|
||||||
|
if [ "$allownonascii" != "true" ] &&
|
||||||
|
# Note that the use of brackets around a tr range is ok here, (it's
|
||||||
|
# even required, for portability to Solaris 10's /usr/bin/tr), since
|
||||||
|
# the square bracket bytes happen to fall in the designated range.
|
||||||
|
test "$(git diff --cached --name-only --diff-filter=A -z $against |
|
||||||
|
LC_ALL=C tr -d '[ -~]\0')"
|
||||||
|
then
|
||||||
|
echo "Error: Attempt to add a non-ascii file name."
|
||||||
|
echo
|
||||||
|
echo "This can cause problems if you want to work"
|
||||||
|
echo "with people on other platforms."
|
||||||
|
echo
|
||||||
|
echo "To be portable it is advisable to rename the file ..."
|
||||||
|
echo
|
||||||
|
echo "If you know what you are doing you can disable this"
|
||||||
|
echo "check using:"
|
||||||
|
echo
|
||||||
|
echo " git config hooks.allownonascii true"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec git diff-index --check --cached $against --
|
||||||
+169
@@ -0,0 +1,169 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 2006, 2008 Junio C Hamano
|
||||||
|
#
|
||||||
|
# The "pre-rebase" hook is run just before "git-rebase" starts doing
|
||||||
|
# its job, and can prevent the command from running by exiting with
|
||||||
|
# non-zero status.
|
||||||
|
#
|
||||||
|
# The hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- the upstream the series was forked from.
|
||||||
|
# $2 -- the branch being rebased (or empty when rebasing the current branch).
|
||||||
|
#
|
||||||
|
# This sample shows how to prevent topic branches that are already
|
||||||
|
# merged to 'next' branch from getting rebased, because allowing it
|
||||||
|
# would result in rebasing already published history.
|
||||||
|
|
||||||
|
publish=next
|
||||||
|
basebranch="$1"
|
||||||
|
if test "$#" = 2
|
||||||
|
then
|
||||||
|
topic="refs/heads/$2"
|
||||||
|
else
|
||||||
|
topic=`git symbolic-ref HEAD` ||
|
||||||
|
exit 0 ;# we do not interrupt rebasing detached HEAD
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$topic" in
|
||||||
|
refs/heads/??/*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
exit 0 ;# we do not interrupt others.
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now we are dealing with a topic branch being rebased
|
||||||
|
# on top of master. Is it OK to rebase it?
|
||||||
|
|
||||||
|
# Does the topic really exist?
|
||||||
|
git show-ref -q "$topic" || {
|
||||||
|
echo >&2 "No such branch $topic"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Is topic fully merged to master?
|
||||||
|
not_in_master=`git-rev-list --pretty=oneline ^master "$topic"`
|
||||||
|
if test -z "$not_in_master"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is fully merged to master; better remove it."
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Is topic ever merged to next? If so you should not be rebasing it.
|
||||||
|
only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort`
|
||||||
|
only_next_2=`git-rev-list ^master ${publish} | sort`
|
||||||
|
if test "$only_next_1" = "$only_next_2"
|
||||||
|
then
|
||||||
|
not_in_topic=`git-rev-list "^$topic" master`
|
||||||
|
if test -z "$not_in_topic"
|
||||||
|
then
|
||||||
|
echo >&2 "$topic is already up-to-date with master"
|
||||||
|
exit 1 ;# we could allow it, but there is no point.
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"`
|
||||||
|
perl -e '
|
||||||
|
my $topic = $ARGV[0];
|
||||||
|
my $msg = "* $topic has commits already merged to public branch:\n";
|
||||||
|
my (%not_in_next) = map {
|
||||||
|
/^([0-9a-f]+) /;
|
||||||
|
($1 => 1);
|
||||||
|
} split(/\n/, $ARGV[1]);
|
||||||
|
for my $elem (map {
|
||||||
|
/^([0-9a-f]+) (.*)$/;
|
||||||
|
[$1 => $2];
|
||||||
|
} split(/\n/, $ARGV[2])) {
|
||||||
|
if (!exists $not_in_next{$elem->[0]}) {
|
||||||
|
if ($msg) {
|
||||||
|
print STDERR $msg;
|
||||||
|
undef $msg;
|
||||||
|
}
|
||||||
|
print STDERR " $elem->[1]\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' "$topic" "$not_in_next" "$not_in_master"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
################################################################
|
||||||
|
|
||||||
|
This sample hook safeguards topic branches that have been
|
||||||
|
published from being rewound.
|
||||||
|
|
||||||
|
The workflow assumed here is:
|
||||||
|
|
||||||
|
* Once a topic branch forks from "master", "master" is never
|
||||||
|
merged into it again (either directly or indirectly).
|
||||||
|
|
||||||
|
* Once a topic branch is fully cooked and merged into "master",
|
||||||
|
it is deleted. If you need to build on top of it to correct
|
||||||
|
earlier mistakes, a new topic branch is created by forking at
|
||||||
|
the tip of the "master". This is not strictly necessary, but
|
||||||
|
it makes it easier to keep your history simple.
|
||||||
|
|
||||||
|
* Whenever you need to test or publish your changes to topic
|
||||||
|
branches, merge them into "next" branch.
|
||||||
|
|
||||||
|
The script, being an example, hardcodes the publish branch name
|
||||||
|
to be "next", but it is trivial to make it configurable via
|
||||||
|
$GIT_DIR/config mechanism.
|
||||||
|
|
||||||
|
With this workflow, you would want to know:
|
||||||
|
|
||||||
|
(1) ... if a topic branch has ever been merged to "next". Young
|
||||||
|
topic branches can have stupid mistakes you would rather
|
||||||
|
clean up before publishing, and things that have not been
|
||||||
|
merged into other branches can be easily rebased without
|
||||||
|
affecting other people. But once it is published, you would
|
||||||
|
not want to rewind it.
|
||||||
|
|
||||||
|
(2) ... if a topic branch has been fully merged to "master".
|
||||||
|
Then you can delete it. More importantly, you should not
|
||||||
|
build on top of it -- other people may already want to
|
||||||
|
change things related to the topic as patches against your
|
||||||
|
"master", so if you need further changes, it is better to
|
||||||
|
fork the topic (perhaps with the same name) afresh from the
|
||||||
|
tip of "master".
|
||||||
|
|
||||||
|
Let's look at this example:
|
||||||
|
|
||||||
|
o---o---o---o---o---o---o---o---o---o "next"
|
||||||
|
/ / / /
|
||||||
|
/ a---a---b A / /
|
||||||
|
/ / / /
|
||||||
|
/ / c---c---c---c B /
|
||||||
|
/ / / \ /
|
||||||
|
/ / / b---b C \ /
|
||||||
|
/ / / / \ /
|
||||||
|
---o---o---o---o---o---o---o---o---o---o---o "master"
|
||||||
|
|
||||||
|
|
||||||
|
A, B and C are topic branches.
|
||||||
|
|
||||||
|
* A has one fix since it was merged up to "next".
|
||||||
|
|
||||||
|
* B has finished. It has been fully merged up to "master" and "next",
|
||||||
|
and is ready to be deleted.
|
||||||
|
|
||||||
|
* C has not merged to "next" at all.
|
||||||
|
|
||||||
|
We would want to allow C to be rebased, refuse A, and encourage
|
||||||
|
B to be deleted.
|
||||||
|
|
||||||
|
To compute (1):
|
||||||
|
|
||||||
|
git-rev-list ^master ^topic next
|
||||||
|
git-rev-list ^master next
|
||||||
|
|
||||||
|
if these match, topic has not merged in next at all.
|
||||||
|
|
||||||
|
To compute (2):
|
||||||
|
|
||||||
|
git-rev-list master..topic
|
||||||
|
|
||||||
|
if this is empty, it is fully merged to "master".
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to prepare the commit log message.
|
||||||
|
# Called by git-commit with the name of the file that has the
|
||||||
|
# commit message, followed by the description of the commit
|
||||||
|
# message's source. The hook's purpose is to edit the commit
|
||||||
|
# message file. If the hook fails with a non-zero status,
|
||||||
|
# the commit is aborted.
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "prepare-commit-msg".
|
||||||
|
|
||||||
|
# This hook includes three examples. The first comments out the
|
||||||
|
# "Conflicts:" part of a merge commit.
|
||||||
|
#
|
||||||
|
# The second includes the output of "git diff --name-status -r"
|
||||||
|
# into the message, just before the "git status" output. It is
|
||||||
|
# commented because it doesn't cope with --amend or with squashed
|
||||||
|
# commits.
|
||||||
|
#
|
||||||
|
# The third example adds a Signed-off-by line to the message, that can
|
||||||
|
# still be edited. This is rarely a good idea.
|
||||||
|
|
||||||
|
case "$2,$3" in
|
||||||
|
merge,)
|
||||||
|
perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
|
||||||
|
|
||||||
|
# ,|template,)
|
||||||
|
# perl -i.bak -pe '
|
||||||
|
# print "\n" . `git diff --cached --name-status -r`
|
||||||
|
# if /^#/ && $first++ == 0' "$1" ;;
|
||||||
|
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
|
||||||
|
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
|
||||||
Executable
+128
@@ -0,0 +1,128 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# An example hook script to blocks unannotated tags from entering.
|
||||||
|
# Called by git-receive-pack with arguments: refname sha1-old sha1-new
|
||||||
|
#
|
||||||
|
# To enable this hook, rename this file to "update".
|
||||||
|
#
|
||||||
|
# Config
|
||||||
|
# ------
|
||||||
|
# hooks.allowunannotated
|
||||||
|
# This boolean sets whether unannotated tags will be allowed into the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowdeletetag
|
||||||
|
# This boolean sets whether deleting tags will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.allowmodifytag
|
||||||
|
# This boolean sets whether a tag may be modified after creation. By default
|
||||||
|
# it won't be.
|
||||||
|
# hooks.allowdeletebranch
|
||||||
|
# This boolean sets whether deleting branches will be allowed in the
|
||||||
|
# repository. By default they won't be.
|
||||||
|
# hooks.denycreatebranch
|
||||||
|
# This boolean sets whether remotely creating branches will be denied
|
||||||
|
# in the repository. By default this is allowed.
|
||||||
|
#
|
||||||
|
|
||||||
|
# --- Command line
|
||||||
|
refname="$1"
|
||||||
|
oldrev="$2"
|
||||||
|
newrev="$3"
|
||||||
|
|
||||||
|
# --- Safety check
|
||||||
|
if [ -z "$GIT_DIR" ]; then
|
||||||
|
echo "Don't run this script from the command line." >&2
|
||||||
|
echo " (if you want, you could supply GIT_DIR then run" >&2
|
||||||
|
echo " $0 <ref> <oldrev> <newrev>)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
|
||||||
|
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Config
|
||||||
|
allowunannotated=$(git config --bool hooks.allowunannotated)
|
||||||
|
allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
|
||||||
|
denycreatebranch=$(git config --bool hooks.denycreatebranch)
|
||||||
|
allowdeletetag=$(git config --bool hooks.allowdeletetag)
|
||||||
|
allowmodifytag=$(git config --bool hooks.allowmodifytag)
|
||||||
|
|
||||||
|
# check for no description
|
||||||
|
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
|
||||||
|
case "$projectdesc" in
|
||||||
|
"Unnamed repository"* | "")
|
||||||
|
echo "*** Project description file hasn't been set" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Check types
|
||||||
|
# if $newrev is 0000...0000, it's a commit to delete a ref.
|
||||||
|
zero="0000000000000000000000000000000000000000"
|
||||||
|
if [ "$newrev" = "$zero" ]; then
|
||||||
|
newrev_type=delete
|
||||||
|
else
|
||||||
|
newrev_type=$(git-cat-file -t $newrev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$refname","$newrev_type" in
|
||||||
|
refs/tags/*,commit)
|
||||||
|
# un-annotated tag
|
||||||
|
short_refname=${refname##refs/tags/}
|
||||||
|
if [ "$allowunannotated" != "true" ]; then
|
||||||
|
echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
|
||||||
|
echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,delete)
|
||||||
|
# delete tag
|
||||||
|
if [ "$allowdeletetag" != "true" ]; then
|
||||||
|
echo "*** Deleting a tag is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/tags/*,tag)
|
||||||
|
# annotated tag
|
||||||
|
if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
echo "*** Tag '$refname' already exists." >&2
|
||||||
|
echo "*** Modifying a tag is not allowed in this repository." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,commit)
|
||||||
|
# branch
|
||||||
|
if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
|
||||||
|
echo "*** Creating a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/heads/*,delete)
|
||||||
|
# delete branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
refs/remotes/*,commit)
|
||||||
|
# tracking branch
|
||||||
|
;;
|
||||||
|
refs/remotes/*,delete)
|
||||||
|
# delete tracking branch
|
||||||
|
if [ "$allowdeletebranch" != "true" ]; then
|
||||||
|
echo "*** Deleting a tracking branch is not allowed in this repository" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Anything else (is there anything else?)
|
||||||
|
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# --- Finished
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# git-ls-files --others --exclude-from=.git/info/exclude
|
||||||
|
# Lines that start with '#' are comments.
|
||||||
|
# For a project mostly in C, the following would be a good set of
|
||||||
|
# exclude patterns (uncomment them if you want to use them):
|
||||||
|
# *.[oa]
|
||||||
|
# *~
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
x��AjΓ0E»φ)ώΎ¤Θ’ΨPJC 4λ΄i${ ΦY½½A—ο-ή‹Ίm�`ϋΤjJ�sφΜΖ{Γ4ζ@–�;ΔΑ†iΘδGΒθ¦ΠΡO[µβS�ξ«ΰJ�―λΊΎ7οΛFr{‰Ί½΅·“νΰΜ�g3Σ=μcΫ�Ώέ‰91wZ²άΆ–FRv-8]Ο—Λα�ΈR¥Ψ΄ξ�‚ο―�Γ„TΆ²”¥ϋφ[NΥ
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
8964ed1b4e21aa90e831763bbce9034bfda81b70
|
||||||
@@ -54,6 +54,6 @@ context "GitAccess" do
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "cannot access tree from invalid ref" do
|
test "cannot access tree from invalid ref" do
|
||||||
assert_nil @access.tree('foo')
|
assert_equal [], @access.tree('foo')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -17,6 +17,14 @@ context "Markup" do
|
|||||||
assert @wiki.pages[0].formatted_data
|
assert @wiki.pages[0].formatted_data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# This test is to assume that Sanitize.clean doesn't raise Encoding::CompatibilityError on ruby 1.9
|
||||||
|
test "formats non ASCII-7 character page from Wiki#pages" do
|
||||||
|
wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git"))
|
||||||
|
assert_nothing_raised(defined?(Encoding) && Encoding::CompatibilityError) do
|
||||||
|
assert wiki.page("strider").formatted_data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Links
|
# Links
|
||||||
|
|||||||
@@ -59,6 +59,43 @@ context "Wiki" do
|
|||||||
assert_equal({:message => 'abc', :name => 'bob', :email => 'foo@bar.com'},
|
assert_equal({:message => 'abc', :name => 'bob', :email => 'foo@bar.com'},
|
||||||
@wiki.normalize_commit(commit.dup))
|
@wiki.normalize_commit(commit.dup))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#test "#tree_map_for caches ref and tree" do
|
||||||
|
# assert @wiki.ref_map.empty?
|
||||||
|
# assert @wiki.tree_map.empty?
|
||||||
|
# @wiki.tree_map_for 'master'
|
||||||
|
# assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map)
|
||||||
|
#
|
||||||
|
# map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b']
|
||||||
|
# assert_equal 'Bilbo-Baggins.md', map[0].path
|
||||||
|
# assert_equal '', map[0].dir
|
||||||
|
# assert_equal map[0].path, map[0].name
|
||||||
|
# assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path
|
||||||
|
# assert_equal '/Mordor', map[3].dir
|
||||||
|
# assert_equal 'Eye-Of-Sauron.md', map[3].name
|
||||||
|
#end
|
||||||
|
#
|
||||||
|
#test "#tree_map_for only caches tree for commit" do
|
||||||
|
# assert @wiki.tree_map.empty?
|
||||||
|
# @wiki.tree_map_for '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'
|
||||||
|
# assert @wiki.ref_map.empty?
|
||||||
|
#
|
||||||
|
# entry = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0]
|
||||||
|
# assert_equal 'Bilbo-Baggins.md', entry.path
|
||||||
|
#end
|
||||||
|
|
||||||
|
test "text_data" do
|
||||||
|
wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git"))
|
||||||
|
if String.instance_methods.include?(:encoding)
|
||||||
|
utf8 = wiki.page("strider").text_data
|
||||||
|
assert_equal Encoding::UTF_8, utf8.encoding
|
||||||
|
sjis = wiki.page("sjis").text_data(Encoding::SHIFT_JIS)
|
||||||
|
assert_equal Encoding::SHIFT_JIS, sjis.encoding
|
||||||
|
else
|
||||||
|
page = wiki.page("strider")
|
||||||
|
assert_equal page.raw_data, page.text_data
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "Wiki page previewing" do
|
context "Wiki page previewing" do
|
||||||
|
|||||||
Reference in New Issue
Block a user