LockFile::LockFile(const boost::filesystem::path& path)
: path_(path) {
auto new_path = path_.parent_path() / ".lockfile";
try {
boost::filesystem::rename(path_ / "lockfile", new_path);
} catch (boost::filesystem::filesystem_error& e) {
throw BadLockFile();
}
}
LockFile::~LockFile() {
auto new_path = path_.parent_path() / "lockfile";
try {
boost::filesystem::rename(path_ / ".lockfile", new_path);
} catch (boost::filesystem::filesystem_error&) {
}
}
TG9ja0ZpbGU6OkxvY2tGaWxlKGNvbnN0IGJvb3N0OjpmaWxlc3lzdGVtOjpwYXRoJiBwYXRoKQo6IHBhdGhfKHBhdGgpIHsKICBhdXRvIG5ld19wYXRoID0gcGF0aF8ucGFyZW50X3BhdGgoKSAvICIubG9ja2ZpbGUiOwogIHRyeSB7CiAgICBib29zdDo6ZmlsZXN5c3RlbTo6cmVuYW1lKHBhdGhfIC8gImxvY2tmaWxlIiwgbmV3X3BhdGgpOwogIH0gY2F0Y2ggKGJvb3N0OjpmaWxlc3lzdGVtOjpmaWxlc3lzdGVtX2Vycm9yJiBlKSB7CiAgICB0aHJvdyBCYWRMb2NrRmlsZSgpOwogIH0KfQoKTG9ja0ZpbGU6On5Mb2NrRmlsZSgpIHsKICBhdXRvIG5ld19wYXRoID0gcGF0aF8ucGFyZW50X3BhdGgoKSAvICJsb2NrZmlsZSI7CiAgdHJ5IHsKICAgIGJvb3N0OjpmaWxlc3lzdGVtOjpyZW5hbWUocGF0aF8gLyAiLmxvY2tmaWxlIiwgbmV3X3BhdGgpOwogIH0gY2F0Y2ggKGJvb3N0OjpmaWxlc3lzdGVtOjpmaWxlc3lzdGVtX2Vycm9yJikgewogIH0KfQ==