mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
f2eb6aee68
Summary: This addressed 2 thread safety issues: 1. holding strong reference to `EdenMount` 2. converting unowned `stringPiece` to `std::string` Reviewed By: chadaustin Differential Revision: D30657955 fbshipit-source-id: 870e972d9e0fe3897e021aeca77bf2db8c5fbb20
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This software may be used and distributed according to the terms of the
|
|
* GNU General Public License version 2.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <optional>
|
|
#include "eden/fs/utils/PathFuncs.h"
|
|
namespace facebook::eden {
|
|
|
|
class EdenMount;
|
|
|
|
class IActivityRecorder {
|
|
public:
|
|
explicit IActivityRecorder(std::shared_ptr<EdenMount> edenMount)
|
|
: edenMount_{std::move(edenMount)} {}
|
|
virtual ~IActivityRecorder() = default;
|
|
virtual uint64_t addSubscriber(AbsolutePathPiece outputPath) = 0;
|
|
virtual std::optional<std::string> removeSubscriber(uint64_t unique) = 0;
|
|
virtual std::vector<std::tuple<uint64_t, std::string>> getSubscribers() = 0;
|
|
|
|
protected:
|
|
std::shared_ptr<EdenMount> edenMount_;
|
|
};
|
|
|
|
class NullActivityRecorder : public IActivityRecorder {
|
|
public:
|
|
NullActivityRecorder() : IActivityRecorder{{}} {}
|
|
uint64_t addSubscriber(AbsolutePathPiece /* outputPath */) override {
|
|
return 0;
|
|
}
|
|
std::optional<std::string> removeSubscriber(uint64_t /* unique */) override {
|
|
return std::nullopt;
|
|
}
|
|
std::vector<std::tuple<uint64_t, std::string>> getSubscribers() override {
|
|
return {};
|
|
}
|
|
};
|
|
|
|
using ActivityRecorderFactory =
|
|
std::function<std::unique_ptr<IActivityRecorder>(
|
|
std::shared_ptr<EdenMount>)>;
|
|
|
|
} // namespace facebook::eden
|