diff --git a/cdc_rsync/file_finder_and_sender.cc b/cdc_rsync/file_finder_and_sender.cc index 2fbc8d5..d1b5be6 100644 --- a/cdc_rsync/file_finder_and_sender.cc +++ b/cdc_rsync/file_finder_and_sender.cc @@ -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! diff --git a/cdc_rsync_server/cdc_rsync_server.cc b/cdc_rsync_server/cdc_rsync_server.cc index c167c5e..b6f9e04 100644 --- a/cdc_rsync_server/cdc_rsync_server.cc +++ b/cdc_rsync_server/cdc_rsync_server.cc @@ -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(©_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(); diff --git a/common/file_watcher_win.cc b/common/file_watcher_win.cc index 4ee1710..125e0c8 100644 --- a/common/file_watcher_win.cc +++ b/common/file_watcher_win.cc @@ -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(::GetProcAddress( diff --git a/common/remote_util.cc b/common/remote_util.cc index edaaece..0af9448 100644 --- a/common/remote_util.cc +++ b/common/remote_util.cc @@ -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(); }; diff --git a/manifest/manifest_updater_test.cc b/manifest/manifest_updater_test.cc index ddd3609..3346acc 100644 --- a/manifest/manifest_updater_test.cc +++ b/manifest/manifest_updater_test.cc @@ -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&) {})); }