gollum-site 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Gemfile.lock +47 -0
  2. data/README.md +13 -3
  3. data/bin/gollum-site +36 -10
  4. data/gollum-site.gemspec +1 -0
  5. data/lib/gollum-site/page.rb +8 -4
  6. data/lib/gollum-site/sanitization.rb +1 -1
  7. data/lib/gollum-site/site.rb +15 -34
  8. data/lib/gollum-site/version.rb +1 -1
  9. data/test/examples/test_footer_and_sidebar.git/COMMIT_EDITMSG +1 -0
  10. data/test/examples/test_footer_and_sidebar.git/HEAD +1 -0
  11. data/test/examples/test_footer_and_sidebar.git/config +12 -0
  12. data/test/examples/test_footer_and_sidebar.git/description +1 -0
  13. data/test/examples/test_footer_and_sidebar.git/hooks/applypatch-msg.sample +15 -0
  14. data/test/examples/test_footer_and_sidebar.git/hooks/commit-msg.sample +24 -0
  15. data/test/examples/test_footer_and_sidebar.git/hooks/post-commit.sample +8 -0
  16. data/test/examples/test_footer_and_sidebar.git/hooks/post-receive.sample +15 -0
  17. data/test/examples/test_footer_and_sidebar.git/hooks/post-update.sample +8 -0
  18. data/test/examples/test_footer_and_sidebar.git/hooks/pre-applypatch.sample +14 -0
  19. data/test/examples/test_footer_and_sidebar.git/hooks/pre-commit.sample +46 -0
  20. data/test/examples/test_footer_and_sidebar.git/hooks/pre-rebase.sample +169 -0
  21. data/test/examples/test_footer_and_sidebar.git/hooks/prepare-commit-msg.sample +36 -0
  22. data/test/examples/test_footer_and_sidebar.git/hooks/update.sample +128 -0
  23. data/test/examples/test_footer_and_sidebar.git/index +0 -0
  24. data/test/examples/test_footer_and_sidebar.git/info/exclude +6 -0
  25. data/test/examples/test_footer_and_sidebar.git/logs/HEAD +2 -0
  26. data/test/examples/test_footer_and_sidebar.git/logs/refs/heads/master +2 -0
  27. data/test/examples/test_footer_and_sidebar.git/objects/07/748c9bf3b10a2dbc88830595850c36b8908a94 +0 -0
  28. data/test/examples/test_footer_and_sidebar.git/objects/0d/8513659a6a4837331c5a407b333acaa7260275 +0 -0
  29. data/test/examples/test_footer_and_sidebar.git/objects/11/1fe2807960c86c8ee1c4d5141d068f52abadb6 +0 -0
  30. data/test/examples/test_footer_and_sidebar.git/objects/4b/9f13d3082668e68a988e7f74f7a94e34931652 +0 -0
  31. data/test/examples/test_footer_and_sidebar.git/objects/8b/137891791fe96927ad78e64b0aad7bded08bdc +0 -0
  32. data/test/examples/test_footer_and_sidebar.git/objects/aa/69c7a27988b76fe398d1dccc171e25cfc99e3a +0 -0
  33. data/test/examples/test_footer_and_sidebar.git/objects/bb/4397734f9c55a065348686324f81be81769642 +0 -0
  34. data/test/examples/test_footer_and_sidebar.git/objects/c0/a8e615860c09ef147e590c3335210b5efb7725 +0 -0
  35. data/test/examples/test_footer_and_sidebar.git/objects/cc/628ccd10742baea8241c5924df992b5c019f71 +0 -0
  36. data/test/examples/test_footer_and_sidebar.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a +0 -0
  37. data/test/examples/test_footer_and_sidebar.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  38. data/test/examples/test_footer_and_sidebar.git/objects/f4/fcee7b7e2c4de453db5c4b70d7a6fc53ba9769 +0 -0
  39. data/test/examples/test_footer_and_sidebar.git/objects/f8/1dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 +0 -0
  40. data/test/examples/test_footer_and_sidebar.git/packed-refs +2 -0
  41. data/test/examples/test_footer_and_sidebar.git/refs/heads/master +1 -0
  42. data/test/examples/test_footer_and_sidebar.git/refs/remotes/origin/HEAD +1 -0
  43. data/test/test_site.rb +72 -7
  44. metadata +84 -26
data/Gemfile.lock ADDED
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gollum-site (0.1.9)
5
+ directory_watcher
6
+ gollum (>= 1.2.0)
7
+ liquid (>= 2.2.2)
8
+ mixlib-log (>= 1.1.0)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ albino (1.3.3)
14
+ posix-spawn (>= 0.3.6)
15
+ diff-lcs (1.1.2)
16
+ directory_watcher (1.4.0)
17
+ github-markup (0.5.3)
18
+ gollum (1.3.0)
19
+ albino (~> 1.3.2)
20
+ github-markup (>= 0.4.0, < 1.0.0)
21
+ grit (~> 2.4.1)
22
+ mustache (>= 0.11.2, < 1.0.0)
23
+ nokogiri (~> 1.4)
24
+ sanitize (~> 2.0.0)
25
+ sinatra (~> 1.0)
26
+ grit (2.4.1)
27
+ diff-lcs (~> 1.1)
28
+ mime-types (~> 1.15)
29
+ liquid (2.2.2)
30
+ mime-types (1.16)
31
+ mixlib-log (1.3.0)
32
+ mustache (0.99.3)
33
+ nokogiri (1.4.4)
34
+ posix-spawn (0.3.6)
35
+ rack (1.2.2)
36
+ sanitize (2.0.1)
37
+ nokogiri (~> 1.4.4)
38
+ sinatra (1.2.3)
39
+ rack (~> 1.1)
40
+ tilt (>= 1.2.2, < 2.0)
41
+ tilt (1.2.2)
42
+
43
+ PLATFORMS
44
+ ruby
45
+
46
+ DEPENDENCIES
47
+ gollum-site!
data/README.md CHANGED
@@ -145,13 +145,23 @@ You can generate a static site from untracked/uncommitted changes by using the
145
145
  ## Watch
146
146
 
147
147
  When running the gollum-site server you can enable directory watching to update
148
- the static site when changes are made to any of the wiki or static files. This
149
- currently does not work for layout updates (full site regeneration is required).
148
+ the static site when changes are made to any of the wiki or static
149
+ files. This feature only works with the "serve" command.
150
150
 
151
151
  $ gollum-site serve --watch
152
152
 
153
153
  This feature requires the
154
- [directory_watcher](https://rubygems.org/gems/directory_watcher) gem
154
+ [directory_watcher](https://rubygems.org/gems/directory_watcher) gem.
155
+
156
+ ## Sanitization
157
+
158
+ You can customize sanitization with three options:
159
+
160
+ * --allow_elements: custom elements allowed, comma separated
161
+ * --allow_attributes: custom attributes allowed, comma separated
162
+ * --allow_protocols: custom protocols in *href* allowed, comma separated
163
+
164
+ $ gollum-site generate --allow_elements embed,object --allow_attributes src --allow_protocols irc
155
165
 
156
166
  ## Example
157
167
 
data/bin/gollum-site CHANGED
@@ -28,7 +28,10 @@ options = {
28
28
  'output_path' => '_site',
29
29
  'port' => 8000,
30
30
  'watch' => false,
31
- 'level' => :warn
31
+ 'level' => :warn,
32
+ 'allow_elements' => [],
33
+ 'allow_attributes' => [],
34
+ 'allow_protocols' => []
32
35
  }
33
36
  opts = OptionParser.new do |opts|
34
37
  opts.banner = help
@@ -57,6 +60,18 @@ opts = OptionParser.new do |opts|
57
60
  options['watch'] = true
58
61
  end
59
62
 
63
+ opts.on("--allow_elements ELMS", "Custom elements to prevent sanitization (comma separated)") do |elements|
64
+ options['allow_elements'] = elements.split(',')
65
+ end
66
+
67
+ opts.on("--allow_attributes ATTRS", "Custom attributes to prevent sanitization (comma separated)") do |attrs|
68
+ options['allow_attributes'] = attrs.split(',')
69
+ end
70
+
71
+ opts.on("--allow_protocols PROTOCOLS", "Custom protocols to prevent sanitization (comma separated)") do |protocols|
72
+ options['allow_protocols'] = protocols.split(',')
73
+ end
74
+
60
75
  opts.on("--log_level LEVEL", %w[debug info warn error fatal],
61
76
  "Set logging level (debug, info, warn, error, fatal)") do |level|
62
77
  options['level'] = level.to_sym
@@ -92,7 +107,10 @@ when 'generate'
92
107
  site = Gollum::Site.new('.', {
93
108
  :base_path => options['base_path'],
94
109
  :output_path => options['output_path'],
95
- :version => options['working'] ? :working : options['ref']
110
+ :version => options['working'] ? :working : options['ref'],
111
+ :allow_elements => options['allow_elements'],
112
+ :allow_attributes => options['allow_attributes'],
113
+ :allow_protocols => options['allow_protocols']
96
114
  })
97
115
  start = Time.now
98
116
  site.generate()
@@ -100,6 +118,17 @@ when 'generate'
100
118
  puts "Generated site in #{stop - start}(s)"
101
119
  when 'serve'
102
120
  if options['watch']
121
+ site = Gollum::Site.new('.', {
122
+ :base_path => options['base_path'],
123
+ :output_path => options['output_path'],
124
+ :version => :working
125
+ })
126
+ puts "Generating site"
127
+ start = Time.now
128
+ site.generate()
129
+ stop = Time.now
130
+ puts "Generated site in #{stop - start}(s)"
131
+
103
132
  require 'directory_watcher'
104
133
 
105
134
  dw = DirectoryWatcher.new('.', {
@@ -108,12 +137,6 @@ when 'serve'
108
137
  :interval => 1
109
138
  })
110
139
 
111
- site = Gollum::Site.new('.', {
112
- :base_path => options['base_path'],
113
- :output_path => options['output_path'],
114
- :version => :working
115
- })
116
-
117
140
  dw.add_observer do |*args|
118
141
  args.each do |event|
119
142
  # Only respond to modified/added events
@@ -121,8 +144,11 @@ when 'serve'
121
144
  # Ignore modifications to output path
122
145
  unless ::File.expand_path(event.path).match(::File.expand_path(site.output_path))
123
146
  item = event.path[2..-1]
124
- puts "Updating #{item}"
125
- site.update_working_item(item)
147
+ puts "Regenerating site"
148
+ start = Time.now
149
+ site.generate()
150
+ stop = Time.now
151
+ puts "Generated site in #{stop - start}(s)"
126
152
  end
127
153
  end
128
154
  end
data/gollum-site.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency('gollum', '>= 1.2.0')
18
18
  s.add_dependency('liquid', '>= 2.2.2')
19
19
  s.add_dependency('mixlib-log', '>= 1.1.0')
20
+ s.add_dependency('directory_watcher')
20
21
 
21
22
  s.files = `git ls-files`.split("\n")
22
23
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -65,13 +65,17 @@ module Gollum
65
65
 
66
66
  def liquify
67
67
  SiteLog.debug("Starting page liquefication - #{name}")
68
- data = { "path" => self.class.cname(name),
68
+ data = {
69
+ "path" => self.class.cname(name),
69
70
  "link" => ::File.join(@wiki.base_path, CGI.escape(self.class.cname(name))),
70
71
  "content" => formatted_data,
71
72
  "title" => title,
72
- "format" => format.to_s,
73
- "author" => version.author.name,
74
- "date" => version.authored_date.strftime("%Y-%m-%d %H:%M:%S")}
73
+ "format" => format.to_s
74
+ }
75
+ data["author"] = version.author.name rescue nil
76
+ data["date"] = version.authored_date.strftime("%Y-%m-%d %H:%M:%S") rescue nil
77
+ data["footer"] = footer.formatted_data if footer
78
+ data["sidebar"] = sidebar.formatted_data if sidebar
75
79
  SiteLog.debug("Finished page liquefication - #{name}")
76
80
  return data
77
81
  end
@@ -16,7 +16,7 @@ module Gollum
16
16
  'select', 'small', 'span', 'strike', 'strong', 'sub',
17
17
  'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th',
18
18
  'thead', 'tr', 'tt', 'u', 'ul', 'var', 'iframe'
19
- ].freeze
19
+ ]
20
20
 
21
21
  # Default whitelisted attributes.
22
22
  ATTRIBUTES = {
@@ -13,29 +13,30 @@ module Gollum
13
13
  :markup_class => Gollum::SiteMarkup,
14
14
  :page_class => Gollum::SitePage,
15
15
  :base_path => options[:base_path],
16
- :sanitization => Gollum::SiteSanitization.new,
17
- :history_sanitization => Gollum::SiteSanitization.new
16
+ :sanitization => sanitization(options),
17
+ :history_sanitization => sanitization(options)
18
18
  })
19
19
  @wiki.site = self
20
20
  @output_path = options[:output_path] || "_site"
21
- set_version(options[:version] || "master")
21
+ @version = options[:version] || "master"
22
22
  end
23
23
 
24
24
  # Prepare site for specified version
25
- def set_version(version)
26
- @version = version
25
+ def prepare()
27
26
  @pages = {}
28
27
  @files = {}
29
28
  @layouts = {}
30
29
 
31
- @commit = version == :working ? @wiki.repo.commit("HEAD") : @wiki.repo.commit(version)
32
- items = self.ls(version)
30
+ @commit = @version == :working ? @wiki.repo.head.commit : @wiki.repo.commit(@version)
31
+ items = self.ls(@version)
33
32
 
34
33
  items.each do |item|
35
34
  filename = ::File.basename(item.path)
36
35
  dirname = ::File.dirname(item.path)
37
36
  if filename =~ /^_Footer./
38
37
  # ignore
38
+ elsif filename =~ /^_Sidebar./
39
+ # ignore
39
40
  elsif filename =~ /^_Layout.html/
40
41
  # layout
41
42
  @layouts[item.path] = ::Liquid::Template.parse(item.data)
@@ -91,37 +92,17 @@ module Gollum
91
92
  end
92
93
  end
93
94
 
94
- # path must be relative to top level of wiki repo
95
- def update_working_item(path)
96
- filename = ::File.basename(path)
97
- dirname = ::File.dirname(path)
98
- if filename =~ /^_Footer./
99
- # ignore
100
- elsif filename =~ /^_Layout.html/
101
- # layout
102
- elsif @wiki.page_class.valid_page_name?(filename)
103
- # page
104
- abspath = ::File.join(@wiki.repo.git.work_tree, path)
105
- page = @wiki.page_class.new(@wiki)
106
- blob = OpenStruct.new(:name => filename, :data => IO.read(abspath))
107
- page.populate(blob, dirname)
108
- page.version = @commit
109
- @pages[page.name.downcase] = page
110
- page.generate(@output_path, @version)
111
- else
112
- # file
113
- data = IO.read(abspath)
114
- @files[path] = data
115
- path = ::File.join(@output_path, path)
116
- ::FileUtils.mkdir_p(::File.dirname(path))
117
- ::File.open(path, "w") do |f|
118
- f.write(data)
119
- end
120
- end
95
+ def sanitization(options)
96
+ site_sanitization = Gollum::SiteSanitization.new
97
+ site_sanitization.elements.concat options[:allow_elements] || []
98
+ site_sanitization.attributes[:all].concat options[:allow_attributes] || []
99
+ site_sanitization.protocols['a']['href'].concat options[:allow_protocols] || []
100
+ site_sanitization
121
101
  end
122
102
 
123
103
  # Public: generate the static site
124
104
  def generate()
105
+ prepare
125
106
  ::Dir.mkdir(@output_path) unless ::File.exists? @output_path
126
107
 
127
108
  @pages.each do |name, page|
@@ -1,5 +1,5 @@
1
1
  module Gollum
2
2
  class Site
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
@@ -0,0 +1 @@
1
+ second commit
@@ -0,0 +1 @@
1
+ ref: refs/heads/master
@@ -0,0 +1,12 @@
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = true
4
+ bare = false
5
+ logallrefupdates = true
6
+ ignorecase = true
7
+ [remote "origin"]
8
+ fetch = +refs/heads/*:refs/remotes/origin/*
9
+ url = /Users/dreverri/src/basho/gollum-site/test/examples/test_footer_and_sidebar.git
10
+ [branch "master"]
11
+ remote = origin
12
+ merge = refs/heads/master
@@ -0,0 +1 @@
1
+ Unnamed repository; edit this file 'description' to name the repository.
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to check the commit log message taken by
4
+ # applypatch from an e-mail message.
5
+ #
6
+ # The hook should exit with non-zero status after issuing an
7
+ # appropriate message if it wants to stop the commit. The hook is
8
+ # allowed to edit the commit message file.
9
+ #
10
+ # To enable this hook, rename this file to "applypatch-msg".
11
+
12
+ . git-sh-setup
13
+ test -x "$GIT_DIR/hooks/commit-msg" &&
14
+ exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
15
+ :
@@ -0,0 +1,24 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to check the commit log message.
4
+ # Called by "git commit" with one argument, the name of the file
5
+ # that has the commit message. The hook should exit with non-zero
6
+ # status after issuing an appropriate message if it wants to stop the
7
+ # commit. The hook is allowed to edit the commit message file.
8
+ #
9
+ # To enable this hook, rename this file to "commit-msg".
10
+
11
+ # Uncomment the below to add a Signed-off-by line to the message.
12
+ # Doing this in a hook is a bad idea in general, but the prepare-commit-msg
13
+ # hook is more suited to it.
14
+ #
15
+ # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
16
+ # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
17
+
18
+ # This example catches duplicate Signed-off-by lines.
19
+
20
+ test "" = "$(grep '^Signed-off-by: ' "$1" |
21
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
22
+ echo >&2 Duplicate Signed-off-by lines.
23
+ exit 1
24
+ }
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script that is called after a successful
4
+ # commit is made.
5
+ #
6
+ # To enable this hook, rename this file to "post-commit".
7
+
8
+ : Nothing
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script for the "post-receive" event.
4
+ #
5
+ # The "post-receive" script is run after receive-pack has accepted a pack
6
+ # and the repository has been updated. It is passed arguments in through
7
+ # stdin in the form
8
+ # <oldrev> <newrev> <refname>
9
+ # For example:
10
+ # aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
11
+ #
12
+ # see contrib/hooks/ for a sample, or uncomment the next line and
13
+ # rename the file to "post-receive".
14
+
15
+ #. /usr/share/doc/git-core/contrib/hooks/post-receive-email
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to prepare a packed repository for use over
4
+ # dumb transports.
5
+ #
6
+ # To enable this hook, rename this file to "post-update".
7
+
8
+ exec git update-server-info
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to verify what is about to be committed
4
+ # by applypatch from an e-mail message.
5
+ #
6
+ # The hook should exit with non-zero status after issuing an
7
+ # appropriate message if it wants to stop the commit.
8
+ #
9
+ # To enable this hook, rename this file to "pre-applypatch".
10
+
11
+ . git-sh-setup
12
+ test -x "$GIT_DIR/hooks/pre-commit" &&
13
+ exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
14
+ :
@@ -0,0 +1,46 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to verify what is about to be committed.
4
+ # Called by "git commit" with no arguments. The hook should
5
+ # exit with non-zero status after issuing an appropriate message if
6
+ # it wants to stop the commit.
7
+ #
8
+ # To enable this hook, rename this file to "pre-commit".
9
+
10
+ if git rev-parse --verify HEAD >/dev/null 2>&1
11
+ then
12
+ against=HEAD
13
+ else
14
+ # Initial commit: diff against an empty tree object
15
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
16
+ fi
17
+
18
+ # If you want to allow non-ascii filenames set this variable to true.
19
+ allownonascii=$(git config hooks.allownonascii)
20
+
21
+ # Cross platform projects tend to avoid non-ascii filenames; prevent
22
+ # them from being added to the repository. We exploit the fact that the
23
+ # printable range starts at the space character and ends with tilde.
24
+ if [ "$allownonascii" != "true" ] &&
25
+ # Note that the use of brackets around a tr range is ok here, (it's
26
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
27
+ # the square bracket bytes happen to fall in the designated range.
28
+ test "$(git diff --cached --name-only --diff-filter=A -z $against |
29
+ LC_ALL=C tr -d '[ -~]\0')"
30
+ then
31
+ echo "Error: Attempt to add a non-ascii file name."
32
+ echo
33
+ echo "This can cause problems if you want to work"
34
+ echo "with people on other platforms."
35
+ echo
36
+ echo "To be portable it is advisable to rename the file ..."
37
+ echo
38
+ echo "If you know what you are doing you can disable this"
39
+ echo "check using:"
40
+ echo
41
+ echo " git config hooks.allownonascii true"
42
+ echo
43
+ exit 1
44
+ fi
45
+
46
+ exec git diff-index --check --cached $against --
@@ -0,0 +1,169 @@
1
+ #!/bin/sh
2
+ #
3
+ # Copyright (c) 2006, 2008 Junio C Hamano
4
+ #
5
+ # The "pre-rebase" hook is run just before "git rebase" starts doing
6
+ # its job, and can prevent the command from running by exiting with
7
+ # non-zero status.
8
+ #
9
+ # The hook is called with the following parameters:
10
+ #
11
+ # $1 -- the upstream the series was forked from.
12
+ # $2 -- the branch being rebased (or empty when rebasing the current branch).
13
+ #
14
+ # This sample shows how to prevent topic branches that are already
15
+ # merged to 'next' branch from getting rebased, because allowing it
16
+ # would result in rebasing already published history.
17
+
18
+ publish=next
19
+ basebranch="$1"
20
+ if test "$#" = 2
21
+ then
22
+ topic="refs/heads/$2"
23
+ else
24
+ topic=`git symbolic-ref HEAD` ||
25
+ exit 0 ;# we do not interrupt rebasing detached HEAD
26
+ fi
27
+
28
+ case "$topic" in
29
+ refs/heads/??/*)
30
+ ;;
31
+ *)
32
+ exit 0 ;# we do not interrupt others.
33
+ ;;
34
+ esac
35
+
36
+ # Now we are dealing with a topic branch being rebased
37
+ # on top of master. Is it OK to rebase it?
38
+
39
+ # Does the topic really exist?
40
+ git show-ref -q "$topic" || {
41
+ echo >&2 "No such branch $topic"
42
+ exit 1
43
+ }
44
+
45
+ # Is topic fully merged to master?
46
+ not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
47
+ if test -z "$not_in_master"
48
+ then
49
+ echo >&2 "$topic is fully merged to master; better remove it."
50
+ exit 1 ;# we could allow it, but there is no point.
51
+ fi
52
+
53
+ # Is topic ever merged to next? If so you should not be rebasing it.
54
+ only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
55
+ only_next_2=`git rev-list ^master ${publish} | sort`
56
+ if test "$only_next_1" = "$only_next_2"
57
+ then
58
+ not_in_topic=`git rev-list "^$topic" master`
59
+ if test -z "$not_in_topic"
60
+ then
61
+ echo >&2 "$topic is already up-to-date with master"
62
+ exit 1 ;# we could allow it, but there is no point.
63
+ else
64
+ exit 0
65
+ fi
66
+ else
67
+ not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
68
+ /usr/bin/perl -e '
69
+ my $topic = $ARGV[0];
70
+ my $msg = "* $topic has commits already merged to public branch:\n";
71
+ my (%not_in_next) = map {
72
+ /^([0-9a-f]+) /;
73
+ ($1 => 1);
74
+ } split(/\n/, $ARGV[1]);
75
+ for my $elem (map {
76
+ /^([0-9a-f]+) (.*)$/;
77
+ [$1 => $2];
78
+ } split(/\n/, $ARGV[2])) {
79
+ if (!exists $not_in_next{$elem->[0]}) {
80
+ if ($msg) {
81
+ print STDERR $msg;
82
+ undef $msg;
83
+ }
84
+ print STDERR " $elem->[1]\n";
85
+ }
86
+ }
87
+ ' "$topic" "$not_in_next" "$not_in_master"
88
+ exit 1
89
+ fi
90
+
91
+ exit 0
92
+
93
+ ################################################################
94
+
95
+ This sample hook safeguards topic branches that have been
96
+ published from being rewound.
97
+
98
+ The workflow assumed here is:
99
+
100
+ * Once a topic branch forks from "master", "master" is never
101
+ merged into it again (either directly or indirectly).
102
+
103
+ * Once a topic branch is fully cooked and merged into "master",
104
+ it is deleted. If you need to build on top of it to correct
105
+ earlier mistakes, a new topic branch is created by forking at
106
+ the tip of the "master". This is not strictly necessary, but
107
+ it makes it easier to keep your history simple.
108
+
109
+ * Whenever you need to test or publish your changes to topic
110
+ branches, merge them into "next" branch.
111
+
112
+ The script, being an example, hardcodes the publish branch name
113
+ to be "next", but it is trivial to make it configurable via
114
+ $GIT_DIR/config mechanism.
115
+
116
+ With this workflow, you would want to know:
117
+
118
+ (1) ... if a topic branch has ever been merged to "next". Young
119
+ topic branches can have stupid mistakes you would rather
120
+ clean up before publishing, and things that have not been
121
+ merged into other branches can be easily rebased without
122
+ affecting other people. But once it is published, you would
123
+ not want to rewind it.
124
+
125
+ (2) ... if a topic branch has been fully merged to "master".
126
+ Then you can delete it. More importantly, you should not
127
+ build on top of it -- other people may already want to
128
+ change things related to the topic as patches against your
129
+ "master", so if you need further changes, it is better to
130
+ fork the topic (perhaps with the same name) afresh from the
131
+ tip of "master".
132
+
133
+ Let's look at this example:
134
+
135
+ o---o---o---o---o---o---o---o---o---o "next"
136
+ / / / /
137
+ / a---a---b A / /
138
+ / / / /
139
+ / / c---c---c---c B /
140
+ / / / \ /
141
+ / / / b---b C \ /
142
+ / / / / \ /
143
+ ---o---o---o---o---o---o---o---o---o---o---o "master"
144
+
145
+
146
+ A, B and C are topic branches.
147
+
148
+ * A has one fix since it was merged up to "next".
149
+
150
+ * B has finished. It has been fully merged up to "master" and "next",
151
+ and is ready to be deleted.
152
+
153
+ * C has not merged to "next" at all.
154
+
155
+ We would want to allow C to be rebased, refuse A, and encourage
156
+ B to be deleted.
157
+
158
+ To compute (1):
159
+
160
+ git rev-list ^master ^topic next
161
+ git rev-list ^master next
162
+
163
+ if these match, topic has not merged in next at all.
164
+
165
+ To compute (2):
166
+
167
+ git rev-list master..topic
168
+
169
+ if this is empty, it is fully merged to "master".
@@ -0,0 +1,36 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to prepare the commit log message.
4
+ # Called by "git commit" with the name of the file that has the
5
+ # commit message, followed by the description of the commit
6
+ # message's source. The hook's purpose is to edit the commit
7
+ # message file. If the hook fails with a non-zero status,
8
+ # the commit is aborted.
9
+ #
10
+ # To enable this hook, rename this file to "prepare-commit-msg".
11
+
12
+ # This hook includes three examples. The first comments out the
13
+ # "Conflicts:" part of a merge commit.
14
+ #
15
+ # The second includes the output of "git diff --name-status -r"
16
+ # into the message, just before the "git status" output. It is
17
+ # commented because it doesn't cope with --amend or with squashed
18
+ # commits.
19
+ #
20
+ # The third example adds a Signed-off-by line to the message, that can
21
+ # still be edited. This is rarely a good idea.
22
+
23
+ case "$2,$3" in
24
+ merge,)
25
+ /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
26
+
27
+ # ,|template,)
28
+ # /usr/bin/perl -i.bak -pe '
29
+ # print "\n" . `git diff --cached --name-status -r`
30
+ # if /^#/ && $first++ == 0' "$1" ;;
31
+
32
+ *) ;;
33
+ esac
34
+
35
+ # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
36
+ # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
@@ -0,0 +1,128 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to blocks unannotated tags from entering.
4
+ # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
5
+ #
6
+ # To enable this hook, rename this file to "update".
7
+ #
8
+ # Config
9
+ # ------
10
+ # hooks.allowunannotated
11
+ # This boolean sets whether unannotated tags will be allowed into the
12
+ # repository. By default they won't be.
13
+ # hooks.allowdeletetag
14
+ # This boolean sets whether deleting tags will be allowed in the
15
+ # repository. By default they won't be.
16
+ # hooks.allowmodifytag
17
+ # This boolean sets whether a tag may be modified after creation. By default
18
+ # it won't be.
19
+ # hooks.allowdeletebranch
20
+ # This boolean sets whether deleting branches will be allowed in the
21
+ # repository. By default they won't be.
22
+ # hooks.denycreatebranch
23
+ # This boolean sets whether remotely creating branches will be denied
24
+ # in the repository. By default this is allowed.
25
+ #
26
+
27
+ # --- Command line
28
+ refname="$1"
29
+ oldrev="$2"
30
+ newrev="$3"
31
+
32
+ # --- Safety check
33
+ if [ -z "$GIT_DIR" ]; then
34
+ echo "Don't run this script from the command line." >&2
35
+ echo " (if you want, you could supply GIT_DIR then run" >&2
36
+ echo " $0 <ref> <oldrev> <newrev>)" >&2
37
+ exit 1
38
+ fi
39
+
40
+ if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
41
+ echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
42
+ exit 1
43
+ fi
44
+
45
+ # --- Config
46
+ allowunannotated=$(git config --bool hooks.allowunannotated)
47
+ allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
48
+ denycreatebranch=$(git config --bool hooks.denycreatebranch)
49
+ allowdeletetag=$(git config --bool hooks.allowdeletetag)
50
+ allowmodifytag=$(git config --bool hooks.allowmodifytag)
51
+
52
+ # check for no description
53
+ projectdesc=$(sed -e '1q' "$GIT_DIR/description")
54
+ case "$projectdesc" in
55
+ "Unnamed repository"* | "")
56
+ echo "*** Project description file hasn't been set" >&2
57
+ exit 1
58
+ ;;
59
+ esac
60
+
61
+ # --- Check types
62
+ # if $newrev is 0000...0000, it's a commit to delete a ref.
63
+ zero="0000000000000000000000000000000000000000"
64
+ if [ "$newrev" = "$zero" ]; then
65
+ newrev_type=delete
66
+ else
67
+ newrev_type=$(git cat-file -t $newrev)
68
+ fi
69
+
70
+ case "$refname","$newrev_type" in
71
+ refs/tags/*,commit)
72
+ # un-annotated tag
73
+ short_refname=${refname##refs/tags/}
74
+ if [ "$allowunannotated" != "true" ]; then
75
+ echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
76
+ echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
77
+ exit 1
78
+ fi
79
+ ;;
80
+ refs/tags/*,delete)
81
+ # delete tag
82
+ if [ "$allowdeletetag" != "true" ]; then
83
+ echo "*** Deleting a tag is not allowed in this repository" >&2
84
+ exit 1
85
+ fi
86
+ ;;
87
+ refs/tags/*,tag)
88
+ # annotated tag
89
+ if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
90
+ then
91
+ echo "*** Tag '$refname' already exists." >&2
92
+ echo "*** Modifying a tag is not allowed in this repository." >&2
93
+ exit 1
94
+ fi
95
+ ;;
96
+ refs/heads/*,commit)
97
+ # branch
98
+ if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
99
+ echo "*** Creating a branch is not allowed in this repository" >&2
100
+ exit 1
101
+ fi
102
+ ;;
103
+ refs/heads/*,delete)
104
+ # delete branch
105
+ if [ "$allowdeletebranch" != "true" ]; then
106
+ echo "*** Deleting a branch is not allowed in this repository" >&2
107
+ exit 1
108
+ fi
109
+ ;;
110
+ refs/remotes/*,commit)
111
+ # tracking branch
112
+ ;;
113
+ refs/remotes/*,delete)
114
+ # delete tracking branch
115
+ if [ "$allowdeletebranch" != "true" ]; then
116
+ echo "*** Deleting a tracking branch is not allowed in this repository" >&2
117
+ exit 1
118
+ fi
119
+ ;;
120
+ *)
121
+ # Anything else (is there anything else?)
122
+ echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
123
+ exit 1
124
+ ;;
125
+ esac
126
+
127
+ # --- Finished
128
+ exit 0
@@ -0,0 +1,6 @@
1
+ # git ls-files --others --exclude-from=.git/info/exclude
2
+ # Lines that start with '#' are comments.
3
+ # For a project mostly in C, the following would be a good set of
4
+ # exclude patterns (uncomment them if you want to use them):
5
+ # *.[oa]
6
+ # *~
@@ -0,0 +1,2 @@
1
+ 0000000000000000000000000000000000000000 f81dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 Daniel Reverri <reverri@gmail.com> 1305254691 -0700 clone: from /Users/dreverri/src/basho/gollum-site/test/examples/test_footer_and_sidebar.git
2
+ f81dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 0d8513659a6a4837331c5a407b333acaa7260275 Daniel Reverri <reverri@gmail.com> 1305254741 -0700 commit: second commit
@@ -0,0 +1,2 @@
1
+ 0000000000000000000000000000000000000000 f81dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 Daniel Reverri <reverri@gmail.com> 1305254691 -0700 clone: from /Users/dreverri/src/basho/gollum-site/test/examples/test_footer_and_sidebar.git
2
+ f81dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 0d8513659a6a4837331c5a407b333acaa7260275 Daniel Reverri <reverri@gmail.com> 1305254741 -0700 commit: second commit
@@ -0,0 +1,2 @@
1
+ # pack-refs with: peeled
2
+ f81dd0b9cec9c51bbf0ced5d75d329ab14ab4c69 refs/remotes/origin/master
@@ -0,0 +1 @@
1
+ 0d8513659a6a4837331c5a407b333acaa7260275
@@ -0,0 +1 @@
1
+ ref: refs/remotes/origin/master
data/test/test_site.rb CHANGED
@@ -54,6 +54,9 @@ end
54
54
  context "Preview" do
55
55
  setup do
56
56
  @path = testpath("examples/uncommitted_untracked_changes")
57
+ @repo = Grit::Repo.init(@path)
58
+ @repo.add("#{@path}")
59
+ @repo.commit_all("Initial commit")
57
60
  # Add untracked file
58
61
  File.open(@path + '/Foo.md', 'w') { |f| f.write("Bar") }
59
62
  # Modify tracked file
@@ -78,18 +81,80 @@ context "Preview" do
78
81
  assert_equal("<p>Hello World\nHello World</p>", data)
79
82
  end
80
83
 
81
- test "one item can be updated" do
82
- File.open(@path + '/Foo.md', 'w') { |f| f.write("Baz") }
83
- @site.update_working_item('Foo.md')
84
- data = IO.read(::File.join(@site.output_path, "Foo.html"))
85
- assert_equal("<p>Baz</p>", data)
86
- end
87
-
88
84
  teardown do
89
85
  # Remove untracked file
90
86
  FileUtils.rm(@path + '/Foo.md')
91
87
  # Reset tracked file
92
88
  File.open(@path + '/Home.md', 'w') { |f| f.write("Hello World\n") }
93
89
  FileUtils.rm_r(@site.output_path)
90
+ FileUtils.rm_r(@path + '/.git')
91
+ end
92
+ end
93
+
94
+ context "Sanitization" do
95
+ setup do
96
+ @path = Dir.mktmpdir('gollumsite')
97
+ @repo = Grit::Repo.init(@path)
98
+ @repo.add("#{@path}")
99
+ @repo.commit_all("Initial commit")
100
+ # protocols
101
+ File.open(@path + '/Home.md', 'w') { |f| f.write("<a href=\"irc://irc.freenode.net/foo\">Hello World</a>") }
102
+ # elements
103
+ File.open(@path + '/Foo.md', 'w') { |f| f.write("<embed src=\"foo.html\">") }
104
+ @site = Gollum::Site.new(@path, {
105
+ :output_path => testpath("examples/site"),
106
+ :version => :working,
107
+ :allow_protocols => ['irc'],
108
+ :allow_elements => ['embed'],
109
+ :allow_attributes => ['src']
110
+ })
111
+ @site.generate()
112
+ end
113
+
114
+ test "link with irc protocol" do
115
+ data = IO.read(::File.join(@site.output_path, "Home.html"))
116
+ assert_equal("<p><a href=\"irc://irc.freenode.net/foo\">Hello World</a></p>", data)
117
+ end
118
+
119
+ test "embed with src" do
120
+ data = IO.read(::File.join(@site.output_path, "Foo.html"))
121
+ assert_equal("<p><embed src=\"foo.html\"></embed></p>", data)
122
+ end
123
+
124
+ teardown do
125
+ FileUtils.rm_r(@site.output_path)
126
+ FileUtils.rm_r(@path)
127
+ end
128
+
129
+ end
130
+
131
+ context "Sidebar and Footer" do
132
+ setup do
133
+ @path = testpath("examples/test_footer_and_sidebar.git")
134
+
135
+ @site = Gollum::Site.new(@path, {
136
+ :output_path => testpath("examples/site"),
137
+ :version => "master"
138
+ })
139
+ @site.generate()
140
+ end
141
+
142
+ test "Sidebar and Footer files are ignored" do
143
+ assert !File.exists?(@site.output_path + '_Footer.html')
144
+ assert !File.exists?(@site.output_path + '_Sidebar.html')
145
+ end
146
+
147
+ test "Footer is rendered in _Layout" do
148
+ data = IO.read(::File.join(@site.output_path, "footer.html"))
149
+ assert_equal "<p>hello</p>\n", data
150
+ end
151
+
152
+ test "Sidebar is rendered in _Layout" do
153
+ data = IO.read(::File.join(@site.output_path, "sidebar.html"))
154
+ assert_equal "<p>world</p>\n", data
155
+ end
156
+
157
+ teardown do
158
+ FileUtils.rm_r(@site.output_path)
94
159
  end
95
160
  end
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gollum-site
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 9
9
- version: 0.1.9
4
+ prerelease:
5
+ version: 0.1.10
10
6
  platform: ruby
11
7
  authors:
12
8
  - Daniel Reverri
@@ -14,8 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-04-05 00:00:00 -07:00
18
- default_executable:
13
+ date: 2011-06-20 00:00:00 Z
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: gollum
@@ -25,10 +20,6 @@ dependencies:
25
20
  requirements:
26
21
  - - ">="
27
22
  - !ruby/object:Gem::Version
28
- segments:
29
- - 1
30
- - 2
31
- - 0
32
23
  version: 1.2.0
33
24
  type: :runtime
34
25
  version_requirements: *id001
@@ -40,10 +31,6 @@ dependencies:
40
31
  requirements:
41
32
  - - ">="
42
33
  - !ruby/object:Gem::Version
43
- segments:
44
- - 2
45
- - 2
46
- - 2
47
34
  version: 2.2.2
48
35
  type: :runtime
49
36
  version_requirements: *id002
@@ -55,13 +42,20 @@ dependencies:
55
42
  requirements:
56
43
  - - ">="
57
44
  - !ruby/object:Gem::Version
58
- segments:
59
- - 1
60
- - 1
61
- - 0
62
45
  version: 1.1.0
63
46
  type: :runtime
64
47
  version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: directory_watcher
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :runtime
58
+ version_requirements: *id004
65
59
  description: Generate a static site for Gollum Wikis
66
60
  email:
67
61
  - dan@basho.com
@@ -74,6 +68,7 @@ extra_rdoc_files: []
74
68
  files:
75
69
  - .gitignore
76
70
  - Gemfile
71
+ - Gemfile.lock
77
72
  - README.md
78
73
  - Rakefile
79
74
  - bin/gollum-site
@@ -472,6 +467,40 @@ files:
472
467
  - lib/gollum-site/site.rb
473
468
  - lib/gollum-site/version.rb
474
469
  - lib/gollum-site/wiki.rb
470
+ - test/examples/test_footer_and_sidebar.git/COMMIT_EDITMSG
471
+ - test/examples/test_footer_and_sidebar.git/HEAD
472
+ - test/examples/test_footer_and_sidebar.git/config
473
+ - test/examples/test_footer_and_sidebar.git/description
474
+ - test/examples/test_footer_and_sidebar.git/hooks/applypatch-msg.sample
475
+ - test/examples/test_footer_and_sidebar.git/hooks/commit-msg.sample
476
+ - test/examples/test_footer_and_sidebar.git/hooks/post-commit.sample
477
+ - test/examples/test_footer_and_sidebar.git/hooks/post-receive.sample
478
+ - test/examples/test_footer_and_sidebar.git/hooks/post-update.sample
479
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-applypatch.sample
480
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-commit.sample
481
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-rebase.sample
482
+ - test/examples/test_footer_and_sidebar.git/hooks/prepare-commit-msg.sample
483
+ - test/examples/test_footer_and_sidebar.git/hooks/update.sample
484
+ - test/examples/test_footer_and_sidebar.git/index
485
+ - test/examples/test_footer_and_sidebar.git/info/exclude
486
+ - test/examples/test_footer_and_sidebar.git/logs/HEAD
487
+ - test/examples/test_footer_and_sidebar.git/logs/refs/heads/master
488
+ - test/examples/test_footer_and_sidebar.git/objects/07/748c9bf3b10a2dbc88830595850c36b8908a94
489
+ - test/examples/test_footer_and_sidebar.git/objects/0d/8513659a6a4837331c5a407b333acaa7260275
490
+ - test/examples/test_footer_and_sidebar.git/objects/11/1fe2807960c86c8ee1c4d5141d068f52abadb6
491
+ - test/examples/test_footer_and_sidebar.git/objects/4b/9f13d3082668e68a988e7f74f7a94e34931652
492
+ - test/examples/test_footer_and_sidebar.git/objects/8b/137891791fe96927ad78e64b0aad7bded08bdc
493
+ - test/examples/test_footer_and_sidebar.git/objects/aa/69c7a27988b76fe398d1dccc171e25cfc99e3a
494
+ - test/examples/test_footer_and_sidebar.git/objects/bb/4397734f9c55a065348686324f81be81769642
495
+ - test/examples/test_footer_and_sidebar.git/objects/c0/a8e615860c09ef147e590c3335210b5efb7725
496
+ - test/examples/test_footer_and_sidebar.git/objects/cc/628ccd10742baea8241c5924df992b5c019f71
497
+ - test/examples/test_footer_and_sidebar.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
498
+ - test/examples/test_footer_and_sidebar.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
499
+ - test/examples/test_footer_and_sidebar.git/objects/f4/fcee7b7e2c4de453db5c4b70d7a6fc53ba9769
500
+ - test/examples/test_footer_and_sidebar.git/objects/f8/1dd0b9cec9c51bbf0ced5d75d329ab14ab4c69
501
+ - test/examples/test_footer_and_sidebar.git/packed-refs
502
+ - test/examples/test_footer_and_sidebar.git/refs/heads/master
503
+ - test/examples/test_footer_and_sidebar.git/refs/remotes/origin/HEAD
475
504
  - test/examples/test_site.git/COMMIT_EDITMSG
476
505
  - test/examples/test_site.git/HEAD
477
506
  - test/examples/test_site.git/config
@@ -552,7 +581,6 @@ files:
552
581
  - test/examples/test_site_no_layout.git/refs/heads/master
553
582
  - test/helper.rb
554
583
  - test/test_site.rb
555
- has_rdoc: true
556
584
  homepage: http://rubygems.org/gems/gollum-site
557
585
  licenses: []
558
586
 
@@ -566,25 +594,55 @@ required_ruby_version: !ruby/object:Gem::Requirement
566
594
  requirements:
567
595
  - - ">="
568
596
  - !ruby/object:Gem::Version
569
- segments:
570
- - 0
571
597
  version: "0"
572
598
  required_rubygems_version: !ruby/object:Gem::Requirement
573
599
  none: false
574
600
  requirements:
575
601
  - - ">="
576
602
  - !ruby/object:Gem::Version
577
- segments:
578
- - 0
579
603
  version: "0"
580
604
  requirements: []
581
605
 
582
606
  rubyforge_project: gollum-site
583
- rubygems_version: 1.3.7
607
+ rubygems_version: 1.7.2
584
608
  signing_key:
585
609
  specification_version: 3
586
610
  summary: Static site generator for Gollum Wikis
587
611
  test_files:
612
+ - test/examples/test_footer_and_sidebar.git/COMMIT_EDITMSG
613
+ - test/examples/test_footer_and_sidebar.git/HEAD
614
+ - test/examples/test_footer_and_sidebar.git/config
615
+ - test/examples/test_footer_and_sidebar.git/description
616
+ - test/examples/test_footer_and_sidebar.git/hooks/applypatch-msg.sample
617
+ - test/examples/test_footer_and_sidebar.git/hooks/commit-msg.sample
618
+ - test/examples/test_footer_and_sidebar.git/hooks/post-commit.sample
619
+ - test/examples/test_footer_and_sidebar.git/hooks/post-receive.sample
620
+ - test/examples/test_footer_and_sidebar.git/hooks/post-update.sample
621
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-applypatch.sample
622
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-commit.sample
623
+ - test/examples/test_footer_and_sidebar.git/hooks/pre-rebase.sample
624
+ - test/examples/test_footer_and_sidebar.git/hooks/prepare-commit-msg.sample
625
+ - test/examples/test_footer_and_sidebar.git/hooks/update.sample
626
+ - test/examples/test_footer_and_sidebar.git/index
627
+ - test/examples/test_footer_and_sidebar.git/info/exclude
628
+ - test/examples/test_footer_and_sidebar.git/logs/HEAD
629
+ - test/examples/test_footer_and_sidebar.git/logs/refs/heads/master
630
+ - test/examples/test_footer_and_sidebar.git/objects/07/748c9bf3b10a2dbc88830595850c36b8908a94
631
+ - test/examples/test_footer_and_sidebar.git/objects/0d/8513659a6a4837331c5a407b333acaa7260275
632
+ - test/examples/test_footer_and_sidebar.git/objects/11/1fe2807960c86c8ee1c4d5141d068f52abadb6
633
+ - test/examples/test_footer_and_sidebar.git/objects/4b/9f13d3082668e68a988e7f74f7a94e34931652
634
+ - test/examples/test_footer_and_sidebar.git/objects/8b/137891791fe96927ad78e64b0aad7bded08bdc
635
+ - test/examples/test_footer_and_sidebar.git/objects/aa/69c7a27988b76fe398d1dccc171e25cfc99e3a
636
+ - test/examples/test_footer_and_sidebar.git/objects/bb/4397734f9c55a065348686324f81be81769642
637
+ - test/examples/test_footer_and_sidebar.git/objects/c0/a8e615860c09ef147e590c3335210b5efb7725
638
+ - test/examples/test_footer_and_sidebar.git/objects/cc/628ccd10742baea8241c5924df992b5c019f71
639
+ - test/examples/test_footer_and_sidebar.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a
640
+ - test/examples/test_footer_and_sidebar.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
641
+ - test/examples/test_footer_and_sidebar.git/objects/f4/fcee7b7e2c4de453db5c4b70d7a6fc53ba9769
642
+ - test/examples/test_footer_and_sidebar.git/objects/f8/1dd0b9cec9c51bbf0ced5d75d329ab14ab4c69
643
+ - test/examples/test_footer_and_sidebar.git/packed-refs
644
+ - test/examples/test_footer_and_sidebar.git/refs/heads/master
645
+ - test/examples/test_footer_and_sidebar.git/refs/remotes/origin/HEAD
588
646
  - test/examples/test_site.git/COMMIT_EDITMSG
589
647
  - test/examples/test_site.git/HEAD
590
648
  - test/examples/test_site.git/config