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