diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1d8625a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/plist-0.3.0.crate diff --git a/0001-Update-xml-rs-to-0.8.0-reimplement-plist-prologue.patch b/0001-Update-xml-rs-to-0.8.0-reimplement-plist-prologue.patch new file mode 100644 index 0000000..a3a0559 --- /dev/null +++ b/0001-Update-xml-rs-to-0.8.0-reimplement-plist-prologue.patch @@ -0,0 +1,76 @@ +From 45ab6d492c1a031485962e17d2af932d8af069d8 Mon Sep 17 00:00:00 2001 +From: Kevin Ballard +Date: Wed, 16 May 2018 14:28:31 -0700 +Subject: [PATCH] Update xml-rs to 0.8.0, reimplement plist prologue + +xml-rs 0.8.0 has an `inner_mut()` method we can use instead of turning +off character escaping. +--- + src/xml/writer.rs | 17 ++++++----------- + 1 file changed, 6 insertions(+), 11 deletions(-) + +diff --git a/src/xml/writer.rs b/src/xml/writer.rs +index e168128..4facfd2 100644 +--- a/src/xml/writer.rs ++++ b/src/xml/writer.rs +@@ -1,7 +1,6 @@ + use base64; + use std::borrow::Cow; + use std::io::Write; +-use xml_rs::escape::escape_str_pcdata; + use xml_rs::name::Name; + use xml_rs::namespace::Namespace; + use xml_rs::writer::events::XmlEvent as WriteXmlEvent; +@@ -38,7 +37,7 @@ pub struct EventWriter { + + impl EventWriter { + pub fn new(writer: W) -> EventWriter { +- let mut config = EmitterConfig::new() ++ let config = EmitterConfig::new() + .line_separator("\n") + .indent_string("\t") + .perform_indent(true) +@@ -47,7 +46,6 @@ impl EventWriter { + .cdata_to_characters(true) + .keep_element_names_stack(false) + .autopad_comments(true); +- config.perform_escaping = false; + + EventWriter { + xml_writer: XmlEventWriter::new_with_config(writer, config), +@@ -80,19 +78,16 @@ impl EventWriter { + } + + fn write_value(&mut self, value: &str) -> Result<()> { +- self.xml_writer +- .write(WriteXmlEvent::Characters(&escape_str_pcdata(value)))?; ++ self.xml_writer.write(WriteXmlEvent::Characters(value))?; + Ok(()) + } + + fn maybe_end_plist(&mut self) -> Result<()> { + // If there are no more open tags then write the element + if self.stack.len() == 1 { +- // We didn't tell the xml_writer about the tag so it thinks we're already at +- // the root. As such, it's not going to prettify our output, so we need to include +- // the newline ourselves. +- self.xml_writer.write(WriteXmlEvent::Characters("\n"))?; +- self.end_element("plist")?; ++ // We didn't tell the xml_writer about the tag so we'll skip telling it ++ // about the tag as well. ++ self.xml_writer.inner_mut().write(b"\n")?; + if let Some(Element::Root) = self.stack.pop() { + } else { + return Err(Error::InvalidData); +@@ -134,7 +129,7 @@ impl PlistEventWriter for EventWriter { + + + "#; +- self.xml_writer.write(WriteXmlEvent::Characters(prologue))?; ++ self.xml_writer.inner_mut().write(prologue.as_bytes())?; + + self.stack.push(Element::Root); + } +-- +2.19.0.rc1 + diff --git a/plist-fix-metadata.diff b/plist-fix-metadata.diff new file mode 100644 index 0000000..c08da30 --- /dev/null +++ b/plist-fix-metadata.diff @@ -0,0 +1,11 @@ +--- plist-0.3.0/Cargo.toml 1970-01-01T01:00:00+01:00 ++++ plist-0.3.0/Cargo.toml 2018-09-03T08:59:02.257027+02:00 +@@ -34,7 +34,7 @@ + optional = true + + [dependencies.xml-rs] +-version = "0.7.0" ++version = "0.8.0" + [dev-dependencies.serde_derive] + version = "1.0.2" + diff --git a/rust-plist.spec b/rust-plist.spec new file mode 100644 index 0000000..39424f5 --- /dev/null +++ b/rust-plist.spec @@ -0,0 +1,70 @@ +# Generated by rust2rpm +%bcond_without check +%global debug_package %{nil} + +%global crate plist + +Name: rust-%{crate} +Version: 0.3.0 +Release: 1%{?dist} +Summary: Rusty plist parser + +License: MIT +URL: https://crates.io/crates/plist +Source0: https://crates.io/api/v1/crates/%{crate}/%{version}/download#/%{crate}-%{version}.crate +# Initial patched metadata +# * Bump xml-rs to 0.8.0, https://github.com/ebarnard/rust-plist/commit/45ab6d492c1a031485962e17d2af932d8af069d8 +Patch0: plist-fix-metadata.diff +# Make it work with new xml-rs +Patch0001: 0001-Update-xml-rs-to-0.8.0-reimplement-plist-prologue.patch + +ExclusiveArch: %{rust_arches} + +BuildRequires: rust-packaging +# [dependencies] +BuildRequires: (crate(base64) >= 0.9.0 with crate(base64) < 0.10.0) +BuildRequires: (crate(byteorder) >= 1.1.0 with crate(byteorder) < 2.0.0) +BuildRequires: (crate(humantime) >= 1.1.1 with crate(humantime) < 2.0.0) +BuildRequires: (crate(serde) >= 1.0.2 with crate(serde) < 2.0.0) +BuildRequires: (crate(xml-rs) >= 0.8.0 with crate(xml-rs) < 0.9.0) +%if %{with check} +# [dev-dependencies] +BuildRequires: (crate(serde_derive) >= 1.0.2 with crate(serde_derive) < 2.0.0) +%endif + +%description +%{summary}. + +%package devel +Summary: %{summary} +BuildArch: noarch + +%description devel +A rusty plist parser. Supports Serde serialization. + +This package contains library source intended for building other packages +which use %{crate} from crates.io. + +%prep +%autosetup -n %{crate}-%{version} -p1 +%cargo_prep + +%build +%cargo_build + +%install +%cargo_install + +%if %{with check} +%check +%cargo_test +%endif + +%files devel +%license LICENCE +%doc README.md +%{cargo_registry}/%{crate}-%{version}/ + +%changelog +* Mon Sep 03 2018 Igor Gnatenko - 0.3.0-1 +- Initial package diff --git a/sources b/sources new file mode 100644 index 0000000..88ee6b3 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (plist-0.3.0.crate) = 8171689f24ad9c8579722d3a6269a80c955f11bb5fbae25050e07f518da339d91091b91cb0c6c41a6980402513f466d4e1e0e56abf6b9d09e68e95dbfc2175e6