The following commit has been merged in the master branch:
commit 246c8223a6003af989b16f29dfd48d9415ea7dd8
Author: Guillem Jover <guil...@debian.org>
Date:   Mon Jan 2 06:56:41 2012 +0100

    libdpkg: Add virtual source:Package and source:Version fields
    
    Closes: #653575

diff --git a/debian/changelog b/debian/changelog
index c814a92..1164bdd 100644
--- a/debian/changelog
+++ b/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
diff --git a/lib/dpkg/pkg-format.c b/lib/dpkg/pkg-format.c
index a474345..f7afe10 100644
--- a/lib/dpkg/pkg-format.c
+++ b/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 },
 };
 
diff --git a/man/dpkg-query.1 b/man/dpkg-query.1
index dbe7984..06f6adc 100644
--- a/man/dpkg-query.1
+++ b/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.

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to