404 - Not Found

エントリ名のページの管理方法を早速取り入れた(今までは記憶頼り、あんま考えてなかったなぁ)のだが、管理ファイルの追加・削除がダルイのでスクリプトを作った。


最初シェルスクリプトMakefile を直接書き換えるやつを作っていたが、\(バックスラッシュ)のエスケープが見苦しかったので書き直した。

#!/usr/bin/env ruby
require 'optparse'
require 'pathname'
require 'fileutils'

MAKEFILE = '/home/babie/config/Makefile'
LISTFILE = '/home/babie/config/target_files.txt'


def create_makefile
   rules = []
   target_files = File.read(LISTFILE).split rescue []
   target_files.sort.each do |target_file|
      rule = <<EOF
#{target_file}: #{target_file[1..-1]}
\t${INSTALL} $? $@

EOF
      rules << rule
   end
   File.open(MAKEFILE, "w") { |out|
      out.puts <<MAKE
#
# this makefile created by #{__FILE__}.
# (1) $ ruby #{$0}
# (2) $ sudo make
#

TARGET_FILES = \\
#{target_files.sort.map do |e| "\t"+e end.join(" \\\n")}

#{rules}
MAKE
   }
end

def add_target_file src
   #src = Pathname.new(src).realpath.to_s
   target_files = []
   target_files += File.read(LISTFILE).split
   target_files << src
   target_files.uniq!

   myconf = src[1..-1]
   FileUtils.mkdir_p(File.dirname(myconf))
   FileUtils.cp(src, myconf)

   File.open(LISTFILE, "w") { |list|
      list.puts target_files.sort
   }
   #`svn add #{myconf]}`
   #`svn up`
end

def del_target_file src
   #src = Pathname.new(src).realpath.to_s
   target_files = File.read(LISTFILE).split rescue []
   target_files.delete(src)
   target_files.uniq!

   File.open(LISTFILE, "w") { |list|
      list.puts target_files.sort
   }
   #myconf = src[1..-1]
   #`svn rm #{myconf]}`
   #`svn up`
end

$OPT = Struct.new("Opt", :func, :file).new
ARGV.options { |o|
   o.def_option('--help', 'print this message.') { puts o; exit 0 }
   o.def_option('--add VAL', 'add new config file.') { |v| $OPT.func = :add; $OPT.file = v }
   o.def_option('--del VAL', 'delete existed config file.') { |v| $OPT.func = :del; $OPT.file = v }
   o.parse!
}


if __FILE__ == $0
   case $OPT.func
   when :add
      add_target_file $OPT.file
   when :del
      del_target_file $OPT.file
   end

   create_makefile
end

んー、いつにもまして汚く、やっつけ感満載。

  • $OPT は普通にハッシュの方が良かったにゃあ(猫ひろしは未だ見たことない)。
  • 絶対パスが欲しくて Pathname#realpath を使おうとしたが、エイリアスも展開しちゃうので都合が悪かった。