- let error2 = error.clone();
-
- let catalog = catalog.clone();
- let exclude_pattern = Vec::new();
- let child = thread::spawn(move || {
- let mut guard = catalog.lock().unwrap();
- let mut writer = unsafe { std::fs::File::from_raw_fd(tx) };
- if let Err(err) = pxar::Encoder::encode(
- path,
- &mut dir,
- &mut writer,
- Some(&mut *guard),
- device_set,
- verbose,
- skip_lost_and_found,
- pxar::flags::DEFAULT,
- exclude_pattern,
- entries_max,
- ) {
+ let error2 = Arc::clone(&error);
+ let handler = async move {
+ let writer = TokioWriterAdapter::new(std::io::BufWriter::with_capacity(
+ buffer_size,
+ StdChannelWriter::new(tx),
+ ));
+
+ let verbose = options.verbose;
+
+ let writer = pxar::encoder::sync::StandardWriter::new(writer);
+ if let Err(err) = crate::pxar::create_archive(
+ dir,
+ writer,
+ crate::pxar::Flags::DEFAULT,
+ move |path| {
+ if verbose {
+ println!("{:?}", path);
+ }
+ Ok(())
+ },
+ Some(catalog),
+ options,
+ ).await {