RPM Community Forums

Mailing List Message of <rpm-devel>

Re: Size limit on tag values?

From: Ralf S. Engelschall <rse+rpm-devel@rpm5.org>
Date: Tue 25 Dec 2007 - 20:32:51 CET
Message-ID: <20071225193251.GA61912@engelschall.com>
On Tue, Dec 25, 2007, Ralf S. Engelschall wrote:

> [...Environment hacking...]

As the internal Lua table construct representation is nothing I want to
see externally, I came up with another hack: an rpm --environment option
which translates the Lua syntax into XML:

| $ /openpkg/bin/openpkg rpm -qp --environment \
|   /tmp/rse/openpkg/rpm/bin/make-3.81-20071211.ix86-freebsd6.3-openpkg.rpm
| <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
| <!DOCTYPE environment
|   PUBLIC "-//rpm5.org//DTD Environment 1.0//EN"
|   "http://rpm5.org/dtd/environment-1.0.dtd">
| <environment>
|   <package>
|     <id>binutils-2.18-20071111</id>
|   </package>
|   <package>
|     <id>make-3.81-20071211</id>
|   </package>
|   <package>
|     <id>openpkg-20071225-20071225</id>
|     <environment>
|       <package>
|         <id>binutils-2.18-20071111</id>
|       </package>
|       <package>
|         <id>make-3.81-20071211</id>
|       </package>
|       <package>
|         <id>openpkg-20071225-20071225</id>
|       </package>
|     </environment>
|   </package>
| </environment>

As its another example of using RPM Lua I append you the implementation
in case you are interested:

1. Global rpmpopt:

-----------------------------------------------------------------------------
#   RPM extension: "rpm -qp --environment"
rpm alias --environment --qf '%{Environment}\n' \
    --pipe "@l_prefix@/lib/openpkg/rpm --eval '%{__environment_to_xml}'" \
    --POPTdesc=$"query the recursively tracked build environment of a package as XML"
-----------------------------------------------------------------------------

2. Global rpmmacros:

-----------------------------------------------------------------------------
%__environment_to_xml %{lua: \
    local lua = io.stdin:read("*all") \
    local f = loadstring("return " .. lua) \
    local xml = ""
    if f ~= nil then \
        xml = xml .. "<?xml version=\\"1.0\\" encoding=\\"ISO-8859-1\\" standalone=\\"no\\"?>\\n" \
        xml = xml .. "<!DOCTYPE environment\\n" \
        xml = xml .. "  PUBLIC \\"-//rpm5.org//DTD Environment 1.0//EN\\"\\n" \
        xml = xml .. "  \\"http://rpm5.org/dtd/environment-1.0.dtd\\">\\n" \
        function genxml (environment, prefix) \
            local xml = prefix .. "<environment>\\n" \
            for id, e in pairs(environment) do \
                xml = xml .. prefix .. "  <package>\\n" \
                xml = xml .. prefix .. "    <id>" .. id .. "</id>\\n" \
                if e ~= nil and next(e) ~= nil then \
                    xml = xml .. genxml(e, prefix .. "    ") \
                end \
                xml = xml .. prefix .. "  </package>\\n" \
            end \
            xml = xml .. prefix .. "</environment>\\n" \
            return xml
        end \
        local environment = f() \
        xml = xml .. genxml(environment, "") \
    end \
    print(xml)
}
-----------------------------------------------------------------------------

                                       Ralf S. Engelschall
                                       rse@engelschall.com
                                       www.engelschall.com
Received on Tue Dec 25 20:34:20 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.