#!/usr/bin/ruby1.6 # # hikisetup - setup hiki for debian systems # Copyright (C) Taku YASUI # require 'getoptlong' require 'ftools' SRCDIR = '/usr/share/hiki' def parse_options options = Hash.new parser = GetoptLong.new parser.set_options(['--help', '-h', GetoptLong::NO_ARGUMENT], ['--copy', '-c', GetoptLong::NO_ARGUMENT]) parser.each_option { |name, arg| options[name.sub(/^--/, "")] = arg } show_usage if options['help'] return options end def setup_symlink(dir) File.makedirs("#{dir}/plugin", "#{dir}/theme") Dir.glob("#{SRCDIR}/plugin/*.rb") do |file| filename = File.basename(file) next if ( File.exist?("#{dir}/plugin/#{filename}") && ! File.symlink?("#{dir}/plugin/#{filename}") ) File.unlink("#{dir}/plugin/#{filename}") if ( File.exist?("#{dir}/plugin/#{filename}") ) system('ln', '-sf', file, "#{dir}/plugin") end Dir.glob("#{SRCDIR}/theme/*") do |file| filename = File.basename(file) next if ( File.exist?("#{dir}/theme/#{filename}") && ! File.symlink?("#{dir}/theme/#{filename}") ) File.unlink("#{dir}/theme/#{filename}") if ( File.exist?("#{dir}/theme/#{filename}") ) system('ln', '-sf', file, "#{dir}/theme") end if ( File.directory?("#{dir}/messages") ) STDERR.puts "Warning: directory #{dir}/messages already exists." else system('ln', '-sf', "#{SRCDIR}/messages", dir) end if ( File.directory?("#{dir}/template") ) STDERR.puts "Warning: directory #{dir}/template already exists." else system('ln', '-sf', "#{SRCDIR}/template", dir) end if ( File.directory?("#{dir}/style") ) STDERR.puts "Warning: directory #{dir}/style already exists." else system('ln', '-sf', "#{SRCDIR}/style", dir) end File.unlink("#{dir}/hiki.cgi") if ( File.exist?("#{dir}/hiki.cgi") ) File.symlink("#{SRCDIR}/hiki.cgi", "#{dir}/hiki.cgi") end def setup_copy(dir) system('cp', '-dfR', "#{SRCDIR}/plugin", dir) system('cp', '-dfR', "#{SRCDIR}/theme", dir) system('cp', '-dfR', "#{SRCDIR}/messages", dir) system('cp', '-dfR', "#{SRCDIR}/template", dir) system('cp', '-dfR', "#{SRCDIR}/style", dir) File.unlink("#{dir}/hiki.cgi") if ( File.exist?("#{dir}/hiki.cgi") ) File.cp("#{SRCDIR}/hiki.cgi", dir) end def show_usage print <<_EOT Usage: hikisetup [OPTIONS] [directory] OPTIONS: --help, -h: Show this help --copy, -c: Copy CGI and some files instead of symlink _EOT end def main begin opts = parse_options dir = ARGV[0] || '.' File.makedirs(dir) if ( ! File.directory?("#{dir}/data") ) system('cp', '-r', "#{SRCDIR}/data", dir) end if ( ! File.exist?("#{dir}/hikiconf.rb") ) File.cp("#{SRCDIR}/hikiconf.rb", dir) end if ( opts['copy']) setup_copy(dir) else setup_symlink(dir) end if ( File.directory?('/var/www/tdiary/theme') ) Dir.glob("/var/www/tdiary/theme/*") do |file| filename = File.basename(file) next if ( File.exist?("#{dir}/theme/#{filename}") && ! File.symlink?("#{dir}/theme/#{filename}") ) File.unlink("#{dir}/theme/#{filename}") if ( File.exist?("#{dir}/theme/#{filename}") ) system('ln', '-sf', file, "#{dir}/theme") end end puts "hikisetup succeeded!" puts "Please edit #{dir}/hikiconf.rb" rescue puts 'Error: ' + $! puts "hikisetup failed!" end end main if __FILE__ == $0