@@ -9,8 +9,8 @@ use crate::{
99 ask_password, check_password,
1010 core:: {
1111 AclStrategy , CreateOptions , KeepOptions , OwnerOptions , PathFilter , PathTransformers ,
12- PathnameEditor , PermissionStrategy , TimeFilter , TimeFilters , TimeOptions ,
13- TimestampStrategy , XattrStrategy , collect_items, collect_split_archives, entry_option,
12+ PathnameEditor , PermissionStrategy , TimeFilterResolver , TimeOptions , TimestampStrategy ,
13+ XattrStrategy , collect_items, collect_split_archives, entry_option,
1414 path_lock:: PathLocks ,
1515 re:: { bsd:: SubstitutionRule , gnu:: TransformRule } ,
1616 read_paths,
@@ -23,7 +23,7 @@ use crate::{
2323} ;
2424use clap:: { ArgGroup , Args , ValueHint } ;
2525use pna:: Archive ;
26- use std:: { env, fs , io, path:: PathBuf , sync:: Arc , time:: SystemTime } ;
26+ use std:: { env, io, path:: PathBuf , sync:: Arc , time:: SystemTime } ;
2727
2828#[ derive( Args , Clone , Debug ) ]
2929#[ clap( disable_help_flag = true ) ]
@@ -484,44 +484,17 @@ fn run_create_archive(args: StdioCommand) -> anyhow::Result<()> {
484484 if let Some ( working_dir) = args. working_dir {
485485 env:: set_current_dir ( working_dir) ?;
486486 }
487- let time_filters = TimeFilters {
488- ctime : TimeFilter {
489- newer_than : if let Some ( p) = & args. newer_ctime_than {
490- let metadata = fs:: metadata ( p) ?;
491- Some ( metadata. created ( ) . map_err ( |_| {
492- std:: io:: Error :: new (
493- std:: io:: ErrorKind :: Unsupported ,
494- format ! ( "--newer-ctime-than requires filesystem support for creation time (birth time), which is not available for '{}'" , p. display( ) )
495- )
496- } ) ?)
497- } else {
498- args. newer_ctime . map ( |it| it. to_system_time ( ) )
499- } ,
500- older_than : if let Some ( p) = & args. older_ctime_than {
501- let metadata = fs:: metadata ( p) ?;
502- Some ( metadata. created ( ) . map_err ( |_| {
503- std:: io:: Error :: new (
504- std:: io:: ErrorKind :: Unsupported ,
505- format ! ( "--older-ctime-than requires filesystem support for creation time (birth time), which is not available for '{}'" , p. display( ) )
506- )
507- } ) ?)
508- } else {
509- args. older_ctime . map ( |it| it. to_system_time ( ) )
510- } ,
511- } ,
512- mtime : TimeFilter {
513- newer_than : if let Some ( p) = & args. newer_mtime_than {
514- Some ( fs:: metadata ( p) ?. modified ( ) ?)
515- } else {
516- args. newer_mtime . map ( |it| it. to_system_time ( ) )
517- } ,
518- older_than : if let Some ( p) = & args. older_mtime_than {
519- Some ( fs:: metadata ( p) ?. modified ( ) ?)
520- } else {
521- args. older_mtime . map ( |it| it. to_system_time ( ) )
522- } ,
523- } ,
524- } ;
487+ let time_filters = TimeFilterResolver {
488+ newer_ctime_than : args. newer_ctime_than . as_deref ( ) ,
489+ older_ctime_than : args. older_ctime_than . as_deref ( ) ,
490+ newer_ctime : args. newer_ctime . map ( |it| it. to_system_time ( ) ) ,
491+ older_ctime : args. older_ctime . map ( |it| it. to_system_time ( ) ) ,
492+ newer_mtime_than : args. newer_mtime_than . as_deref ( ) ,
493+ older_mtime_than : args. older_mtime_than . as_deref ( ) ,
494+ newer_mtime : args. newer_mtime . map ( |it| it. to_system_time ( ) ) ,
495+ older_mtime : args. older_mtime . map ( |it| it. to_system_time ( ) ) ,
496+ }
497+ . resolve ( ) ?;
525498 let target_items = collect_items (
526499 & files,
527500 !args. no_recursive ,
@@ -812,44 +785,17 @@ fn run_append(args: StdioCommand) -> anyhow::Result<()> {
812785 if let Some ( working_dir) = args. working_dir {
813786 env:: set_current_dir ( working_dir) ?;
814787 }
815- let time_filters = TimeFilters {
816- ctime : TimeFilter {
817- newer_than : if let Some ( p) = & args. newer_ctime_than {
818- let metadata = fs:: metadata ( p) ?;
819- Some ( metadata. created ( ) . map_err ( |_| {
820- std:: io:: Error :: new (
821- std:: io:: ErrorKind :: Unsupported ,
822- format ! ( "--newer-ctime-than requires filesystem support for creation time (birth time), which is not available for '{}'" , p. display( ) )
823- )
824- } ) ?)
825- } else {
826- args. newer_ctime . map ( |it| it. to_system_time ( ) )
827- } ,
828- older_than : if let Some ( p) = & args. older_ctime_than {
829- let metadata = fs:: metadata ( p) ?;
830- Some ( metadata. created ( ) . map_err ( |_| {
831- std:: io:: Error :: new (
832- std:: io:: ErrorKind :: Unsupported ,
833- format ! ( "--older-ctime-than requires filesystem support for creation time (birth time), which is not available for '{}'" , p. display( ) )
834- )
835- } ) ?)
836- } else {
837- args. older_ctime . map ( |it| it. to_system_time ( ) )
838- } ,
839- } ,
840- mtime : TimeFilter {
841- newer_than : if let Some ( p) = & args. newer_mtime_than {
842- Some ( fs:: metadata ( p) ?. modified ( ) ?)
843- } else {
844- args. newer_mtime . map ( |it| it. to_system_time ( ) )
845- } ,
846- older_than : if let Some ( p) = & args. older_mtime_than {
847- Some ( fs:: metadata ( p) ?. modified ( ) ?)
848- } else {
849- args. older_mtime . map ( |it| it. to_system_time ( ) )
850- } ,
851- } ,
852- } ;
788+ let time_filters = TimeFilterResolver {
789+ newer_ctime_than : args. newer_ctime_than . as_deref ( ) ,
790+ older_ctime_than : args. older_ctime_than . as_deref ( ) ,
791+ newer_ctime : args. newer_ctime . map ( |it| it. to_system_time ( ) ) ,
792+ older_ctime : args. older_ctime . map ( |it| it. to_system_time ( ) ) ,
793+ newer_mtime_than : args. newer_mtime_than . as_deref ( ) ,
794+ older_mtime_than : args. older_mtime_than . as_deref ( ) ,
795+ newer_mtime : args. newer_mtime . map ( |it| it. to_system_time ( ) ) ,
796+ older_mtime : args. older_mtime . map ( |it| it. to_system_time ( ) ) ,
797+ }
798+ . resolve ( ) ?;
853799 if let Some ( file) = & archive_path {
854800 let archive = open_archive_then_seek_to_end ( file) ?;
855801 let target_items = collect_items (
0 commit comments