Auto merge of #124112 - beetrees:incremental-os-str, r=Nadrieril · rust-lang/rust@3288583 (original) (raw)

`@@ -162,8 +162,11 @@ pub fn query_cache_path(sess: &Session) -> PathBuf {

`

162

162

`fn lock_file_path(session_dir: &Path) -> PathBuf {

`

163

163

`let crate_dir = session_dir.parent().unwrap();

`

164

164

``

165

``

`-

let directory_name = session_dir.file_name().unwrap().to_string_lossy();

`

166

``

`-

assert_no_characters_lost(&directory_name);

`

``

165

`+

let directory_name = session_dir

`

``

166

`+

.file_name()

`

``

167

`+

.unwrap()

`

``

168

`+

.to_str()

`

``

169

`+

.expect("malformed session dir name: contains non-Unicode characters");

`

167

170

``

168

171

`let dash_indices: Vec<_> = directory_name.match_indices('-').map(|(idx, _)| idx).collect();

`

169

172

`if dash_indices.len() != 3 {

`

`@@ -329,8 +332,11 @@ pub fn finalize_session_directory(sess: &Session, svh: Option) {

`

329

332

``

330

333

`debug!("finalize_session_directory() - session directory: {}", incr_comp_session_dir.display());

`

331

334

``

332

``

`-

let old_sub_dir_name = incr_comp_session_dir.file_name().unwrap().to_string_lossy();

`

333

``

`-

assert_no_characters_lost(&old_sub_dir_name);

`

``

335

`+

let old_sub_dir_name = incr_comp_session_dir

`

``

336

`+

.file_name()

`

``

337

`+

.unwrap()

`

``

338

`+

.to_str()

`

``

339

`+

.expect("malformed session dir name: contains non-Unicode characters");

`

334

340

``

335

341

`// Keep the 's-{timestamp}-{random-number}' prefix, but replace the

`

336

342

`// '-working' part with the SVH of the crate

`

`@@ -527,8 +533,10 @@ where

`

527

533

`for session_dir in iter {

`

528

534

`` debug!("find_source_directory_in_iter - inspecting {}", session_dir.display());

``

529

535

``

530

``

`-

let directory_name = session_dir.file_name().unwrap().to_string_lossy();

`

531

``

`-

assert_no_characters_lost(&directory_name);

`

``

536

`+

let Some(directory_name) = session_dir.file_name().unwrap().to_str() else {

`

``

537

`+

debug!("find_source_directory_in_iter - ignoring");

`

``

538

`+

continue;

`

``

539

`+

};

`

532

540

``

533

541

`if source_directories_already_tried.contains(&session_dir)

`

534

542

` || !is_session_directory(&directory_name)

`

`@@ -619,12 +627,6 @@ fn crate_path(sess: &Session) -> PathBuf {

`

619

627

` incr_dir.join(crate_name)

`

620

628

`}

`

621

629

``

622

``

`-

fn assert_no_characters_lost(s: &str) {

`

623

``

`-

if s.contains('\u{FFFD}') {

`

624

``

`-

bug!("Could not losslessly convert '{}'.", s)

`

625

``

`-

}

`

626

``

`-

}

`

627

``

-

628

630

`fn is_old_enough_to_be_collected(timestamp: SystemTime) -> bool {

`

629

631

` timestamp < SystemTime::now() - Duration::from_secs(10)

`

630

632

`}

`

`@@ -657,14 +659,14 @@ pub(crate) fn garbage_collect_session_directories(sess: &Session) -> io::Result<

`

657

659

`};

`

658

660

``

659

661

`let entry_name = dir_entry.file_name();

`

660

``

`-

let entry_name = entry_name.to_string_lossy();

`

``

662

`+

let Some(entry_name) = entry_name.to_str() else {

`

``

663

`+

continue;

`

``

664

`+

};

`

661

665

``

662

666

`if is_session_directory_lock_file(&entry_name) {

`

663

``

`-

assert_no_characters_lost(&entry_name);

`

664

``

`-

lock_files.insert(entry_name.into_owned());

`

``

667

`+

lock_files.insert(entry_name.to_string());

`

665

668

`} else if is_session_directory(&entry_name) {

`

666

``

`-

assert_no_characters_lost(&entry_name);

`

667

``

`-

session_directories.insert(entry_name.into_owned());

`

``

669

`+

session_directories.insert(entry_name.to_string());

`

668

670

`} else {

`

669

671

`// This is something we don't know, leave it alone

`

670

672

`}

`