earlier than system time.
- shogi_server/league/floodgate_thread.rb: SetupFloodgate#start
now returns an instance correctly.
+ - ../shogi_server.rb, ../shogi_server/util.rb: Refactored
+ mkdir_for to Mkdir.mkdir_for.
2010-07-25 Daigo Moriwaki <daigo at debian dot org>
module_function :reload
class Logger < ::Logger
- @@mkdir_mutex = Mutex.new
def initialize(logdev, shift_age = 0, shift_size = 1048576)
super
def shift_log_period(now)
age_file = age_file_name(now)
move_age_file_in_the_way(age_file)
- mkdir_for(age_file)
+ unless Mkdir.mkdir_for(age_file)
+ @dev.write("[ERROR] Could not create a directory: %s\n" % [File.dirname(age_file)])
+ return true
+ end
@dev.close
rename_file(@filename, age_file)
rename_file(age_file, new_file)
end
- def mkdir_for(path)
- @@mkdir_mutex.synchronize do
- unless FileTest.directory?(File.dirname(path))
- begin
- FileUtils.mkdir_p File.dirname(path)
- rescue
- @dev.write("[ERROR] Could not create a directory: %s\n" % [File.dirname(path)])
- end
- end
- end # mutex
- end
-
end # @logdev
end
require 'date'
require 'fileutils'
require 'pathname'
+require 'thread'
module ShogiServer
return index == 0 ? 7 : index
end
module_function :parse_dow
+
+ # Mkdir in a thread-safe way.
+ #
+ class Mkdir
+ @@mutex = Mutex.new
+
+ # Return true if a directory is successfully created or a directory
+ # exists already; false otherwise.
+ #
+ # @param path a directory name of a path to be created. For example,
+ # given /hoge/hoo/foo.txt, aim to create /hoge/hoo.
+ def Mkdir.mkdir_for(path)
+ unless FileTest.directory?(File.dirname(path))
+ @@mutex.synchronize do
+ unless FileTest.directory?(File.dirname(path))
+ begin
+ FileUtils.mkdir_p File.dirname(path)
+ rescue
+ return false
+ end
+ end
+ end # mutex
+ end
+ return true
+ end
+ end # class Mkdir
end
@logger.formatter = ShogiServer::Formatter.new
@logger.level = TestableLogger::DEBUG
@logger.datetime_format = "%Y-%m-%d %H:%M:%S"
- @test_dir = File.join($topdir, "hoge", "hoo", "foo.txt")
- end
-
- def teardown
- if FileTest.directory?(File.dirname(@test_dir))
- Dir.rmdir(File.dirname(@test_dir))
- Dir.rmdir(File.join($topdir, "hoge"))
- end
end
def test_dummy
@logger.logdev.result_rename_file
end
- def test_mkdir_for
- assert !FileTest.directory?(File.dirname(@test_dir))
- @logger.logdev.mkdir_for(@test_dir)
- assert FileTest.directory?(File.dirname(@test_dir))
- end
end
$:.unshift File.join(File.dirname(__FILE__), "..")
+$topdir = File.expand_path File.dirname(__FILE__)
require 'test/unit'
require 'shogi_server/util'
end
end
+
+
+class TestMkdir < Test::Unit::TestCase
+ def setup
+ @test_dir = File.join($topdir, "hoge", "hoo", "foo.txt")
+ end
+
+ def teardown
+ if FileTest.directory?(File.dirname(@test_dir))
+ Dir.rmdir(File.dirname(@test_dir))
+ Dir.rmdir(File.join($topdir, "hoge"))
+ end
+ end
+
+ def test_mkdir_for
+ assert !FileTest.directory?(File.dirname(@test_dir))
+ ShogiServer::Mkdir.mkdir_for(@test_dir)
+ assert FileTest.directory?(File.dirname(@test_dir))
+ end
+
+end