diff --git a/lib/middleman-gh-pages/tasks/gh-pages.rake b/lib/middleman-gh-pages/tasks/gh-pages.rake index 7c13644..c455104 100644 --- a/lib/middleman-gh-pages/tasks/gh-pages.rake +++ b/lib/middleman-gh-pages/tasks/gh-pages.rake @@ -1,4 +1,5 @@ require 'fileutils' +require 'tmpdir' def remote_name ENV.fetch("REMOTE_NAME", "origin") @@ -12,6 +13,15 @@ def nothing_to_commit? `git status --porcelain`.chomp.empty? end +def backup_and_restore(dir, file, &block) + yield unless File.exist?(File.join(dir, file)) + Dir.mktmpdir do |tmpdir| + mv File.join(dir, file), tmpdir + yield + mv File.join(tmpdir, file), dir + end +end + PROJECT_ROOT = `git rev-parse --show-toplevel`.strip BUILD_DIR = File.join(PROJECT_ROOT, "build") GH_PAGES_REF = File.join(BUILD_DIR, ".git/refs/remotes/#{remote_name}/#{branch_name}") @@ -65,8 +75,10 @@ end desc "Compile all files into the build directory" task :build do - cd PROJECT_ROOT do - sh "bundle exec middleman build --clean" + backup_and_restore(BUILD_DIR, ".git") do + cd PROJECT_ROOT do + sh "bundle exec middleman build --clean" + end end end