Avoid creating a storage folder for fastboot devices command
Bug: 284267164 Bug: 284786311 Test: fastboot devices doesn't create a .fastboot folder Change-Id: I3e44c2a838e4287e6220c18f6e805cc71e0c9669 Signed-off-by: Dmitrii Merkurev <dimorinny@google.com>
This commit is contained in:
parent
b991aeb5f7
commit
6c008ff888
4 changed files with 15 additions and 14 deletions
|
@ -396,7 +396,7 @@ static Transport* NetworkDeviceConnected(bool print = false) {
|
|||
|
||||
ConnectedDevicesStorage storage;
|
||||
std::set<std::string> devices;
|
||||
{
|
||||
if (storage.Exists()) {
|
||||
FileLock lock = storage.Lock();
|
||||
devices = storage.ReadDevices(lock);
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ const char kPathSeparator =
|
|||
#endif
|
||||
|
||||
std::string GetHomeDirPath();
|
||||
bool FileExists(const std::string& path);
|
||||
bool EnsureDirectoryExists(const std::string& directory_path);
|
||||
|
||||
class FileLock {
|
||||
|
|
|
@ -23,24 +23,19 @@
|
|||
#include "util.h"
|
||||
|
||||
ConnectedDevicesStorage::ConnectedDevicesStorage() {
|
||||
const std::string home_path = GetHomeDirPath();
|
||||
if (home_path.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const std::string home_fastboot_path = home_path + kPathSeparator + ".fastboot";
|
||||
|
||||
if (!EnsureDirectoryExists(home_fastboot_path)) {
|
||||
LOG(FATAL) << "Cannot create directory: " << home_fastboot_path;
|
||||
}
|
||||
home_fastboot_path_ = GetHomeDirPath() + kPathSeparator + ".fastboot";
|
||||
devices_path_ = home_fastboot_path_ + kPathSeparator + "devices";
|
||||
|
||||
// We're using a separate file for locking because the Windows LockFileEx does not
|
||||
// permit opening a file stream for the locked file, even within the same process. So,
|
||||
// we have to use fd or handle API to manipulate the storage files, which makes it
|
||||
// nearly impossible to fully rewrite a file content without having to recreate it.
|
||||
// Unfortunately, this is not an option during holding a lock.
|
||||
devices_path_ = home_fastboot_path + kPathSeparator + "devices";
|
||||
devices_lock_path_ = home_fastboot_path + kPathSeparator + "devices.lock";
|
||||
devices_lock_path_ = home_fastboot_path_ + kPathSeparator + "devices.lock";
|
||||
}
|
||||
|
||||
bool ConnectedDevicesStorage::Exists() const {
|
||||
return FileExists(devices_path_);
|
||||
}
|
||||
|
||||
void ConnectedDevicesStorage::WriteDevices(const FileLock&, const std::set<std::string>& devices) {
|
||||
|
@ -63,5 +58,8 @@ void ConnectedDevicesStorage::Clear(const FileLock&) {
|
|||
}
|
||||
|
||||
FileLock ConnectedDevicesStorage::Lock() const {
|
||||
if (!EnsureDirectoryExists(home_fastboot_path_)) {
|
||||
LOG(FATAL) << "Cannot create directory: " << home_fastboot_path_;
|
||||
}
|
||||
return FileLock(devices_lock_path_);
|
||||
}
|
|
@ -24,13 +24,15 @@
|
|||
class ConnectedDevicesStorage {
|
||||
public:
|
||||
ConnectedDevicesStorage();
|
||||
|
||||
bool Exists() const;
|
||||
void WriteDevices(const FileLock&, const std::set<std::string>& devices);
|
||||
std::set<std::string> ReadDevices(const FileLock&);
|
||||
void Clear(const FileLock&);
|
||||
|
||||
FileLock Lock() const;
|
||||
|
||||
private:
|
||||
std::string home_fastboot_path_;
|
||||
std::string devices_path_;
|
||||
std::string devices_lock_path_;
|
||||
};
|
Loading…
Reference in a new issue