Expand path variables for sync destination (#18)

Expand path variables for sync destination

Running commands like cdc_rsync C:\assets\* host:~/assets -vr would create a directory called ~assets. This CL expands path variables properly.
This commit is contained in:
Lutz Justen
2022-11-25 14:21:21 +01:00
committed by GitHub
parent 991f61cc4d
commit 8c4a0465e9
5 changed files with 19 additions and 13 deletions

View File

@@ -100,14 +100,14 @@ FileFinderAndSender::FileFinderAndSender(PathFilter* path_filter,
recursive_(recursive),
relative_(relative),
request_size_threshold_(request_byte_threshold) {
// (internal): Support / instead of \ in the source folder.
// Support / instead of \ in the source folder.
path::FixPathSeparators(&sources_dir_);
}
FileFinderAndSender::~FileFinderAndSender() = default;
absl::Status FileFinderAndSender::FindAndSendFiles(std::string source) {
// (internal): Support / instead of \ in sources.
// Support / instead of \ in sources.
path::FixPathSeparators(&source);
// Special case, "." and ".." should not specify the directory, but the files
// inside this directory!

View File

@@ -303,7 +303,7 @@ absl::Status CdcRsyncServer::HandleSetOptions() {
existing_ = request.existing();
copy_dest_ = request.copy_dest();
// (internal): Support \ instead of / in destination folders.
// Support \ instead of / in destination folders.
path::FixPathSeparators(&destination_);
path::EnsureEndsWithPathSeparator(&destination_);
if (!copy_dest_.empty()) {
@@ -311,6 +311,13 @@ absl::Status CdcRsyncServer::HandleSetOptions() {
path::EnsureEndsWithPathSeparator(&copy_dest_);
}
// Expand e.g. ~.
status = path::ExpandPathVariables(&destination_);
if (!status.ok()) {
return WrapStatus(status, "Failed to expand destination '%s'",
destination_);
}
assert(path_filter_.IsEmpty());
for (int n = 0; n < request.filter_rules_size(); ++n) {
std::string fixed_pattern = request.filter_rules(n).pattern();

View File

@@ -80,9 +80,9 @@ class AsyncFileWatcher {
files_changed_cb_(std::move(files_changed_cb)),
dir_recreated_cb_(std::move(dir_recreated_cb)),
timeout_ms_(timeout_ms) {
// (internal): Check whether ReadDirectoryChangesExW is available.
// It requires Windows 10, version 1709, released October 17, 2017, or
// corresponding Windows Server versions.
// Check whether ReadDirectoryChangesExW is available. It requires Windows
// 10, version 1709, released October 17, 2017, or Corresponding Windows
// Server versions.
if (!enforceLegacyReadDirectoryChangesForTesting) {
read_directory_changes_ex_ =
reinterpret_cast<decltype(ReadDirectoryChangesExW)*>(::GetProcAddress(

View File

@@ -119,9 +119,9 @@ ProcessStartInfo RemoteUtil::BuildProcessStartInfoForSsh(
ProcessStartInfo RemoteUtil::BuildProcessStartInfoForSshPortForward(
int local_port, int remote_port, bool reverse) {
// (internal): Usually, one would pass in -N here, but this makes the
// connection terribly slow! As a workaround, don't use -N (will open a
// shell), but simply eat the output.
// Usually, one would pass in -N here, but this makes the connection terribly
// slow! As a workaround, don't use -N (will open a shell), but simply eat the
// output.
ProcessStartInfo si = BuildProcessStartInfoForSshInternal(
GetPortForwardingArg(local_port, remote_port, reverse) + "-n ", "");
si.stdout_handler = [](const void*, size_t) { return absl::OkStatus(); };

View File

@@ -613,10 +613,9 @@ TEST_F(ManifestUpdaterTest, UpdateAll_LargeIntermediateIndirectDirAssets) {
cfg_.src_dir = path::Join(base_dir_, "non_empty");
ManifestUpdater updater(&data_store_, cfg_);
// (internal): Run UpdateAll() with intermediate manifest push. The push
// causes a Flush() call to the manifest builder, which pushes some assets to
// indirect lists. This used to invalidate pointers and cause asserts to
// trigger.
// Run UpdateAll() with intermediate manifest push. The push causes a Flush()
// call to the manifest builder, which pushes some assets to indirect lists.
// This used to invalidate pointers and cause asserts to trigger.
EXPECT_OK(updater.UpdateAll(&file_chunks_, [](const ContentIdProto&) {}));
}