comparison rust/rhg/src/commands/status.rs @ 50463:f57f5ab0e220

branching: merge stable into default
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 09 May 2023 11:35:50 +0200
parents 98fc949bec14 51041a1a4c59
children f8412da86d05
comparison
equal deleted inserted replaced
50462:e06331275a53 50463:f57f5ab0e220
550 ) -> Result<(), CommandError> { 550 ) -> Result<(), CommandError> {
551 paths.sort_unstable(); 551 paths.sort_unstable();
552 // TODO: get the stdout lock once for the whole loop 552 // TODO: get the stdout lock once for the whole loop
553 // instead of in each write 553 // instead of in each write
554 for StatusPath { path, copy_source } in paths { 554 for StatusPath { path, copy_source } in paths {
555 let relative; 555 let relative_path;
556 let path = if let Some(relativize) = &self.relativize { 556 let relative_source;
557 relative = relativize.relativize(&path); 557 let (path, copy_source) = if let Some(relativize) =
558 &*relative 558 &self.relativize
559 {
560 relative_path = relativize.relativize(&path);
561 relative_source =
562 copy_source.as_ref().map(|s| relativize.relativize(s));
563 (&*relative_path, relative_source.as_deref())
559 } else { 564 } else {
560 path.as_bytes() 565 (path.as_bytes(), copy_source.as_ref().map(|s| s.as_bytes()))
561 }; 566 };
562 // TODO: Add a way to use `write_bytes!` instead of `format_bytes!` 567 // TODO: Add a way to use `write_bytes!` instead of `format_bytes!`
563 // in order to stream to stdout instead of allocating an 568 // in order to stream to stdout instead of allocating an
564 // itermediate `Vec<u8>`. 569 // itermediate `Vec<u8>`.
565 if !self.no_status { 570 if !self.no_status {
568 let linebreak = if self.print0 { b"\x00" } else { b"\n" }; 573 let linebreak = if self.print0 { b"\x00" } else { b"\n" };
569 self.ui.write_stdout_labelled( 574 self.ui.write_stdout_labelled(
570 &format_bytes!(b"{}{}", path, linebreak), 575 &format_bytes!(b"{}{}", path, linebreak),
571 label, 576 label,
572 )?; 577 )?;
573 if let Some(source) = copy_source { 578 if let Some(source) = copy_source.filter(|_| !self.no_status) {
574 let label = "status.copied"; 579 let label = "status.copied";
575 self.ui.write_stdout_labelled( 580 self.ui.write_stdout_labelled(
576 &format_bytes!(b" {}{}", source.as_bytes(), linebreak), 581 &format_bytes!(b" {}{}", source, linebreak),
577 label, 582 label,
578 )? 583 )?
579 } 584 }
580 } 585 }
581 Ok(()) 586 Ok(())