Skip to content

Commit

Permalink
Update to rpm 0.12
Browse files Browse the repository at this point in the history
  • Loading branch information
dralley committed Jul 17, 2023
1 parent 9d24039 commit dcb93be
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 16 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ quick-xml = { version = "0.23.0", default-features = false }
# rayon = "1.5.1"
thiserror = "1.0.40"
niffler = { version = "2.5.0", features = ["bz2", "xz", "gz", "zstd"], default-features = false }
rpm = { version = "0.11.0", default-features = false, optional = true }
rpm = { version = "0.12.0", default-features = false, optional = true }
# tempdir = "0.3.7"
digest = "0.10.6"
sha1 = "0.10.5"
sha2 = "0.10.6"
md-5 = "0.10.5"
# bitflags = "1.3.2"
hex = "0.4.3"
indexmap = "1.9.0"
indexmap = "2.0.0"
pyo3 = { version = "0.18.1", features = ["extension-module"], optional = true }

[lib]
Expand Down
6 changes: 3 additions & 3 deletions src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,14 @@ impl EVR {
(&self.epoch, &self.version, &self.release)
}

pub fn parse_values(evr: & str) -> (& str, & str, & str) {
pub fn parse_values(evr: &str) -> (&str, &str, &str) {
let (epoch, vr) = evr.split_once(':').unwrap_or(evr.split_at(0));
let (version, release) = vr.split_once('-').unwrap_or((vr, ""));

(epoch, version, release)
}

pub fn parse(evr: & str) -> Self {
pub fn parse(evr: &str) -> Self {
EVR::parse_values(evr).into()
}
}
Expand Down Expand Up @@ -91,7 +91,7 @@ impl fmt::Display for EVR {
}
}

impl PartialOrd for EVR {
impl PartialOrd for EVR {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
Expand Down
158 changes: 158 additions & 0 deletions src/comps.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
<?xml encoding="UTF-8"?>

<!ELEMENT comps (group+,environment+,category+,langpacks?)>
<!ATTLIST comps xmlns CDATA #FIXED ''>

<!ELEMENT group (id,name,description,default,uservisible,langonly?, packagelist)>
<!ATTLIST group xmlns CDATA #FIXED ''>

<!ELEMENT environment (id,name,description,display_order?,grouplist,optionlist)>
<!ATTLIST environment xmlns CDATA #FIXED ''>

<!ELEMENT category (id,name,description,display_order?,grouplist)>
<!ATTLIST category xmlns CDATA #FIXED ''>

<!ELEMENT default (#PCDATA)>
<!ATTLIST default xmlns CDATA #FIXED ''>

<!ELEMENT uservisible (#PCDATA)>
<!ATTLIST uservisible xmlns CDATA #FIXED ''>

<!ELEMENT langonly (#PCDATA)>
<!ATTLIST langonly xmlns CDATA #FIXED ''>

<!ELEMENT packagelist (packagereq)+>
<!ATTLIST packagelist xmlns CDATA #FIXED ''>

<!ELEMENT display_order (#PCDATA)>
<!ATTLIST display_order xmlns CDATA #FIXED ''>

<!ELEMENT grouplist (groupid)+>
<!ATTLIST grouplist xmlns CDATA #FIXED ''>

<!ELEMENT packagereq (#PCDATA)>
<!ATTLIST packagereq xmlns CDATA #FIXED '' requires NMTOKEN #IMPLIED type NMTOKEN #REQUIRED>

<!ELEMENT groupid (#PCDATA)>
<!ATTLIST groupid xmlns CDATA #FIXED ''>

<!ELEMENT id (#PCDATA)>
<!ATTLIST id xmlns CDATA #FIXED ''>

<!ELEMENT name (#PCDATA)>
<!ATTLIST name xmlns CDATA #FIXED ''>

<!ELEMENT description (#PCDATA)>
<!ATTLIST description xmlns CDATA #FIXED ''>

<!ELEMENT optionlist (groupid)+>
<!ATTLIST optionlist xmlns CDATA #FIXED ''>




<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>
<group>
<id>additional-devel</id>
<name>Additional Development</name>
<description>Additional development headers and libraries for developing applications</description>
<default>false</default>
<uservisible>false</uservisible>
<biarchonly>true</biarchonly>
<langonly>fr</langonly>
<packagelist>
<packagereq type="default">alsa-lib-devel</packagereq>
<packagereq type="default">audit-libs-devel</packagereq>
<packagereq type="default">binutils-devel</packagereq>
<packagereq type="default">boost-devel</packagereq>
<packagereq type="default">bzip2-devel</packagereq>
<packagereq type="default">cyrus-sasl-devel</packagereq>
</packagelist>
</group>
<group>
<id>backup-client</id>
<name>Backup Client</name>
<description>Client tools for connecting to a backup server and doing backups.</description>
<default>true</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="mandatory">amanda-client</packagereq>
<packagereq type="optional">bacula-client</packagereq>
</packagelist>
</group>
<group>
<id>backup-server</id>
<name>Backup Server</name>
<description>Software to centralize your infrastructure's backups.</description>
<default>false</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="mandatory">amanda-server</packagereq>
<packagereq type="optional">mt-st</packagereq>
<packagereq type="optional">mtx</packagereq>
</packagelist>
</group>
<group>
<id>ansible-node</id>
<name>Ansible node</name>
<default>false</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="mandatory">python2-dnf</packagereq>
<packagereq type="conditional" requires="selinux-policy">libselinux-python</packagereq>
</packagelist>
</group>
<group>
<id>d-development</id>
<name>D Development Tools and Libraries</name>
<description>These include development tools and libraries such as ldc, and geany-tag.</description>
<default>false</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="mandatory" basearchonly="true">ldc</packagereq>
<packagereq type="mandatory" basearchonly="true">ldc-druntime</packagereq>
<packagereq type="mandatory" basearchonly="true">ldc-druntime-devel</packagereq>
<packagereq type="mandatory" basearchonly="true">ldc-phobos-devel</packagereq>
<packagereq type="mandatory">make</packagereq>
<packagereq type="mandatory">pkgconfig</packagereq>
<packagereq type="default">ctags</packagereq>
<packagereq type="default">indent</packagereq>
<packagereq type="optional">astyle</packagereq>
<packagereq type="optional">cmake</packagereq>
<packagereq type="optional">derelict-devel</packagereq>
<packagereq type="optional">geany</packagereq>
<packagereq type="optional">gl3n-devel</packagereq>
<packagereq type="optional">insight</packagereq>
<packagereq type="optional">nemiver</packagereq>
<packagereq type="optional">uncrustify</packagereq>
</packagelist>
</group>
<group>
<id>empty-group-1</id>
<name>empty group 1</name>
<description>empty group 1 desc</description>
<default>false</default>
<uservisible>true</uservisible>
<packagelist/>
</group>
<group>
<id>empty-group-2</id>
<name>empty group 2</name>
<description>empty group 2 desc</description>
<default>false</default>
<uservisible>true</uservisible>
</group>
<group>
<id>unknown-group</id>
<name>unknown group</name>
<description>unknown group desc</description>
<default>false</default>
<uservisible>true</uservisible>
<packagelist>
<packagereq type="unknown">unknown</packagereq>
<packagereq type="what">unknown2</packagereq>
</packagelist>
</group>
</comps>
2 changes: 1 addition & 1 deletion src/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub const METADATA_UPDATEINFO: &str = "updateinfo";
pub enum MetadataError {
#[cfg(feature = "read_rpm")]
#[error(transparent)]
RpmReadError(#[from] rpm::RPMError),
RpmReadError(#[from] rpm::Error),
#[error(transparent)]
XmlParseError(#[from] quick_xml::Error),
#[error(transparent)]
Expand Down
20 changes: 10 additions & 10 deletions src/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,30 @@ pub mod rpm_parsing {
use crate::{Changelog, ChecksumType, PackageFile, Requirement, EVR};

use super::*;
use rpm::{DependencyFlags, FileEntry, Header};
use rpm;

impl TryFrom<rpm::Dependency> for Requirement {
type Error = MetadataError;

fn try_from(d: rpm::Dependency) -> Result<Self, Self::Error> {
let flags = if d.flags.contains(DependencyFlags::GE) {
let flags = if d.flags.contains(rpm::DependencyFlags::GE) {
Some("GE".to_owned())
} else if d.flags.contains(DependencyFlags::LE) {
} else if d.flags.contains(rpm::DependencyFlags::LE) {
Some("LE".to_owned())
} else if d.flags.contains(DependencyFlags::EQUAL) {
} else if d.flags.contains(rpm::DependencyFlags::EQUAL) {
Some("EQ".to_owned())
} else if d.flags.contains(DependencyFlags::LESS) {
} else if d.flags.contains(rpm::DependencyFlags::LESS) {
Some("LT".to_owned())
} else if d.flags.contains(DependencyFlags::GREATER) {
} else if d.flags.contains(rpm::DependencyFlags::GREATER) {
Some("GT".to_owned())
} else {
None
};

let pre = d.flags
& (DependencyFlags::SCRIPT_PRE
| DependencyFlags::SCRIPT_POST
| DependencyFlags::PREREQ);
& (rpm::DependencyFlags::SCRIPT_PRE
| rpm::DependencyFlags::SCRIPT_POST
| rpm::DependencyFlags::PREREQ);

let evr = EVR::parse(&d.version);

Expand Down Expand Up @@ -117,7 +117,7 @@ pub mod rpm_parsing {
let file = File::open(&path)?;
let file_metadata = file.metadata()?;

let pkg = rpm::RPMPackageMetadata::parse(&mut BufReader::new(&file))?;
let pkg = rpm::PackageMetadata::parse(&mut BufReader::new(&file))?;

let mut pkg_metadata = Package::default();

Expand Down

0 comments on commit dcb93be

Please sign in to comment.