Explorar o código

libdpkg: Add virtual source:Package and source:Version fields

Closes: #653575
Guillem Jover %!s(int64=14) %!d(string=hai) anos
pai
achega
246c8223a6
Modificáronse 3 ficheiros con 51 adicións e 0 borrados
  1. 2 0
      debian/changelog
  2. 47 0
      lib/dpkg/pkg-format.c
  3. 2 0
      man/dpkg-query.1

+ 2 - 0
debian/changelog

@@ -45,6 +45,8 @@ dpkg (1.16.2) UNRELEASED; urgency=low
   * Add missing ‘*’ in asprintf() and vasprintf() compat declarations.
   * Add support for virtual output binary:Summary and db:Status-Abbrev fields.
     Closes: #192619, #427945
+  * Add support for virtual output source:Package and source:Version fields.
+    Closes: #653575
 
   [ Raphaël Hertzog ]
   * Update Dpkg::Shlibs to look into multiarch paths when cross-building

+ 47 - 0
lib/dpkg/pkg-format.c

@@ -228,9 +228,56 @@ virt_summary(struct varbuf *vb,
 	varbuf_add_buf(vb, desc, len);
 }
 
+static void
+virt_source_package(struct varbuf *vb,
+                    const struct pkginfo *pkg, const struct pkgbin *pkgbin,
+                    enum fwriteflags flags, const struct fieldinfo *fip)
+{
+	const char *name;
+	size_t len;
+
+	name = pkg->installed.source;
+	if (name == NULL)
+		name = pkg->set->name;
+
+	len = strcspn(name, " ");
+	if (len == 0)
+		len = strlen(name);
+
+	varbuf_add_buf(vb, name, len);
+}
+
+static void
+virt_source_version(struct varbuf *vb,
+                    const struct pkginfo *pkg, const struct pkgbin *pkgbin,
+                    enum fwriteflags flags, const struct fieldinfo *fip)
+{
+	const char *version;
+	size_t len;
+
+	if (pkg->installed.source)
+		version = strchr(pkg->installed.source, '(');
+	else
+		version = NULL;
+
+	if (version == NULL) {
+		varbufversion(vb, &pkg->installed.version, vdew_nonambig);
+	} else {
+		version++;
+
+		len = strcspn(version, ")");
+		if (len == 0)
+			len = strlen(version);
+
+		varbuf_add_buf(vb, version, len);
+	}
+}
+
 const struct fieldinfo virtinfos[] = {
 	{ "binary:Summary", NULL, virt_summary },
 	{ "db:Status-Abbrev", NULL, virt_status_abbrev },
+	{ "source:Package", NULL, virt_source_package },
+	{ "source:Version", NULL, virt_source_version },
 	{ NULL },
 };
 

+ 2 - 0
man/dpkg-query.1

@@ -188,6 +188,8 @@ fields in control files):
 .nf
     \fBbinary:Summary\fP
     \fBdb:Status\-Abbrev\fP
+    \fBsource:Package\fP
+    \fBsource:Version\fP
 .fi
 
 The default format string is \(lq\fB${Package}\et${Version}\en\fP\(rq.