From 2f415171915482080f8e5c63b53a4a387e4de5b7 Mon Sep 17 00:00:00 2001
From: Ryan Daigle <ryan.daigle@gmail.com>
Date: Sat, 23 Jan 2010 15:47:43 -0500
Subject: Update to rakefile to allow working on a single post at a time (and
 saving regeneration time)

---
 .gitignore |  5 +++--
 Rakefile   | 21 +++++++++++++++++++--
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/.gitignore b/.gitignore
index a835c79f..2d8a7c69 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 site
-*/.sass-cache
-.DS_Store
\ No newline at end of file
+.sass-cache
+test
+source/_stash
diff --git a/Rakefile b/Rakefile
index b872ac4c..a38f1814 100644
--- a/Rakefile
+++ b/Rakefile
@@ -4,6 +4,8 @@ site_url  = "http://yoursite.com"   # deployed site url for sitemap.xml generato
 port      = "4000"     # preview project port eg. http://localhost:4000
 site      = "site"     # compiled site directory
 source    = "source" # source file directory
+stash     = "_stash"
+posts     = "_posts"
 
 ## -- Rsync Deploy config -- ##
 ssh_user      = "user@host.com"    # for rsync deployment
@@ -47,6 +49,21 @@ task :post, :filename do |t, args|
   end
 end
 
+# usage rake isolate[my-post]
+desc "Move all other posts than the one currently being worked on to a temporary stash location (stash) so regenerating the site happens much quicker."
+task :isolate, :filename do |t, args|
+  stash_dir = "#{source}/#{stash}"
+  FileUtils.mkdir(stash_dir) unless File.exist?(stash_dir)
+  Dir.glob("#{source}/#{posts}/*.*") do |post|
+    FileUtils.mv post, stash_dir unless post.include?(args.filename)
+  end
+end
+
+desc "Move all stashed posts back into the posts directory, ready for site generation."
+task :integrate do
+  FileUtils.mv Dir.glob("#{source}/#{stash}/*.*"), "#{source}/#{posts}/"
+end
+
 desc "list tasks"
 task :list do
   puts "Tasks: #{(Rake::Task.tasks - [Rake::Task[:list]]).to_sentence}"
@@ -109,13 +126,13 @@ task :watch do
 end
 
 desc "generate and deploy website via rsync"
-multitask :deploy_rsync => [:default, :clean_debug] do
+multitask :deploy_rsync => [:integrate, :default, :clean_debug] do
   puts ">>> Deploying website to #{site_url} <<<"
   ok_failed system("rsync -avz --delete #{site}/ #{ssh_user}:#{document_root}")
 end
 
 desc "generate and deploy website to github user pages"
-multitask :deploy_github => [:default, :clean_debug] do
+multitask :deploy_github => [:integrate, :default, :clean_debug] do
   puts ">>> Deploying #{deploy_branch} branch to Github Pages <<<"
   require 'git'
   repo = Git.open('.')
-- 
cgit v1.2.1