Created
March 19, 2010 23:05
-
-
Save bps/338298 to your computer and use it in GitHub Desktop.
Rakefile to deploy dotfiles
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rake' | |
require 'digest' | |
begin | |
require 'grit' | |
rescue | |
end | |
$home = ENV['HOME'] | |
raise "#{$home} is not a directory" if not File.directory? $home | |
task :default => :install_all | |
desc "Copy dotfiles into home directory w/correct permissions." | |
task :install_all do | |
begin | |
repo = Grit::Repo.new('.') | |
branch = repo.head.name | |
rescue | |
end | |
puts "Installing dotfiles #{branch.nil? ? "" : "from " + branch + " "}into #{$home} ..." | |
files = %w{ | |
bash_profile | |
bashrc | |
gemrc | |
gitconfig | |
gitignore | |
gvimrc | |
inputrc | |
lbdbrc | |
logrotate | |
screenrc | |
ssh | |
vim | |
vimrc | |
} | |
files.each { |f| install f } | |
end | |
def install(filename) | |
if File.directory?(filename) | |
dest_filename = dest(filename) | |
if not File.directory? dest_filename | |
mkdir_p dest_filename, :verbose => false | |
end | |
dir_mode = File.lstat(dest_filename).mode | |
if dir_mode != 0755 | |
chmod 0755, dest_filename, :verbose => false | |
end | |
Dir[File.join(filename, '*')].each {|f| install f } | |
else | |
dest_filename = dest(filename) | |
if File.exists? dest_filename | |
if same_version? filename | |
return | |
end | |
if not File.writable? dest_filename | |
# Temporarily make it writable | |
file_mode = File.lstat(dest_filename).mode | |
chmod file_mode | 0200, dest_filename, :verbose => false | |
end | |
end | |
copy_f filename | |
end | |
end | |
def dest(filename) | |
File.join($home, '.' + filename) | |
end | |
def same_version?(filename) | |
sha = Digest::SHA1.new | |
file_sha = sha.file(filename) | |
sha = Digest::SHA1.new | |
dest_file_sha = sha.file(dest(filename)) | |
file_sha == dest_file_sha ? true : false | |
end | |
def copy_f(filename) | |
dest_filename = dest(filename) | |
puts "Copying #{filename} to #{dest_filename} ..." | |
cp filename, dest_filename, :verbose => false | |
chmod 0444, dest_filename, :verbose => false | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment