| 706 | } |
| 707 | |
| 708 | pub fn commit_filedefs(&self, defs: impl IntoIterator<Item = Result<FileDef>>) -> Result<()> { |
| 709 | let root = ostree::MutableTree::new(); |
| 710 | let cancellable = gio::Cancellable::NONE; |
| 711 | let tx = self.srcrepo.auto_transaction(cancellable)?; |
| 712 | for def in defs { |
| 713 | let def = def?; |
| 714 | self.write_filedef(&root, &def)?; |
| 715 | } |
| 716 | let root = self.srcrepo.write_mtree(&root, cancellable)?; |
| 717 | let root = root.downcast_ref::<ostree::RepoFile>().unwrap(); |
| 718 | // You win internet points if you understand this date reference |
| 719 | let ts = chrono::DateTime::parse_from_rfc2822("Fri, 29 Aug 1997 10:30:42 PST")?.timestamp(); |
| 720 | // Some default metadata fixtures |
| 721 | let metadata = glib::VariantDict::new(None); |
| 722 | metadata.insert( |
| 723 | "buildsys.checksum", |
| 724 | &"41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3", |
| 725 | ); |
| 726 | metadata.insert("ostree.container-cmd", &vec!["/usr/bin/bash"]); |
| 727 | metadata.insert("version", &"42.0"); |
| 728 | #[allow(clippy::explicit_auto_deref)] |
| 729 | if self.bootable { |
| 730 | metadata.insert(ostree::METADATA_KEY_BOOTABLE, &true); |
| 731 | } |
| 732 | let metadata = metadata.to_variant(); |
| 733 | let commit = self.srcrepo.write_commit_with_time( |
| 734 | None, |
| 735 | None, |
| 736 | None, |
| 737 | Some(&metadata), |
| 738 | root, |
| 739 | ts as u64, |
| 740 | cancellable, |
| 741 | )?; |
| 742 | self.srcrepo |
| 743 | .transaction_set_ref(None, self.testref(), Some(commit.as_str())); |
| 744 | tx.commit(cancellable)?; |
| 745 | |
| 746 | // Add detached metadata so we can verify it makes it through |
| 747 | let detached = glib::VariantDict::new(None); |
| 748 | detached.insert("my-detached-key", &"my-detached-value"); |
| 749 | let detached = detached.to_variant(); |
| 750 | self.srcrepo.write_commit_detached_metadata( |
| 751 | commit.as_str(), |
| 752 | Some(&detached), |
| 753 | gio::Cancellable::NONE, |
| 754 | )?; |
| 755 | |
| 756 | let gpghome = self.path.join("src/gpghome"); |
| 757 | self.srcrepo.sign_commit( |
| 758 | &commit, |
| 759 | TEST_GPG_KEYID_1, |
| 760 | Some(gpghome.as_str()), |
| 761 | gio::Cancellable::NONE, |
| 762 | )?; |
| 763 | |
| 764 | // Verify that this is what is expected. |
| 765 | let commit_object = self.srcrepo.load_commit(&commit)?.0; |