From 7c800d3b0753b76e0880853728ef87abd00e01ca Mon Sep 17 00:00:00 2001 From: edeustace Date: Thu, 23 Aug 2012 12:07:30 +0200 Subject: [PATCH 1/4] Added a configuration variable: keep_files (default: ['.git']), based on this pull request: https://github.com/mojombo/jekyll/pull/556 --- bin/jekyll | 5 +++++ jekyll.gemspec | 7 +++++-- lib/jekyll.rb | 1 + lib/jekyll/site.rb | 18 ++++++++++++++++-- test/test_site.rb | 27 +++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) diff --git a/bin/jekyll b/bin/jekyll index 74cb99b0ad5..077695160bc 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -145,6 +145,11 @@ opts = OptionParser.new do |opts| puts "Jekyll " + Jekyll::VERSION exit 0 end + + opts.on( "--keep-files filename1,filename2", Array, "Whether to keep files that match the filename (default: .git)") do |names| + puts "keep-files option: #{names}" + options['keep_files'] = names + end end # Read command line options into `options` hash diff --git a/jekyll.gemspec b/jekyll.gemspec index 55201ae8146..1c181122d54 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |s| s.name = 'jekyll' s.version = '0.11.2' - s.date = '2011-12-27' + s.date = '2012-08-23' s.rubyforge_project = 'jekyll' s.summary = "A simple, blog aware, static site generator." @@ -74,10 +74,12 @@ Gem::Specification.new do |s| lib/jekyll/migrators/csv.rb lib/jekyll/migrators/drupal.rb lib/jekyll/migrators/enki.rb + lib/jekyll/migrators/joomla.rb lib/jekyll/migrators/marley.rb lib/jekyll/migrators/mephisto.rb lib/jekyll/migrators/mt.rb lib/jekyll/migrators/posterous.rb + lib/jekyll/migrators/rss.rb lib/jekyll/migrators/textpattern.rb lib/jekyll/migrators/tumblr.rb lib/jekyll/migrators/typo.rb @@ -90,6 +92,7 @@ Gem::Specification.new do |s| lib/jekyll/static_file.rb lib/jekyll/tags/highlight.rb lib/jekyll/tags/include.rb + lib/jekyll/tags/post_url.rb test/helper.rb test/source/.htaccess test/source/_includes/sig.markdown @@ -141,9 +144,9 @@ Gem::Specification.new do |s| test/test_post.rb test/test_rdiscount.rb test/test_redcarpet.rb + test/test_redcloth.rb test/test_site.rb test/test_tags.rb - test/test_redcloth.rb ] # = MANIFEST = diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 65e16cdbbb8..50125b08829 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -59,6 +59,7 @@ module Jekyll 'source' => Dir.pwd, 'destination' => File.join(Dir.pwd, '_site'), 'plugins' => File.join(Dir.pwd, '_plugins'), + 'keep_files' => ['.git'], 'layouts' => '_layouts', 'future' => true, diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index 8a78e915f13..b34902648c3 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -5,7 +5,8 @@ module Jekyll class Site attr_accessor :config, :layouts, :posts, :pages, :static_files, :categories, :exclude, :include, :source, :dest, :lsi, :pygments, - :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts + :permalink_style, :tags, :time, :future, :safe, :plugins, :limit_posts, + :keep_files attr_accessor :converters, :generators @@ -26,6 +27,7 @@ def initialize(config) self.include = config['include'] || [] self.future = config['future'] self.limit_posts = config['limit_posts'] || nil + self.keep_files = config['keep_files'] || [] self.reset self.setup @@ -217,7 +219,11 @@ def cleanup # all files and directories in destination, including hidden ones dest_files = Set.new Dir.glob(File.join(self.dest, "**", "*"), File::FNM_DOTMATCH) do |file| - dest_files << file unless file =~ /\/\.{1,2}$/ + if self.keep_files.length > 0 + dest_files << file unless file =~ /\/\.{1,2}$/ or file =~ keep_file_regex + else + dest_files << file unless file =~ /\/\.{1,2}$/ + end end # files to be written @@ -242,6 +248,14 @@ def cleanup FileUtils.rm_rf(obsolete_files.to_a) end + # create a regex from the keep_files array + # ['.git','.svn'] => /\/(\.git|\/.svn)/ + def keep_file_regex + or_list = self.keep_files.map.inject("") { |x,y| "#{x}|#{y}" }[1..-1] + pattern = "\/(#{or_list.gsub(".", "\.")})" + Regexp.new pattern + end + # Write static files, pages, and posts. # # Returns nothing. diff --git a/test/test_site.rb b/test/test_site.rb index 712bf359b76..26bfaa524ac 100644 --- a/test/test_site.rb +++ b/test/test_site.rb @@ -180,6 +180,13 @@ class TestSite < Test::Unit::TestCase File.open(dest_dir('qux/obsolete.html'), 'w') # empty directory FileUtils.mkdir(dest_dir('quux')) + FileUtils.mkdir(dest_dir('.git')) + FileUtils.mkdir(dest_dir('.svn')) + FileUtils.mkdir(dest_dir('.hg')) + # single file in repository + File.open(dest_dir('.git/HEAD'), 'w') + File.open(dest_dir('.svn/HEAD'), 'w') + File.open(dest_dir('.hg/HEAD'), 'w') end teardown do @@ -187,6 +194,9 @@ class TestSite < Test::Unit::TestCase FileUtils.rm_f(dest_dir('obsolete.html')) FileUtils.rm_rf(dest_dir('qux')) FileUtils.rm_f(dest_dir('quux')) + FileUtils.rm_rf(dest_dir('.git')) + FileUtils.rm_rf(dest_dir('.svn')) + FileUtils.rm_rf(dest_dir('.hg')) end should 'remove orphaned files in destination' do @@ -195,6 +205,23 @@ class TestSite < Test::Unit::TestCase assert !File.exist?(dest_dir('obsolete.html')) assert !File.exist?(dest_dir('qux')) assert !File.exist?(dest_dir('quux')) + assert File.exist?(dest_dir('.git')) + assert File.exist?(dest_dir('.git/HEAD')) + end + + should 'remove orphaned files in destination - keep_files .svn' do + + config = Jekyll::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'keep_files' => ['.svn']}) + @site = Site.new(config) + @site.process + assert !File.exist?(dest_dir('.htpasswd')) + assert !File.exist?(dest_dir('obsolete.html')) + assert !File.exist?(dest_dir('qux')) + assert !File.exist?(dest_dir('quux')) + assert !File.exist?(dest_dir('.git')) + assert !File.exist?(dest_dir('.git/HEAD')) + assert File.exist?(dest_dir('.svn')) + assert File.exist?(dest_dir('.svn/HEAD')) end end From 3da0bb3a7482004093d41fd6c4c2764cfb3cace2 Mon Sep 17 00:00:00 2001 From: edeustace Date: Thu, 23 Aug 2012 12:13:04 +0200 Subject: [PATCH 2/4] removed puts --- bin/jekyll | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/jekyll b/bin/jekyll index 077695160bc..03c26c22e8a 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -147,7 +147,6 @@ opts = OptionParser.new do |opts| end opts.on( "--keep-files filename1,filename2", Array, "Whether to keep files that match the filename (default: .git)") do |names| - puts "keep-files option: #{names}" options['keep_files'] = names end end From 4bae42a671ba549bf05b2eabbcb8d3fcf26da430 Mon Sep 17 00:00:00 2001 From: edeustace Date: Sun, 9 Dec 2012 11:43:49 +0100 Subject: [PATCH 3/4] use Array.join instead of Array.inject, add .svn to defaults --- lib/jekyll.rb | 2 +- lib/jekyll/site.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 50125b08829..f74e428b488 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -59,7 +59,7 @@ module Jekyll 'source' => Dir.pwd, 'destination' => File.join(Dir.pwd, '_site'), 'plugins' => File.join(Dir.pwd, '_plugins'), - 'keep_files' => ['.git'], + 'keep_files' => ['.git','.svn'], 'layouts' => '_layouts', 'future' => true, diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index b34902648c3..058e6e11286 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -251,7 +251,7 @@ def cleanup # create a regex from the keep_files array # ['.git','.svn'] => /\/(\.git|\/.svn)/ def keep_file_regex - or_list = self.keep_files.map.inject("") { |x,y| "#{x}|#{y}" }[1..-1] + or_list = self.keep_files.join("|") pattern = "\/(#{or_list.gsub(".", "\.")})" Regexp.new pattern end From 6eed91871f24d081e5d9a7013dc1e8cf37e4e408 Mon Sep 17 00:00:00 2001 From: edeustace Date: Tue, 8 Jan 2013 23:17:06 +0100 Subject: [PATCH 4/4] Changes based on @mojombo's feedback --- jekyll.gemspec | 7 ++----- lib/jekyll/site.rb | 10 +++++++--- test/test_site.rb | 1 - 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/jekyll.gemspec b/jekyll.gemspec index 1c181122d54..55201ae8146 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |s| s.name = 'jekyll' s.version = '0.11.2' - s.date = '2012-08-23' + s.date = '2011-12-27' s.rubyforge_project = 'jekyll' s.summary = "A simple, blog aware, static site generator." @@ -74,12 +74,10 @@ Gem::Specification.new do |s| lib/jekyll/migrators/csv.rb lib/jekyll/migrators/drupal.rb lib/jekyll/migrators/enki.rb - lib/jekyll/migrators/joomla.rb lib/jekyll/migrators/marley.rb lib/jekyll/migrators/mephisto.rb lib/jekyll/migrators/mt.rb lib/jekyll/migrators/posterous.rb - lib/jekyll/migrators/rss.rb lib/jekyll/migrators/textpattern.rb lib/jekyll/migrators/tumblr.rb lib/jekyll/migrators/typo.rb @@ -92,7 +90,6 @@ Gem::Specification.new do |s| lib/jekyll/static_file.rb lib/jekyll/tags/highlight.rb lib/jekyll/tags/include.rb - lib/jekyll/tags/post_url.rb test/helper.rb test/source/.htaccess test/source/_includes/sig.markdown @@ -144,9 +141,9 @@ Gem::Specification.new do |s| test/test_post.rb test/test_rdiscount.rb test/test_redcarpet.rb - test/test_redcloth.rb test/test_site.rb test/test_tags.rb + test/test_redcloth.rb ] # = MANIFEST = diff --git a/lib/jekyll/site.rb b/lib/jekyll/site.rb index 058e6e11286..d8b729f97bc 100644 --- a/lib/jekyll/site.rb +++ b/lib/jekyll/site.rb @@ -220,7 +220,7 @@ def cleanup dest_files = Set.new Dir.glob(File.join(self.dest, "**", "*"), File::FNM_DOTMATCH) do |file| if self.keep_files.length > 0 - dest_files << file unless file =~ /\/\.{1,2}$/ or file =~ keep_file_regex + dest_files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex else dest_files << file unless file =~ /\/\.{1,2}$/ end @@ -248,8 +248,12 @@ def cleanup FileUtils.rm_rf(obsolete_files.to_a) end - # create a regex from the keep_files array - # ['.git','.svn'] => /\/(\.git|\/.svn)/ + # Private: creates a regular expression from the keep_files array + # + # Examples + # ['.git','.svn'] creates the following regex: /\/(\.git|\/.svn)/ + # + # Returns the regular expression def keep_file_regex or_list = self.keep_files.join("|") pattern = "\/(#{or_list.gsub(".", "\.")})" diff --git a/test/test_site.rb b/test/test_site.rb index 26bfaa524ac..833d797917a 100644 --- a/test/test_site.rb +++ b/test/test_site.rb @@ -210,7 +210,6 @@ class TestSite < Test::Unit::TestCase end should 'remove orphaned files in destination - keep_files .svn' do - config = Jekyll::DEFAULTS.merge({'source' => source_dir, 'destination' => dest_dir, 'keep_files' => ['.svn']}) @site = Site.new(config) @site.process