(&self, root: &ostree::MutableTree, def: &FileDef)
| 644 | |
| 645 | #[context("Writing filedef {}", def.path.as_str())] |
| 646 | pub fn write_filedef(&self, root: &ostree::MutableTree, def: &FileDef) -> Result<()> { |
| 647 | let parent_path = def.path.parent(); |
| 648 | let parent = if let Some(parent_path) = parent_path { |
| 649 | let meta = require_dirmeta(&self.srcrepo, parent_path, self.selinux)?; |
| 650 | Some(ensure_parent_dirs(root, &def.path, meta.as_str())?) |
| 651 | } else { |
| 652 | None |
| 653 | }; |
| 654 | let parent = parent.as_ref().unwrap_or(root); |
| 655 | let name = def.path.file_name().expect("file name"); |
| 656 | let label = if self.selinux { |
| 657 | Some(SeLabel::from_path(&def.path)) |
| 658 | } else { |
| 659 | None |
| 660 | }; |
| 661 | let mut xattrs = label.as_ref().map(|v| v.xattrs()).unwrap_or_default(); |
| 662 | xattrs.extend( |
| 663 | def.xattrs |
| 664 | .iter() |
| 665 | .map(|xattr| (xattr.key.as_bytes_with_nul(), &xattr.value[..])), |
| 666 | ); |
| 667 | let xattrs = if xattrs.is_empty() { |
| 668 | None |
| 669 | } else { |
| 670 | xattrs.sort_by(|a, b| a.0.cmp(b.0)); |
| 671 | Some(xattrs.to_variant()) |
| 672 | }; |
| 673 | let xattrs = xattrs.as_ref(); |
| 674 | let checksum = match &def.ty { |
| 675 | FileDefType::Regular(contents) => self |
| 676 | .srcrepo |
| 677 | .write_regfile_inline( |
| 678 | None, |
| 679 | 0, |
| 680 | 0, |
| 681 | libc::S_IFREG | def.mode, |
| 682 | xattrs, |
| 683 | contents.as_bytes(), |
| 684 | gio::Cancellable::NONE, |
| 685 | ) |
| 686 | .context("Writing regfile inline")?, |
| 687 | FileDefType::Symlink(target) => self.srcrepo.write_symlink( |
| 688 | None, |
| 689 | def.uid, |
| 690 | def.gid, |
| 691 | xattrs, |
| 692 | target.as_str(), |
| 693 | gio::Cancellable::NONE, |
| 694 | )?, |
| 695 | FileDefType::Directory => { |
| 696 | let d = parent.ensure_dir(name)?; |
| 697 | let meta = require_dirmeta(&self.srcrepo, &def.path, self.selinux)?; |
| 698 | d.set_metadata_checksum(meta.as_str()); |
| 699 | return Ok(()); |
| 700 | } |
| 701 | }; |
| 702 | parent |
| 703 | .replace_file(name, checksum.as_str()) |
no test coverage detected