.* の管理

CVS から Subversion へ移行. Subversionディレクトリの移動が簡単で, もう CVS へ戻れない感じがする...

.emacs.d とか, .vimrc とか, とりあえず .dotfiles 以下に置いて, ~/. にsymlink することにした.

ものっそ適当に作成 ↓

#!/usr/bin/env ruby
$KCODE = 'u'
require 'fileutils'
# mkdir -p
class Dir
  def Dir.mkdir_p(arg)
    path = String.new
    arg.each("/") do |x|
      path = path + x
      Dir.mkdir(path) unless FileTest.exist?(path)
    end
  end
end
# ディレクトリ内のファイルリスト. .svn と ., .. は無視
dir = Dir.glob('.*').reject{|ign| ign =~ /((^\.svn)|(^\.*$))/ }
# 既存ファイルのバックアップを dotfiles/backup 以下に作成する
backupdir = Dir.pwd + '/backup'
Dir.mkdir_p(backupdir)
# メイン
dir.each do |file|
  # ソースファイル
  dotfile = Dir.pwd + '/' + file
  # symlink の位置
  symlink = ENV['HOME'] + '/' + file
  # バックアップの位置
  backup = backupdir + '/' + file
  # ファイルが存在する場合
  if FileTest.exist?(symlink)
    # バックアップへの退避
    File.rename(symlink, backup) if FileTest.file?(symlink)
    FileUtils.move(symlink, backup) if FileTest.directory?(symlink)
    # backup が symlink の場合は削除
    File.delete(backup) if FileTest.symlink?(backup)
    # symlink 作成
    File.symlink(dotfile, symlink)
  else
    # symlink 作成
    File.symlink(dotfile, symlink)
  end
end
# backup direcotry が空なら削除
if Dir.entries(backupdir).reject{|i| i=~ /^\.*$/}.size == 0
  Dir.delete(backupdir)
end