gollum-lib 3.0.0 → 4.0.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.

Potentially problematic release.


This version of gollum-lib might be problematic. Click here for more details.

@@ -1,61 +1,112 @@
1
1
  # Inserts header anchors and creates TOC
2
2
  class Gollum::Filter::TOC < Gollum::Filter
3
- def extract(d)
4
- d
3
+ def extract(data)
4
+ data
5
5
  end
6
6
 
7
7
  def process(data)
8
- doc = Nokogiri::HTML::DocumentFragment.parse(data)
9
- toc = nil
10
- anchor_names = {}
11
-
12
- doc.css('h1,h2,h3,h4,h5,h6').each do |h|
13
- # must escape "
14
- h_name = h.content.gsub(' ', '-').gsub('"', '%22')
15
-
16
- # Ensure repeat anchors have a unique prefix or the
17
- # toc will break
18
- anchor_names[h_name] = 0 if anchor_names[h_name].nil?
19
- anchor_names[h_name] += 1
20
-
21
- anchor_prefix_number = anchor_names[h_name]
22
- if anchor_prefix_number > 1
23
- h_name = anchor_prefix_number.to_s + '-' + h_name
24
- end
25
-
26
- level = h.name.gsub(/[hH]/, '').to_i
27
8
 
28
- # Add anchors
29
- anchor_element = %Q(<a class="anchor" id="#{h_name}" href="##{h_name}"><i class="fa fa-link"></i></a>)
30
- # Add anchor element as the first child (before h.content)
31
- h.children.before anchor_element
9
+ @doc = Nokogiri::HTML::DocumentFragment.parse(data)
10
+ @toc = nil
11
+ @anchor_names = {}
12
+ @current_ancestors = ""
32
13
 
33
- # Build TOC
34
- toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>')
35
- tail ||= toc.child
36
- tail_level ||= 0
14
+ if @markup.sub_page && @markup.parent_page
15
+ @toc = @markup.parent_page.toc_data
16
+ else
17
+ @doc.css('h1,h2,h3,h4,h5,h6').each_with_index do |header, i|
18
+ next if header.content.empty?
19
+ # omit the first H1 (the page title) from the TOC if so configured
20
+ next if (i == 0 && header.name =~ /[Hh]1/) && @markup.wiki && @markup.wiki.h1_title
37
21
 
38
- while tail_level < level
39
- node = Nokogiri::XML::Node.new('ul', doc)
40
- tail = tail.add_child(node)
41
- tail_level += 1
42
- end
43
- while tail_level > level
44
- tail = tail.parent
45
- tail_level -= 1
22
+ anchor_name = generate_anchor_name(header)
23
+
24
+ add_anchor_to_header header, anchor_name
25
+ add_entry_to_toc header, anchor_name
46
26
  end
47
- node = Nokogiri::XML::Node.new('li', doc)
48
- # % -> %25 so anchors work on Firefox. See issue #475
49
- node.add_child(%Q{<a href="##{h_name}">#{h.content}</a>})
50
- tail.add_child(node)
27
+
28
+ @toc = @toc.to_xml(@markup.to_xml_opts) if @toc != nil
29
+ data = @doc.to_xml(@markup.to_xml_opts)
30
+
31
+ end
32
+
33
+ @markup.toc = @toc
34
+ data.gsub("[[_TOC_]]") do
35
+ @toc.nil? ? '' : @toc
51
36
  end
37
+ end
52
38
 
53
- toc = toc.to_xml(@markup.to_xml_opts) if toc != nil
54
- data = doc.to_xml(@markup.to_xml_opts)
39
+ private
55
40
 
56
- @markup.toc = toc
57
- data.gsub("[[_TOC_]]") do
58
- toc.nil? ? '' : toc
41
+ # Generates the anchor name from the given header element
42
+ # removing all non alphanumeric characters, replacing them
43
+ # with single dashes.
44
+ #
45
+ # Generates heading ancestry prefixing the headings
46
+ # ancestor names to the generated name.
47
+ #
48
+ # Prefixes duplicate anchors with an index
49
+ def generate_anchor_name(header)
50
+ name = header.content
51
+ level = header.name.gsub(/[hH]/, '').to_i
52
+
53
+ # normalize the header name
54
+ name.gsub!(/[^\d\w\u00C0-\u1FFF\u2C00-\uD7FF]/, "-")
55
+ name.gsub!(/-+/, "-")
56
+ name.gsub!(/^-/, "")
57
+ name.gsub!(/-$/, "")
58
+ name.downcase!
59
+
60
+ anchor_name = name
61
+
62
+ # Set and/or add the ancestors to the name
63
+ @current_ancestors = name if level == 1
64
+ anchor_name = (level == 1) ? name : "#{@current_ancestors}_#{name}"
65
+ @current_ancestors+= "_#{name}" if level > 1
66
+
67
+ # Ensure duplicate anchors have a unique prefix or the toc will break
68
+ index = increment_anchor_index(anchor_name)
69
+ anchor_name = "#{index}-#{anchor_name}" unless index.zero? # if the index is zero this name is unique
70
+
71
+ anchor_name
72
+ end
73
+
74
+ # Creates an anchor element with the given name and adds it before
75
+ # the given header element.
76
+ def add_anchor_to_header(header, name)
77
+ anchor_element = %Q(<a class="anchor" id="#{name}" href="##{name}"><i class="fa fa-link"></i></a>)
78
+ header.children.before anchor_element # Add anchor element before the header
79
+ end
80
+
81
+ # Adds an entry to the TOC for the given header. The generated entry
82
+ # is a link to the given anchor name
83
+ def add_entry_to_toc(header, name)
84
+ @toc ||= Nokogiri::XML::DocumentFragment.parse('<div class="toc"><div class="toc-title">Table of Contents</div></div>')
85
+ tail ||= @toc.child
86
+ tail_level ||= 0
87
+
88
+ level = header.name.gsub(/[hH]/, '').to_i
89
+
90
+ while tail_level < level
91
+ node = Nokogiri::XML::Node.new('ul', @doc)
92
+ tail = tail.add_child(node)
93
+ tail_level += 1
59
94
  end
95
+
96
+ while tail_level > level
97
+ tail = tail.parent
98
+ tail_level -= 1
99
+ end
100
+ node = Nokogiri::XML::Node.new('li', @doc)
101
+ # % -> %25 so anchors work on Firefox. See issue #475
102
+ node.add_child(%Q{<a href="##{name}">#{header.content}</a>})
103
+ tail.add_child(node)
104
+ end
105
+
106
+ # Increments the number of anchors with the given name
107
+ # and returns the current index
108
+ def increment_anchor_index(name)
109
+ @anchor_names = {} if @anchor_names.nil?
110
+ @anchor_names[name].nil? ? @anchor_names[name] = 0 : @anchor_names[name] += 1
60
111
  end
61
- end
112
+ end
@@ -44,7 +44,7 @@ class Gollum::Filter::WSD < Gollum::Filter
44
44
  def render_wsd(code, style)
45
45
  response = Net::HTTP.post_form(URI.parse(WSD_URL), 'style' => style, 'message' => code)
46
46
  if response.body =~ /img: "(.+)"/
47
- url = "http://www.websequencediagrams.com/#{$1}"
47
+ url = "//www.websequencediagrams.com/#{$1}"
48
48
  "<img src=\"#{url}\" />"
49
49
  else
50
50
  puts response.body
@@ -13,13 +13,7 @@ module Gollum
13
13
  def initialize(path, page_file_dir = nil, bare = false)
14
14
  @page_file_dir = page_file_dir
15
15
  @path = path
16
- begin
17
- @repo = Grit::Repo.new(path, { :is_bare => bare })
18
- rescue Grit::InvalidGitRepositoryError
19
- raise Gollum::InvalidGitRepositoryError
20
- rescue Grit::NoSuchPathError
21
- raise Gollum::NoSuchPathError
22
- end
16
+ @repo = Gollum::Git::Repo.new(path, { :is_bare => bare })
23
17
  clear
24
18
  end
25
19
 
@@ -75,7 +69,7 @@ module Gollum
75
69
  #
76
70
  # ref - A String Git SHA or ref.
77
71
  #
78
- # Returns a Grit::Commit.
72
+ # Returns a Gollum::Git::Commit.
79
73
  def commit(ref)
80
74
  if sha?(ref)
81
75
  get_cache(:commit, ref) { commit!(ref) }
@@ -117,7 +111,7 @@ module Gollum
117
111
  # Gets the String path to the Git repository.
118
112
  attr_reader :path
119
113
 
120
- # Gets the Grit::Repo instance for the Git repository.
114
+ # Gets the Gollum::Git::Repo instance for the Git repository.
121
115
  attr_reader :repo
122
116
 
123
117
  # Gets a Hash cache of refs to commit SHAs.
@@ -132,9 +126,9 @@ module Gollum
132
126
  #
133
127
  attr_reader :tree_map
134
128
 
135
- # Gets a Hash cache of commit SHAs to the Grit::Commit instance.
129
+ # Gets a Hash cache of commit SHAs to the Gollum::Git::Commit instance.
136
130
  #
137
- # {"abcd123" => <Grit::Commit>}
131
+ # {"abcd123" => <Gollum::Git::Commit>}
138
132
  #
139
133
  attr_reader :commit_map
140
134
 
@@ -191,7 +185,7 @@ module Gollum
191
185
  #
192
186
  # sha - The string SHA of the Git commit.
193
187
  #
194
- # Returns a Grit::Commit.
188
+ # Returns a Gollum::Git::Commit.
195
189
  def commit!(sha)
196
190
  @repo.commit(sha)
197
191
  end
@@ -0,0 +1,43 @@
1
+ module Gollum
2
+ class Macro
3
+ # Find the macro named, create an instance of that, and return it
4
+ def self.instance(macro_name, wiki, page)
5
+ begin
6
+ self.const_get(macro_name).new(wiki, page)
7
+ rescue NameError
8
+ Unknown_Macro.new(macro_name)
9
+ end
10
+ end
11
+
12
+ def initialize(wiki, page)
13
+ @wiki = wiki
14
+ @page = page
15
+ end
16
+
17
+ def render(*_args)
18
+ raise ArgumentError,
19
+ "#{self.class} does not implement #render. "+
20
+ "This is a bug in #{self.class}."
21
+ end
22
+
23
+ protected
24
+ def html_error(s)
25
+ "<p class=\"gollum-error\">#{s}</p>"
26
+ end
27
+
28
+ # The special class we reserve for only the finest of screwups. The
29
+ # underscore is to make sure nobody can define a real, callable macro
30
+ # with the same name, because that would be... exciting.
31
+ class Unknown_Macro < Macro
32
+ def initialize(macro_name)
33
+ @macro_name = macro_name
34
+ end
35
+
36
+ def render(*_args)
37
+ "!!!Unknown macro: #{@macro_name}!!!"
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ Dir[File.expand_path('../macro/*.rb', __FILE__)].each { |f| require f }
@@ -0,0 +1,11 @@
1
+ module Gollum
2
+ class Macro
3
+ class AllPages < Gollum::Macro
4
+ def render
5
+ if @wiki.pages.size > 0
6
+ '<ul id="pages">' + @wiki.pages.map { |p| "<li>#{p.name}</li>" }.join + '</ul>'
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -53,6 +53,9 @@ module Gollum
53
53
  attr_reader :sanitize
54
54
  attr_reader :format
55
55
  attr_reader :wiki
56
+ attr_reader :page
57
+ attr_reader :parent_page
58
+ attr_reader :sub_page
56
59
  attr_reader :name
57
60
  attr_reader :include_levels
58
61
  attr_reader :to_xml_opts
@@ -72,6 +75,7 @@ module Gollum
72
75
  @format = page.format
73
76
  @sub_page = page.sub_page
74
77
  @parent_page = page.parent_page
78
+ @page = page
75
79
  @dir = ::File.dirname(page.path)
76
80
  end
77
81
  @metadata = nil
@@ -105,7 +109,7 @@ module Gollum
105
109
  # filter_chain - the chain to process
106
110
  #
107
111
  # Returns the formatted data
108
- def process_chain data, filter_chain
112
+ def process_chain(data, filter_chain)
109
113
  # First we extract the data through the chain...
110
114
  filter_chain.each do |filter|
111
115
  data = filter.extract(data)
@@ -84,10 +84,11 @@ module Gollum
84
84
  #
85
85
  # Returns a newly initialized Gollum::Page.
86
86
  def initialize(wiki)
87
- @wiki = wiki
88
- @blob = @header = @footer = @sidebar = nil
89
- @doc = nil
90
- @parent_page = nil
87
+ @wiki = wiki
88
+ @blob = @header = @footer = @sidebar = nil
89
+ @formatted_data = nil
90
+ @doc = nil
91
+ @parent_page = nil
91
92
  end
92
93
 
93
94
  # Public: The on-disk filename of the page including extension.
@@ -216,10 +217,18 @@ module Gollum
216
217
  #
217
218
  # Returns the String data.
218
219
  def formatted_data(encoding = nil, include_levels = 10, &block)
219
- @blob && markup_class.render(historical?, encoding, include_levels) do |doc|
220
- @doc = doc
221
- yield doc if block_given?
220
+ return nil unless @blob
221
+
222
+ if @formatted_data && @doc then
223
+ yield @doc if block_given?
224
+ else
225
+ @formatted_data = markup_class.render(historical?, encoding, include_levels) do |doc|
226
+ @doc = doc
227
+ yield doc if block_given?
228
+ end
222
229
  end
230
+
231
+ @formatted_data
223
232
  end
224
233
 
225
234
  # Public: The table of contents of the page.
@@ -257,7 +266,7 @@ module Gollum
257
266
 
258
267
  # Public: The current version of the page.
259
268
  #
260
- # Returns the Grit::Commit.
269
+ # Returns the Gollum::Git::Commit.
261
270
  attr_reader :version
262
271
 
263
272
  # Public: All of the versions that have touched the Page.
@@ -265,20 +274,11 @@ module Gollum
265
274
  # options - The options Hash:
266
275
  # :page - The Integer page number (default: 1).
267
276
  # :per_page - The Integer max count of items to return.
268
- # :follow - Follow's a file across renames, but falls back
269
- # to a slower Grit native call (implicit in repo.git.log). (default: false)
277
+ # :follow - Follow's a file across renames, slower. (default: false)
270
278
  #
271
- # Returns an Array of Grit::Commit.
279
+ # Returns an Array of Gollum::Git::Commit.
272
280
  def versions(options = {})
273
- if options[:follow]
274
- options[:pretty] = 'raw'
275
- options.delete :max_count
276
- options.delete :skip
277
- log = @wiki.repo.git.log(options, @wiki.ref, "--", @path)
278
- Grit::Commit.list_from_string(@wiki.repo, log)
279
- else
280
- @wiki.repo.log(@wiki.ref, @path, log_pagination_options(options))
281
- end
281
+ @wiki.repo.git.versions_for_path(@path, @wiki.ref, log_pagination_options(options))
282
282
  end
283
283
 
284
284
  # Public: The first 7 characters of the current version.
@@ -365,7 +365,7 @@ module Gollum
365
365
  # Returns the Gollum::Wiki containing the page.
366
366
  attr_reader :wiki
367
367
 
368
- # Set the Grit::Commit version of the page.
368
+ # Set the Gollum::Git::Commit version of the page.
369
369
  #
370
370
  # Returns nothing.
371
371
  attr_writer :version
@@ -379,12 +379,12 @@ module Gollum
379
379
  def find(name, version, dir = nil, exact = false)
380
380
  map = @wiki.tree_map_for(version.to_s)
381
381
  if page = find_page_in_tree(map, name, dir, exact)
382
- page.version = version.is_a?(Grit::Commit) ?
382
+ page.version = version.is_a?(Gollum::Git::Commit) ?
383
383
  version : @wiki.commit_for(version)
384
384
  page.historical = page.version.to_s == version.to_s
385
385
  page
386
386
  end
387
- rescue Grit::GitRuby::Repository::NoSuchShaFound
387
+ rescue Gollum::Git::NoSuchShaFound
388
388
  end
389
389
 
390
390
  # Find a page in a given tree.
@@ -414,7 +414,7 @@ module Gollum
414
414
 
415
415
  # Populate the Page with information from the Blob.
416
416
  #
417
- # blob - The Grit::Blob that contains the info.
417
+ # blob - The Gollum::Git::Blob that contains the info.
418
418
  # path - The String directory path of the page file.
419
419
  #
420
420
  # Returns the populated Gollum::Page.
@@ -427,7 +427,7 @@ module Gollum
427
427
  # The full directory path for the given tree.
428
428
  #
429
429
  # treemap - The Hash treemap containing parentage information.
430
- # tree - The Grit::Tree for which to compute the path.
430
+ # tree - The Gollum::Git::Tree for which to compute the path.
431
431
  #
432
432
  # Returns the String path.
433
433
  def tree_path(treemap, tree)
@@ -14,16 +14,16 @@ module Gollum
14
14
  attr_writer :markup_classes
15
15
 
16
16
  # Sets the default ref for the wiki.
17
- attr_accessor :default_ref
17
+ attr_writer :default_ref
18
18
 
19
19
  # Sets the default name for commits.
20
- attr_accessor :default_committer_name
20
+ attr_writer :default_committer_name
21
21
 
22
22
  # Sets the default email for commits.
23
- attr_accessor :default_committer_email
23
+ attr_writer :default_committer_email
24
24
 
25
25
  # Array of chars to substitute whitespace for when trying to locate file in git repo.
26
- attr_accessor :default_ws_subs
26
+ attr_writer :default_ws_subs
27
27
 
28
28
  # Sets sanitization options. Set to false to deactivate
29
29
  # sanitization altogether.
@@ -35,7 +35,7 @@ module Gollum
35
35
 
36
36
  # Hash for setting different default wiki options
37
37
  # These defaults can be overridden by options passed directly to initialize()
38
- attr_accessor :default_options
38
+ attr_writer :default_options
39
39
 
40
40
  # Gets the page class used by all instances of this Wiki.
41
41
  # Default: Gollum::Page.
@@ -105,14 +105,27 @@ module Gollum
105
105
  end
106
106
  @history_sanitization
107
107
  end
108
- end
109
108
 
110
- self.default_ref = 'master'
111
- self.default_committer_name = 'Anonymous'
112
- self.default_committer_email = 'anon@anon.com'
109
+ def default_ref
110
+ @default_ref || 'master'
111
+ end
113
112
 
114
- self.default_ws_subs = ['_', '-']
115
- self.default_options = {}
113
+ def default_committer_name
114
+ @default_committer_name || 'Anonymous'
115
+ end
116
+
117
+ def default_committer_email
118
+ @default_committer_email || 'anon@anon.com'
119
+ end
120
+
121
+ def default_ws_subs
122
+ @default_ws_subs || ['_', '-']
123
+ end
124
+
125
+ def default_options
126
+ @default_options || {}
127
+ end
128
+ end
116
129
 
117
130
  # The String base path to prefix to internal links. For example, when set
118
131
  # to "/wiki", the page "Hobbit" will be linked as "/wiki/Hobbit". Defaults
@@ -235,7 +248,7 @@ module Gollum
235
248
  @allow_uploads = options.fetch :allow_uploads, false
236
249
  @per_page_uploads = options.fetch :per_page_uploads, false
237
250
  @filter_chain = options.fetch :filter_chain,
238
- [:Metadata, :PlainText, :TOC, :RemoteCode, :Code, :Sanitize, :WSD, :Tags, :Render]
251
+ [:Metadata, :PlainText, :TOC, :RemoteCode, :Code, :Macro, :Sanitize, :WSD, :Tags, :Render]
239
252
  end
240
253
 
241
254
  # Public: check whether the wiki's git repo exists on the filesystem.
@@ -310,7 +323,7 @@ module Gollum
310
323
  # :message - The String commit message.
311
324
  # :name - The String author full name.
312
325
  # :email - The String email address.
313
- # :parent - Optional Grit::Commit parent to this update.
326
+ # :parent - Optional Gollum::Git::Commit parent to this update.
314
327
  # :tree - Optional String SHA of the tree to create the
315
328
  # index from.
316
329
  # :committer - Optional Gollum::Committer instance. If provided,
@@ -322,19 +335,19 @@ module Gollum
322
335
  # Gollum::Committer instance if this is part of a batch update.
323
336
  def write_page(name, format, data, commit = {}, dir = '')
324
337
  # spaces must be dashes
325
- name.gsub!(' ', '-')
326
- dir.gsub!(' ', '-')
338
+ sanitized_name = name.gsub(' ', '-')
339
+ sanitized_dir = dir.gsub(' ', '-')
327
340
 
328
341
  multi_commit = !!commit[:committer]
329
342
  committer = multi_commit ? commit[:committer] : Committer.new(self, commit)
330
343
 
331
- filename = Gollum::Page.cname(name)
344
+ filename = Gollum::Page.cname(sanitized_name)
332
345
 
333
- committer.add_to_index(dir, filename, format, data)
346
+ committer.add_to_index(sanitized_dir, filename, format, data)
334
347
 
335
348
  committer.after_commit do |index, sha|
336
349
  @access.refresh
337
- index.update_working_dir(dir, filename, format)
350
+ index.update_working_dir(sanitized_dir, filename, format)
338
351
  end
339
352
 
340
353
  multi_commit ? committer : committer.commit
@@ -348,7 +361,7 @@ module Gollum
348
361
  # :message - The String commit message.
349
362
  # :name - The String author full name.
350
363
  # :email - The String email address.
351
- # :parent - Optional Grit::Commit parent to this update.
364
+ # :parent - Optional Gollum::Git::Commit parent to this update.
352
365
  # :tree - Optional String SHA of the tree to create the
353
366
  # index from.
354
367
  # :committer - Optional Gollum::Committer instance. If provided,
@@ -404,7 +417,7 @@ module Gollum
404
417
  # :message - The String commit message.
405
418
  # :name - The String author full name.
406
419
  # :email - The String email address.
407
- # :parent - Optional Grit::Commit parent to this update.
420
+ # :parent - Optional Gollum::Git::Commit parent to this update.
408
421
  # :tree - Optional String SHA of the tree to create the
409
422
  # index from.
410
423
  # :committer - Optional Gollum::Committer instance. If provided,
@@ -447,7 +460,7 @@ module Gollum
447
460
  # :message - The String commit message.
448
461
  # :name - The String author full name.
449
462
  # :email - The String email address.
450
- # :parent - Optional Grit::Commit parent to this update.
463
+ # :parent - Optional Gollum::Git::Commit parent to this update.
451
464
  # :tree - Optional String SHA of the tree to create the
452
465
  # index from.
453
466
  # :committer - Optional Gollum::Committer instance. If provided,
@@ -486,7 +499,7 @@ module Gollum
486
499
  # :message - The String commit message.
487
500
  # :name - The String author full name.
488
501
  # :email - The String email address.
489
- # :parent - Optional Grit::Commit parent to this update.
502
+ # :parent - Optional Gollum::Git::Commit parent to this update.
490
503
  #
491
504
  # Returns a String SHA1 of the new commit, or nil if the reverse diff does
492
505
  # not apply.
@@ -576,7 +589,7 @@ module Gollum
576
589
  tree_map_for(ref || @ref).inject(0) do |num, entry|
577
590
  num + (@page_class.valid_page_name?(entry.name) ? 1 : 0)
578
591
  end
579
- rescue Grit::GitRuby::Repository::NoSuchShaFound
592
+ rescue Gollum::Git::NoSuchShaFound
580
593
  0
581
594
  end
582
595
 
@@ -586,27 +599,22 @@ module Gollum
586
599
  #
587
600
  # Returns an Array with Objects of page name and count of matches
588
601
  def search(query)
589
- args = [{}, '-i', '-c', query, @ref, '--']
590
- args << '--' << @page_file_dir if @page_file_dir
591
-
602
+ options = {:path => page_file_dir, :ref => ref}
592
603
  results = {}
593
-
594
- @repo.git.grep(*args).split("\n").each do |line|
595
- result = line.split(':')
596
- result_1 = result[1]
604
+ @repo.git.grep(query, options).each do |hit|
605
+ name = hit[:name]
606
+ count = hit[:count]
597
607
  # Remove ext only from known extensions.
598
608
  # test.pdf => test.pdf, test.md => test
599
- file_name = Page::valid_page_name?(result_1) ? result_1.chomp(::File.extname(result_1)) :
600
- result_1
601
- results[file_name] = result[2].to_i
609
+ file_name = Page::valid_page_name?(name) ? name.chomp(::File.extname(name)) : name
610
+ results[file_name] = count
602
611
  end
603
612
 
604
613
  # Use git ls-files '*query*' to search for file names. Grep only searches file content.
605
614
  # Spaces are converted to dashes when saving pages to disk.
606
- @repo.git.ls_files({}, "*#{ query.gsub(' ', '-') }*").split("\n").each do |line|
615
+ @repo.git.ls_files(query.gsub(' ','-'), options).each do |path|
607
616
  # Remove ext only from known extensions.
608
- file_name = Page::valid_page_name?(line) ? line.chomp(::File.extname(line)) :
609
- line
617
+ file_name = Page::valid_page_name?(path) ? path.chomp(::File.extname(path)) : path
610
618
  # If there's not already a result for file_name then
611
619
  # the value is nil and nil.to_i is 0.
612
620
  results[file_name] = results[file_name].to_i + 1;
@@ -623,11 +631,22 @@ module Gollum
623
631
  # :page - The Integer page number (default: 1).
624
632
  # :per_page - The Integer max count of items to return.
625
633
  #
626
- # Returns an Array of Grit::Commit.
634
+ # Returns an Array of Gollum::Git::Commit.
627
635
  def log(options = {})
628
636
  @repo.log(@ref, nil, log_pagination_options(options))
629
637
  end
630
638
 
639
+ # Returns the latest changes in the wiki (globally)
640
+ #
641
+ # options - The options Hash:
642
+ # :max_count - The Integer number of items to return.
643
+ #
644
+ # Returns an Array of Gollum::Git::Commit.
645
+ def latest_changes(options={})
646
+ max_count = options.fetch(:max_count, 10)
647
+ @repo.log(@ref, nil, options)
648
+ end
649
+
631
650
  # Public: Refreshes just the cached Git reference data. This should
632
651
  # be called after every Gollum update.
633
652
  #
@@ -730,9 +749,9 @@ module Gollum
730
749
  #
731
750
  #########################################################################
732
751
 
733
- # The Grit::Repo associated with the wiki.
752
+ # The Gollum::Git::Repo associated with the wiki.
734
753
  #
735
- # Returns the Grit::Repo.
754
+ # Returns the Gollum::Git::Repo.
736
755
  attr_reader :repo
737
756
 
738
757
  # The String path to the Git repository that holds the Gollum site.
@@ -874,10 +893,10 @@ module Gollum
874
893
  #
875
894
  # ref - A string ref or SHA pointing to a valid commit.
876
895
  #
877
- # Returns a Grit::Commit instance.
896
+ # Returns a Gollum::Git::Commit instance.
878
897
  def commit_for(ref)
879
898
  @access.commit(ref)
880
- rescue Grit::GitRuby::Repository::NoSuchShaFound
899
+ rescue Gollum::Git::NoSuchShaFound
881
900
  end
882
901
 
883
902
  # Finds a full listing of files and their blob SHA for a given ref. Each
@@ -894,7 +913,7 @@ module Gollum
894
913
  else
895
914
  @access.tree(ref)
896
915
  end
897
- rescue Grit::GitRuby::Repository::NoSuchShaFound
916
+ rescue Gollum::Git::NoSuchShaFound
898
917
  []
899
918
  end
900
919