assorted_debian_utils/
buildinfo.rs

1// Copyright 2022 Sebastian Ramacher
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4//! # Representation of buildinfos
5//!
6//! This module provides `Buildinfo` to represent some fields of a `.buildinfo` file.
7
8use std::io::BufRead;
9
10use serde::Deserialize;
11
12use crate::{
13    architectures::{Architecture, deserialize_architectures},
14    package::PackageName,
15    version::PackageVersion,
16};
17
18/// A build info
19#[derive(Debug, PartialEq, Eq, Deserialize, Hash)]
20#[serde(rename_all = "PascalCase")]
21pub struct Buildinfo {
22    /// Source package
23    pub source: PackageName,
24    /// Version of the package
25    pub version: PackageVersion,
26    /// Architectures of the build
27    #[serde(deserialize_with = "deserialize_architectures")]
28    pub architecture: Vec<Architecture>,
29}
30
31/// Read buildinfo from a reader
32pub fn from_reader(reader: impl BufRead) -> Result<Buildinfo, rfc822_like::de::Error> {
33    rfc822_like::from_reader(reader)
34}
35
36/// Read buildinfo from a string
37pub fn from_str(data: &str) -> Result<Buildinfo, rfc822_like::de::Error> {
38    rfc822_like::from_str(data)
39}
40
41#[cfg(test)]
42mod test {
43    use crate::{architectures::Architecture, buildinfo::Buildinfo, version::PackageVersion};
44
45    #[test]
46    fn deserialize() {
47        let data = r#"Format: 1.0
48Source: picnic
49Binary: libpicnic-dev libpicnic3 libpicnic3-dbgsym
50Architecture: i386 source
51Version: 3.0.11-1
52Checksums-Md5:
53 4b7826495233d2d3147ccaabead13a36 951 picnic_3.0.11-1.dsc
54 1610e5affd53cf17b64b5727a32a6db9 10180 libpicnic-dev_3.0.11-1_i386.deb
55 8229544cbadbe421e713fc247429b744 727956 libpicnic3-dbgsym_3.0.11-1_i386.deb
56 924c58e34c3ff074850201984493a44d 619732 libpicnic3_3.0.11-1_i386.deb
57Checksums-Sha1:
58 e6cd8381339635aea7f4850105dbbdb5ac33e248 951 picnic_3.0.11-1.dsc
59 d916aa5940e7c88fbe0fa420234c0a78db569c43 10180 libpicnic-dev_3.0.11-1_i386.deb
60 383843942719b1a5fa8cdf2d768a4b1566c80f4d 727956 libpicnic3-dbgsym_3.0.11-1_i386.deb
61 5fabd52dfee1258d2e9ac43f5d8c2f7ba61ca8cb 619732 libpicnic3_3.0.11-1_i386.deb
62Checksums-Sha256:
63 8b2a1969501be49fe11e8e8005bf9a3aac0e073d4c7fd97dcb8bfb6f8c9a222a 951 picnic_3.0.11-1.dsc
64 96ab1c37ca12b0fb28169b79cf4a850ede58ab269abcc36eb6e36a6e66906b47 10180 libpicnic-dev_3.0.11-1_i386.deb
65 d114fe20288c31fd2ac7644e1059fcc145788abff11325e84b0ad982ca486ed6 727956 libpicnic3-dbgsym_3.0.11-1_i386.deb
66 012f9a5a27dabfc72c4d7010406e9635a747b9c4c42bc9554aaecc4c9edd0fee 619732 libpicnic3_3.0.11-1_i386.deb
67Build-Origin: Debian
68Build-Architecture: i386
69Build-Date: Tue, 25 Jan 2022 21:54:55 +0000
70Build-Path: /build/picnic-SQCH61/picnic-3.0.11
71Installed-Build-Depends:
72 autoconf (= 2.71-2),
73 automake (= 1:1.16.5-1.1),
74 autopoint (= 0.21-4),
75 autotools-dev (= 20180224.1+nmu1),
76 base-files (= 12.2),
77 base-passwd (= 3.5.52),
78 bash (= 5.1-6),
79 binutils (= 2.37.90.20220123-1),
80 binutils-common (= 2.37.90.20220123-1),
81 binutils-i686-linux-gnu (= 2.37.90.20220123-1),
82 bsdextrautils (= 2.37.3-1),
83 bsdutils (= 1:2.37.3-1),
84 build-essential (= 12.9),
85 bzip2 (= 1.0.8-5),
86 cmake (= 3.22.1-1+b1),
87 cmake-data (= 3.22.1-1),
88 coreutils (= 8.32-4.1),
89 cpp (= 4:11.2.0-2),
90 cpp-11 (= 11.2.0-14),
91 dash (= 0.5.11+git20210903+057cd650a4ed-3),
92 debconf (= 1.5.79),
93 debhelper (= 13.6),
94 debianutils (= 5.7-0.1),
95 dh-autoreconf (= 20),
96 dh-elpa-helper (= 2.0.10),
97 dh-strip-nondeterminism (= 1.13.0-1),
98 diffutils (= 1:3.7-5),
99 dpkg (= 1.21.1),
100 dpkg-dev (= 1.21.1),
101 dwz (= 0.14-1),
102 emacsen-common (= 3.0.4),
103 file (= 1:5.41-2),
104 findutils (= 4.8.0-1),
105 g++ (= 4:11.2.0-2),
106 g++-11 (= 11.2.0-14),
107 gcc (= 4:11.2.0-2),
108 gcc-11 (= 11.2.0-14),
109 gcc-11-base (= 11.2.0-14),
110 gettext (= 0.21-4),
111 gettext-base (= 0.21-4),
112 grep (= 3.7-1),
113 groff-base (= 1.22.4-8),
114 gzip (= 1.10-4),
115 hostname (= 3.23),
116 init-system-helpers (= 1.61),
117 intltool-debian (= 0.35.0+20060710.5),
118 libacl1 (= 2.3.1-1),
119 libarchive-zip-perl (= 1.68-1),
120 libarchive13 (= 3.5.2-1),
121 libasan6 (= 11.2.0-14),
122 libatomic1 (= 11.2.0-14),
123 libattr1 (= 1:2.5.1-1),
124 libaudit-common (= 1:3.0.6-1),
125 libaudit1 (= 1:3.0.6-1+b1),
126 libbinutils (= 2.37.90.20220123-1),
127 libblkid1 (= 2.37.3-1),
128 libboost-test-dev (= 1.74.0.3),
129 libboost-test1.74-dev (= 1.74.0-14),
130 libboost-test1.74.0 (= 1.74.0-14),
131 libboost1.74-dev (= 1.74.0-14),
132 libbrotli1 (= 1.0.9-2+b3),
133 libbz2-1.0 (= 1.0.8-5),
134 libc-bin (= 2.33-4),
135 libc-dev-bin (= 2.33-4),
136 libc6 (= 2.33-4),
137 libc6-dev (= 2.33-4),
138 libcap-ng0 (= 0.7.9-2.2+b1),
139 libcap2 (= 1:2.44-1),
140 libcc1-0 (= 11.2.0-14),
141 libcom-err2 (= 1.46.5-2),
142 libcrypt-dev (= 1:4.4.27-1.1),
143 libcrypt1 (= 1:4.4.27-1.1),
144 libctf-nobfd0 (= 2.37.90.20220123-1),
145 libctf0 (= 2.37.90.20220123-1),
146 libcurl4 (= 7.81.0-1),
147 libdb5.3 (= 5.3.28+dfsg1-0.8),
148 libdebconfclient0 (= 0.261),
149 libdebhelper-perl (= 13.6),
150 libdpkg-perl (= 1.21.1),
151 libelf1 (= 0.186-1),
152 libexpat1 (= 2.4.3-2),
153 libffi8 (= 3.4.2-4),
154 libfile-stripnondeterminism-perl (= 1.13.0-1),
155 libgcc-11-dev (= 11.2.0-14),
156 libgcc-s1 (= 11.2.0-14),
157 libgcrypt20 (= 1.9.4-5),
158 libgdbm-compat4 (= 1.22-1),
159 libgdbm6 (= 1.22-1),
160 libglib2.0-0 (= 2.70.2-1),
161 libgmp10 (= 2:6.2.1+dfsg-3),
162 libgnutls30 (= 3.7.3-4),
163 libgomp1 (= 11.2.0-14),
164 libgpg-error0 (= 1.43-3),
165 libgssapi-krb5-2 (= 1.18.3-7),
166 libhogweed6 (= 3.7.3-1),
167 libicu67 (= 67.1-7),
168 libidn2-0 (= 2.3.2-2),
169 libisl23 (= 0.24-2),
170 libitm1 (= 11.2.0-14),
171 libjsoncpp25 (= 1.9.5-2),
172 libk5crypto3 (= 1.18.3-7),
173 libkeyutils1 (= 1.6.1-2),
174 libkrb5-3 (= 1.18.3-7),
175 libkrb5support0 (= 1.18.3-7),
176 libldap-2.4-2 (= 2.4.59+dfsg-1),
177 liblz4-1 (= 1.9.3-2),
178 liblzma5 (= 5.2.5-2),
179 libm4ri-0.0.20200125 (= 20200125-1+b1),
180 libm4ri-dev (= 20200125-1+b1),
181 libmagic-mgc (= 1:5.41-2),
182 libmagic1 (= 1:5.41-2),
183 libmount1 (= 2.37.3-1),
184 libmpc3 (= 1.2.1-1),
185 libmpfr6 (= 4.1.0-3),
186 libncurses6 (= 6.3-2),
187 libncursesw6 (= 6.3-2),
188 libnettle8 (= 3.7.3-1),
189 libnghttp2-14 (= 1.43.0-1),
190 libnsl-dev (= 1.3.0-2),
191 libnsl2 (= 1.3.0-2),
192 libp11-kit0 (= 0.24.0-6),
193 libpam-modules (= 1.4.0-11),
194 libpam-modules-bin (= 1.4.0-11),
195 libpam-runtime (= 1.4.0-11),
196 libpam0g (= 1.4.0-11),
197 libpcre2-8-0 (= 10.39-3),
198 libpcre3 (= 2:8.39-13),
199 libperl5.32 (= 5.32.1-6),
200 libpipeline1 (= 1.5.5-1),
201 libpng16-16 (= 1.6.37-3),
202 libprocps8 (= 2:3.3.17-6),
203 libpsl5 (= 0.21.0-1.2),
204 libquadmath0 (= 11.2.0-14),
205 librhash0 (= 1.4.2-1),
206 librtmp1 (= 2.4+20151223.gitfa8646d.1-2+b2),
207 libsasl2-2 (= 2.1.27+dfsg2-3),
208 libsasl2-modules-db (= 2.1.27+dfsg2-3),
209 libseccomp2 (= 2.5.3-2),
210 libselinux1 (= 3.3-1+b1),
211 libsigsegv2 (= 2.13-1),
212 libsmartcols1 (= 2.37.3-1),
213 libssh2-1 (= 1.10.0-2),
214 libssl1.1 (= 1.1.1m-1),
215 libstdc++-11-dev (= 11.2.0-14),
216 libstdc++6 (= 11.2.0-14),
217 libsub-override-perl (= 0.09-2),
218 libsystemd0 (= 250.3-1),
219 libtasn1-6 (= 4.18.0-4),
220 libtinfo6 (= 6.3-2),
221 libtirpc-common (= 1.3.2-2),
222 libtirpc-dev (= 1.3.2-2),
223 libtirpc3 (= 1.3.2-2),
224 libtool (= 2.4.6-15),
225 libubsan1 (= 11.2.0-14),
226 libuchardet0 (= 0.0.7-1),
227 libudev1 (= 250.3-1),
228 libunistring2 (= 0.9.10-6),
229 libuuid1 (= 2.37.3-1),
230 libuv1 (= 1.43.0-1),
231 libxml2 (= 2.9.12+dfsg-5+b1),
232 libzstd1 (= 1.4.8+dfsg-3),
233 linux-libc-dev (= 5.15.15-1),
234 login (= 1:4.8.1-2),
235 lsb-base (= 11.1.0),
236 m4 (= 1.4.18-5),
237 make (= 4.3-4.1),
238 man-db (= 2.9.4-4),
239 mawk (= 1.3.4.20200120-3),
240 ncurses-base (= 6.3-2),
241 ncurses-bin (= 6.3-2),
242 patch (= 2.7.6-7),
243 perl (= 5.32.1-6),
244 perl-base (= 5.32.1-6),
245 perl-modules-5.32 (= 5.32.1-6),
246 pkg-config (= 0.29.2-1),
247 po-debconf (= 1.0.21+nmu1),
248 procps (= 2:3.3.17-6),
249 rpcsvc-proto (= 1.4.2-4),
250 sed (= 4.8-1),
251 sensible-utils (= 0.0.17),
252 sysvinit-utils (= 3.01-1),
253 tar (= 1.34+dfsg-1),
254 util-linux (= 2.37.3-1),
255 xz-utils (= 5.2.5-2),
256 zlib1g (= 1:1.2.11.dfsg-2)
257Environment:
258 DEB_BUILD_OPTIONS="parallel=5"
259 SOURCE_DATE_EPOCH="1643116722""#;
260        let buildinfo: Buildinfo = super::from_str(data).unwrap();
261        assert_eq!(buildinfo.source, "picnic");
262        assert_eq!(
263            buildinfo.version,
264            PackageVersion::try_from("3.0.11-1").unwrap()
265        );
266        assert_eq!(
267            buildinfo.architecture,
268            vec![Architecture::I386, Architecture::Source]
269        );
270    }
271}