mirror of
https://github.com/release-engineering/repo-autoindex.git
synced 2025-02-23 05:32:56 +00:00

Directories are generally expected to be listed first in directory indexes. That was already working for yum and file repos, but wasn't the case for kickstart repos due to their combination of different types of content. This commit applies a consistent sorting so that directories will always come first, and entries will otherwise be sorted by name, for all repo types.
712 lines
29 KiB
Python
712 lines
29 KiB
Python
import io
|
|
import re
|
|
from typing import BinaryIO, Optional
|
|
import textwrap
|
|
|
|
from repo_autoindex import autoindex
|
|
from repo_autoindex._impl.base import GeneratedIndex
|
|
|
|
REPOMD_XML = textwrap.dedent(
|
|
"""
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<repomd xmlns="http://linux.duke.edu/metadata/repo" xmlns:rpm="http://linux.duke.edu/metadata/rpm">
|
|
<revision>1657165688</revision>
|
|
<data type="primary">
|
|
<checksum type="sha256">d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf</checksum>
|
|
<open-checksum type="sha256">6fc4eddd4e9de89246efba3815b8a9dec9dfe168e4fd3104cc792dff908a0f62</open-checksum>
|
|
<location href="repodata/d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf-primary.xml.gz"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>2932</size>
|
|
<open-size>16585</open-size>
|
|
</data>
|
|
<data type="filelists">
|
|
<checksum type="sha256">284769ec79daa9e0a3b0129bb6260cc6271c90c4fe02b43dfa7cdf7635fb803f</checksum>
|
|
<open-checksum type="sha256">72f89223c8b0f6c7a2ee6ed7fbd16ee0bb395ca68260038bb3895265af84c29f</open-checksum>
|
|
<location href="repodata/284769ec79daa9e0a3b0129bb6260cc6271c90c4fe02b43dfa7cdf7635fb803f-filelists.xml.gz"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>4621</size>
|
|
<open-size>36911</open-size>
|
|
</data>
|
|
<data type="other">
|
|
<checksum type="sha256">36c2195bbee0c39ee080969abc6fd59d943c3471114cfd43c6e776ac20d7ed21</checksum>
|
|
<open-checksum type="sha256">39f52cf295db14e863abcd7b2eede8e6c5e39ac9b2f194349459d29cd492c90f</open-checksum>
|
|
<location href="repodata/36c2195bbee0c39ee080969abc6fd59d943c3471114cfd43c6e776ac20d7ed21-other.xml.gz"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>1408</size>
|
|
<open-size>8432</open-size>
|
|
</data>
|
|
<data type="primary_db">
|
|
<checksum type="sha256">55e6bfd00e889c5c1f9a3c9fb35a660158bc5d975ae082d434f3cf81cc2c0c21</checksum>
|
|
<open-checksum type="sha256">b2692c49d1d98d68e764e29108d8a81a3dfd9e04fa7665115853a029396d118d</open-checksum>
|
|
<location href="repodata/55e6bfd00e889c5c1f9a3c9fb35a660158bc5d975ae082d434f3cf81cc2c0c21-primary.sqlite.bz2"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>7609</size>
|
|
<open-size>114688</open-size>
|
|
<database_version>10</database_version>
|
|
</data>
|
|
<data type="filelists_db">
|
|
<checksum type="sha256">de63a509812c37f7736fcef0b79e9c55dfe67a2d77006f74fdc442935103e9e6</checksum>
|
|
<open-checksum type="sha256">40eb5d53fe547c98d470813256c9bfc8a239b13697d8eb824a1485c9e186a0e3</open-checksum>
|
|
<location href="repodata/de63a509812c37f7736fcef0b79e9c55dfe67a2d77006f74fdc442935103e9e6-filelists.sqlite.bz2"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>10323</size>
|
|
<open-size>65536</open-size>
|
|
<database_version>10</database_version>
|
|
</data>
|
|
<data type="other_db">
|
|
<checksum type="sha256">9aa39b62df200cb3784dea24092d0c1c686afff0cd0990c2ec7a61afe8896e1c</checksum>
|
|
<open-checksum type="sha256">3e5cefb10ce805b827e12ca3b4839bba873dc9403fd92b60a364bf6f312bd972</open-checksum>
|
|
<location href="repodata/9aa39b62df200cb3784dea24092d0c1c686afff0cd0990c2ec7a61afe8896e1c-other.sqlite.bz2"/>
|
|
<timestamp>1657165688</timestamp>
|
|
<size>2758</size>
|
|
<open-size>32768</open-size>
|
|
<database_version>10</database_version>
|
|
</data>
|
|
</repomd>
|
|
"""
|
|
).strip()
|
|
|
|
PRIMARY_XML = textwrap.dedent(
|
|
"""
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="5">
|
|
<package type="rpm">
|
|
<name>wireplumber</name>
|
|
<arch>x86_64</arch>
|
|
<version epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
<checksum type="sha256" pkgid="YES">539a773f3f39a7b2b5f971bdd0063f7d4201aab00920f380962e935356dc4d3a</checksum>
|
|
<summary>A modular session/policy manager for PipeWire</summary>
|
|
<description>WirePlumber is a modular session/policy manager for PipeWire and a
|
|
GObject-based high-level library that wraps PipeWire's API, providing
|
|
convenience for writing the daemon's modules as well as external tools for
|
|
managing PipeWire.</description>
|
|
<packager>Fedora Project</packager>
|
|
<url>https://pipewire.pages.freedesktop.org/wireplumber/</url>
|
|
<time file="1657165671" build="1652194859"/>
|
|
<size package="82141" installed="286454" archive="298004"/>
|
|
<location href="packages/w/wireplumber-0.4.10-1.fc36.x86_64.rpm"/>
|
|
<format>
|
|
<rpm:license>MIT</rpm:license>
|
|
<rpm:vendor>Fedora Project</rpm:vendor>
|
|
<rpm:group>Unspecified</rpm:group>
|
|
<rpm:buildhost>buildvm-x86-27.iad2.fedoraproject.org</rpm:buildhost>
|
|
<rpm:sourcerpm>wireplumber-0.4.10-1.fc36.src.rpm</rpm:sourcerpm>
|
|
<rpm:header-range start="4504" end="20677"/>
|
|
<rpm:provides>
|
|
<rpm:entry name="pipewire-session-manager"/>
|
|
<rpm:entry name="wireplumber" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
<rpm:entry name="wireplumber(x86-64)" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
</rpm:provides>
|
|
<rpm:requires>
|
|
<rpm:entry name="/bin/sh"/>
|
|
<rpm:entry name="libgcc_s.so.1()(64bit)"/>
|
|
<rpm:entry name="libgcc_s.so.1(GCC_3.0)(64bit)"/>
|
|
<rpm:entry name="libgcc_s.so.1(GCC_3.3.1)(64bit)"/>
|
|
<rpm:entry name="libglib-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgobject-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libpipewire-0.3.so.0()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-0.4.so.0()(64bit)"/>
|
|
<rpm:entry name="rtld(GNU_HASH)"/>
|
|
<rpm:entry name="wireplumber-libs(x86-64)" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
<rpm:entry name="libc.so.6(GLIBC_2.34)(64bit)"/>
|
|
</rpm:requires>
|
|
<rpm:conflicts>
|
|
<rpm:entry name="pipewire-session-manager"/>
|
|
</rpm:conflicts>
|
|
<file type="dir">/etc/wireplumber</file>
|
|
<file type="dir">/etc/wireplumber/bluetooth.lua.d</file>
|
|
<file type="dir">/etc/wireplumber/common</file>
|
|
<file type="dir">/etc/wireplumber/main.lua.d</file>
|
|
<file type="dir">/etc/wireplumber/policy.lua.d</file>
|
|
<file>/usr/bin/wireplumber</file>
|
|
<file>/usr/bin/wpctl</file>
|
|
<file>/usr/bin/wpexec</file>
|
|
</format>
|
|
</package>
|
|
<package type="rpm">
|
|
<name>wireplumber-libs</name>
|
|
<arch>x86_64</arch>
|
|
<version epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
<checksum type="sha256" pkgid="YES">1f0d373bd1b8af6b4b7baab1c89e4820aa8cd8691f51fca4fccac9785fe715ea</checksum>
|
|
<summary>Libraries for WirePlumber clients</summary>
|
|
<description>This package contains the runtime libraries for any application that wishes
|
|
to interface with WirePlumber.</description>
|
|
<packager>Fedora Project</packager>
|
|
<url>https://pipewire.pages.freedesktop.org/wireplumber/</url>
|
|
<time file="1657165671" build="1652194859"/>
|
|
<size package="325613" installed="1188155" archive="1196460"/>
|
|
<location href="packages/w/wireplumber-libs-0.4.10-1.fc36.x86_64.rpm"/>
|
|
<format>
|
|
<rpm:license>MIT</rpm:license>
|
|
<rpm:vendor>Fedora Project</rpm:vendor>
|
|
<rpm:group>Unspecified</rpm:group>
|
|
<rpm:buildhost>buildvm-x86-27.iad2.fedoraproject.org</rpm:buildhost>
|
|
<rpm:sourcerpm>wireplumber-0.4.10-1.fc36.src.rpm</rpm:sourcerpm>
|
|
<rpm:header-range start="4504" end="20445"/>
|
|
<rpm:provides>
|
|
<rpm:entry name="libwireplumber-0.4.so.0()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-default-nodes-api.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-default-nodes.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-default-profile.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-file-monitor-api.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-logind.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-lua-scripting.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-metadata.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-mixer-api.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-portal-permissionstore.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-reserve-device.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-si-audio-adapter.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-si-audio-endpoint.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-si-node.so()(64bit)"/>
|
|
<rpm:entry name="libwireplumber-module-si-standard-link.so()(64bit)"/>
|
|
<rpm:entry name="wireplumber-libs" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
<rpm:entry name="wireplumber-libs(x86-64)" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
</rpm:provides>
|
|
<rpm:requires>
|
|
<rpm:entry name="libgcc_s.so.1()(64bit)"/>
|
|
<rpm:entry name="libgcc_s.so.1(GCC_3.0)(64bit)"/>
|
|
<rpm:entry name="libgcc_s.so.1(GCC_3.3.1)(64bit)"/>
|
|
<rpm:entry name="libgio-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libglib-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgmodule-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgobject-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="liblua-5.4.so()(64bit)"/>
|
|
<rpm:entry name="libm.so.6()(64bit)"/>
|
|
<rpm:entry name="libm.so.6(GLIBC_2.2.5)(64bit)"/>
|
|
<rpm:entry name="libpipewire-0.3.so.0()(64bit)"/>
|
|
<rpm:entry name="libsystemd.so.0()(64bit)"/>
|
|
<rpm:entry name="libsystemd.so.0(LIBSYSTEMD_209)(64bit)"/>
|
|
<rpm:entry name="rtld(GNU_HASH)"/>
|
|
<rpm:entry name="libc.so.6(GLIBC_2.14)(64bit)"/>
|
|
</rpm:requires>
|
|
<rpm:recommends>
|
|
<rpm:entry name="wireplumber(x86-64)" flags="EQ" epoch="0" ver="0.4.10" rel="1.fc36"/>
|
|
</rpm:recommends>
|
|
</format>
|
|
</package>
|
|
<package type="rpm">
|
|
<name>xfce4-panel</name>
|
|
<arch>x86_64</arch>
|
|
<version epoch="0" ver="4.16.4" rel="1.fc36"/>
|
|
<checksum type="sha256" pkgid="YES">1eecad127499d557f9d97562a1c65d9c881f3f63431546007a9ed714997b909c</checksum>
|
|
<summary>Next generation panel for Xfce</summary>
|
|
<description>This package includes the panel for the Xfce desktop environment.</description>
|
|
<packager>Fedora Project</packager>
|
|
<url>http://www.xfce.org/</url>
|
|
<time file="1657165686" build="1650113596"/>
|
|
<size package="1071292" installed="5255122" archive="5281072"/>
|
|
<location href="packages/x/xfce4-panel-4.16.4-1.fc36.x86_64.rpm"/>
|
|
<format>
|
|
<rpm:license>GPLv2+ and LGPLv2+</rpm:license>
|
|
<rpm:vendor>Fedora Project</rpm:vendor>
|
|
<rpm:group>Unspecified</rpm:group>
|
|
<rpm:buildhost>buildvm-x86-16.iad2.fedoraproject.org</rpm:buildhost>
|
|
<rpm:sourcerpm>xfce4-panel-4.16.4-1.fc36.src.rpm</rpm:sourcerpm>
|
|
<rpm:header-range start="4504" end="38505"/>
|
|
<rpm:provides>
|
|
<rpm:entry name="application()"/>
|
|
<rpm:entry name="application(panel-desktop-handler.desktop)"/>
|
|
<rpm:entry name="application(panel-preferences.desktop)"/>
|
|
<rpm:entry name="config(xfce4-panel)" flags="EQ" epoch="0" ver="4.16.4" rel="1.fc36"/>
|
|
<rpm:entry name="libxfce4panel-2.0.so.4()(64bit)"/>
|
|
<rpm:entry name="mimehandler(application/x-desktop)"/>
|
|
<rpm:entry name="xfce4-panel" flags="EQ" epoch="0" ver="4.16.4" rel="1.fc36"/>
|
|
<rpm:entry name="xfce4-panel(x86-64)" flags="EQ" epoch="0" ver="4.16.4" rel="1.fc36"/>
|
|
</rpm:provides>
|
|
<rpm:requires>
|
|
<rpm:entry name="/usr/bin/sh"/>
|
|
<rpm:entry name="libX11.so.6()(64bit)"/>
|
|
<rpm:entry name="libXext.so.6()(64bit)"/>
|
|
<rpm:entry name="libatk-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libcairo-gobject.so.2()(64bit)"/>
|
|
<rpm:entry name="libcairo.so.2()(64bit)"/>
|
|
<rpm:entry name="libdbusmenu-glib.so.4()(64bit)"/>
|
|
<rpm:entry name="libdbusmenu-gtk3.so.4()(64bit)"/>
|
|
<rpm:entry name="libexo-2.so.0()(64bit)"/>
|
|
<rpm:entry name="libgarcon-1.so.0()(64bit)"/>
|
|
<rpm:entry name="libgarcon-gtk3-1.so.0()(64bit)"/>
|
|
<rpm:entry name="libgdk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libgdk_pixbuf-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgio-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libglib-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgmodule-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgobject-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgthread-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgtk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libharfbuzz.so.0()(64bit)"/>
|
|
<rpm:entry name="libm.so.6()(64bit)"/>
|
|
<rpm:entry name="libm.so.6(GLIBC_2.2.5)(64bit)"/>
|
|
<rpm:entry name="libpango-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libpangocairo-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libwnck-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libxfce4ui-2.so.0()(64bit)"/>
|
|
<rpm:entry name="libxfce4util.so.7()(64bit)"/>
|
|
<rpm:entry name="libxfconf-0.so.3()(64bit)"/>
|
|
<rpm:entry name="libz.so.1()(64bit)"/>
|
|
<rpm:entry name="rtld(GNU_HASH)"/>
|
|
<rpm:entry name="libc.so.6(GLIBC_2.34)(64bit)"/>
|
|
</rpm:requires>
|
|
<rpm:obsoletes>
|
|
<rpm:entry name="orage" flags="LT" epoch="0" ver="4.12.1" rel="17.fc34"/>
|
|
<rpm:entry name="xfce4-cellmodem-plugin" flags="LT" epoch="0" ver="0.0.5" rel="29.fc34"/>
|
|
<rpm:entry name="xfce4-embed-plugin" flags="LT" epoch="0" ver="1.6.0" rel="13.fc34"/>
|
|
<rpm:entry name="xfce4-hardware-monitor-plugin" flags="LT" epoch="0" ver="1.6.0" rel="11"/>
|
|
<rpm:entry name="xfce4-kbdleds-plugins" flags="LT" epoch="0" ver="0.0.6" rel="20.fc34"/>
|
|
</rpm:obsoletes>
|
|
<file>/etc/xdg/xfce4/panel/default.xml</file>
|
|
<file>/usr/bin/xfce4-panel</file>
|
|
<file>/usr/bin/xfce4-popup-applicationsmenu</file>
|
|
<file>/usr/bin/xfce4-popup-directorymenu</file>
|
|
<file>/usr/bin/xfce4-popup-windowmenu</file>
|
|
</format>
|
|
</package>
|
|
<package type="rpm">
|
|
<name>xfce4-power-manager</name>
|
|
<arch>x86_64</arch>
|
|
<version epoch="0" ver="4.16.0" rel="5.fc36"/>
|
|
<checksum type="sha256" pkgid="YES">48697b6e83646e702d83523acd4a25df546129a1a11f3fbb81724c30d58e9c21</checksum>
|
|
<summary>Power management for the Xfce desktop environment</summary>
|
|
<description>Xfce Power Manager uses the information and facilities provided by HAL to
|
|
display icons and handle user callbacks in an interactive Xfce session.
|
|
Xfce Power Preferences allows authorised users to set policy and change
|
|
preferences.</description>
|
|
<packager>Fedora Project</packager>
|
|
<url>http://goodies.xfce.org/projects/applications/xfce4-power-manager</url>
|
|
<time file="1657165686" build="1654865507"/>
|
|
<size package="753300" installed="4646874" archive="4674064"/>
|
|
<location href="packages/x/xfce4-power-manager-4.16.0-5.fc36.x86_64.rpm"/>
|
|
<format>
|
|
<rpm:license>GPLv2+</rpm:license>
|
|
<rpm:vendor>Fedora Project</rpm:vendor>
|
|
<rpm:group>Unspecified</rpm:group>
|
|
<rpm:buildhost>buildvm-x86-21.iad2.fedoraproject.org</rpm:buildhost>
|
|
<rpm:sourcerpm>xfce4-power-manager-4.16.0-5.fc36.src.rpm</rpm:sourcerpm>
|
|
<rpm:header-range start="4504" end="36733"/>
|
|
<rpm:provides>
|
|
<rpm:entry name="application()"/>
|
|
<rpm:entry name="application(xfce4-power-manager-settings.desktop)"/>
|
|
<rpm:entry name="config(xfce4-power-manager)" flags="EQ" epoch="0" ver="4.16.0" rel="5.fc36"/>
|
|
<rpm:entry name="libxfce4powermanager.so()(64bit)"/>
|
|
<rpm:entry name="metainfo()"/>
|
|
<rpm:entry name="metainfo(xfce4-power-manager.appdata.xml)"/>
|
|
<rpm:entry name="xfce4-power-manager" flags="EQ" epoch="0" ver="4.16.0" rel="5.fc36"/>
|
|
<rpm:entry name="xfce4-power-manager(x86-64)" flags="EQ" epoch="0" ver="4.16.0" rel="5.fc36"/>
|
|
</rpm:provides>
|
|
<rpm:requires>
|
|
<rpm:entry name="libX11.so.6()(64bit)"/>
|
|
<rpm:entry name="libXext.so.6()(64bit)"/>
|
|
<rpm:entry name="libXrandr.so.2()(64bit)"/>
|
|
<rpm:entry name="libatk-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libcairo-gobject.so.2()(64bit)"/>
|
|
<rpm:entry name="libcairo.so.2()(64bit)"/>
|
|
<rpm:entry name="libgdk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libgdk_pixbuf-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgio-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libglib-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgmodule-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgobject-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgtk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libharfbuzz.so.0()(64bit)"/>
|
|
<rpm:entry name="libm.so.6()(64bit)"/>
|
|
<rpm:entry name="libm.so.6(GLIBC_2.2.5)(64bit)"/>
|
|
<rpm:entry name="libm.so.6(GLIBC_2.27)(64bit)"/>
|
|
<rpm:entry name="libnotify.so.4()(64bit)"/>
|
|
<rpm:entry name="libpango-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libpangocairo-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libupower-glib.so.3()(64bit)"/>
|
|
<rpm:entry name="libxfce4panel-2.0.so.4()(64bit)"/>
|
|
<rpm:entry name="libxfce4ui-2.so.0()(64bit)"/>
|
|
<rpm:entry name="libxfce4util.so.7()(64bit)"/>
|
|
<rpm:entry name="libxfconf-0.so.3()(64bit)"/>
|
|
<rpm:entry name="libz.so.1()(64bit)"/>
|
|
<rpm:entry name="polkit"/>
|
|
<rpm:entry name="rtld(GNU_HASH)"/>
|
|
<rpm:entry name="upower" flags="GE" epoch="0" ver="0.99"/>
|
|
<rpm:entry name="xfce4-panel" flags="GE" epoch="0" ver="4.16"/>
|
|
<rpm:entry name="libc.so.6(GLIBC_2.34)(64bit)"/>
|
|
</rpm:requires>
|
|
<file>/etc/xdg/autostart/xfce4-power-manager.desktop</file>
|
|
<file>/etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml</file>
|
|
<file>/usr/bin/xfce4-power-manager</file>
|
|
<file>/usr/bin/xfce4-power-manager-settings</file>
|
|
<file>/usr/sbin/xfce4-pm-helper</file>
|
|
<file>/usr/sbin/xfpm-power-backlight-helper</file>
|
|
</format>
|
|
</package>
|
|
<package type="rpm">
|
|
<name>xfce4-terminal</name>
|
|
<arch>x86_64</arch>
|
|
<version epoch="0" ver="1.0.3" rel="1.fc36"/>
|
|
<checksum type="sha256" pkgid="YES">6b6d0d941c16988b4c68ae473f1af141dedafe691922c0c88f6f3ef82baeef79</checksum>
|
|
<summary>Terminal Emulator for the Xfce Desktop environment</summary>
|
|
<description>Xfce4-terminal is a lightweight and easy to use terminal emulator application
|
|
with many advanced features including drop down, tabs, unlimited scrolling,
|
|
full colors, fonts, transparent backgrounds, and more.</description>
|
|
<packager>Fedora Project</packager>
|
|
<url>http://docs.xfce.org/apps/terminal/start</url>
|
|
<time file="1657165686" build="1652445299"/>
|
|
<size package="711256" installed="3699394" archive="3715232"/>
|
|
<location href="packages/x/xfce4-terminal-1.0.3-1.fc36.x86_64.rpm"/>
|
|
<format>
|
|
<rpm:license>GPLv2+</rpm:license>
|
|
<rpm:vendor>Fedora Project</rpm:vendor>
|
|
<rpm:group>Unspecified</rpm:group>
|
|
<rpm:buildhost>buildvm-x86-15.iad2.fedoraproject.org</rpm:buildhost>
|
|
<rpm:sourcerpm>xfce4-terminal-1.0.3-1.fc36.src.rpm</rpm:sourcerpm>
|
|
<rpm:header-range start="4504" end="25361"/>
|
|
<rpm:provides>
|
|
<rpm:entry name="Terminal" flags="EQ" epoch="0" ver="1.0.3" rel="1.fc36"/>
|
|
<rpm:entry name="application()"/>
|
|
<rpm:entry name="application(xfce4-terminal-settings.desktop)"/>
|
|
<rpm:entry name="application(xfce4-terminal.desktop)"/>
|
|
<rpm:entry name="xfce4-terminal" flags="EQ" epoch="0" ver="1.0.3" rel="1.fc36"/>
|
|
<rpm:entry name="xfce4-terminal(x86-64)" flags="EQ" epoch="0" ver="1.0.3" rel="1.fc36"/>
|
|
</rpm:provides>
|
|
<rpm:requires>
|
|
<rpm:entry name="dejavu-sans-mono-fonts"/>
|
|
<rpm:entry name="libX11.so.6()(64bit)"/>
|
|
<rpm:entry name="libcairo.so.2()(64bit)"/>
|
|
<rpm:entry name="libgdk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libgdk_pixbuf-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgio-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libglib-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgobject-2.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libgtk-3.so.0()(64bit)"/>
|
|
<rpm:entry name="libpango-1.0.so.0()(64bit)"/>
|
|
<rpm:entry name="libvte-2.91.so.0()(64bit)"/>
|
|
<rpm:entry name="libxfce4ui-2.so.0()(64bit)"/>
|
|
<rpm:entry name="libxfce4util.so.7()(64bit)"/>
|
|
<rpm:entry name="libxfconf-0.so.3()(64bit)"/>
|
|
<rpm:entry name="rtld(GNU_HASH)"/>
|
|
<rpm:entry name="libc.so.6(GLIBC_2.34)(64bit)"/>
|
|
</rpm:requires>
|
|
<rpm:obsoletes>
|
|
<rpm:entry name="Terminal" flags="LT" epoch="0" ver="0.4.8" rel="5"/>
|
|
</rpm:obsoletes>
|
|
<file>/usr/bin/xfce4-terminal</file>
|
|
</format>
|
|
</package>
|
|
</metadata>
|
|
"""
|
|
).strip()
|
|
|
|
TREEINFO = """[checksums]
|
|
images/boot.iso = sha256:f6be6ec48a4a610e25d591dcf98e1777c4274ed58c583fa64d0aea5b3ecffb18
|
|
images/efiboot.img = sha256:94d5500c4ba266ce77b06aa955d9041eea22129737badc6af56c283dcaec1c29
|
|
images/install.img = sha256:46171146377610cfa0deae157bbcc4ea146b3995c9b0c58d9f261ce404468abe
|
|
images/pxeboot/initrd.img = sha256:e0cd3966097c175d3aaf406a7f8c094374c69504c7be8f08d8084ab9a8812796
|
|
images/pxeboot/vmlinuz = sha256:370db9a3943d4f46dc079dbaeb7e0cc3910dca069f7eede66d3d7d0d5177f684
|
|
|
|
[general]
|
|
; WARNING.0 = This section provides compatibility with pre-productmd treeinfos.
|
|
; WARNING.1 = Read productmd documentation for details about new format.
|
|
arch = x86_64
|
|
family = Red Hat Enterprise Linux
|
|
name = Red Hat Enterprise Linux 8.0.0
|
|
packagedir = Packages
|
|
platforms = x86_64,xen
|
|
repository = .
|
|
timestamp = 1554367044
|
|
variant = BaseOS
|
|
variants = BaseOS
|
|
version = 8.0.0
|
|
|
|
[header]
|
|
type = productmd.treeinfo
|
|
version = 1.2
|
|
|
|
[images-x86_64]
|
|
boot.iso = images/boot.iso
|
|
efiboot.img = images/efiboot.img
|
|
initrd = images/pxeboot/initrd.img
|
|
kernel = images/pxeboot/vmlinuz
|
|
|
|
[images-xen]
|
|
initrd = images/pxeboot/initrd.img
|
|
kernel = images/pxeboot/vmlinuz
|
|
|
|
[release]
|
|
name = Red Hat Enterprise Linux
|
|
short = RHEL
|
|
version = 8.0.0
|
|
|
|
[stage2]
|
|
mainimage = images/install.img
|
|
|
|
[tree]
|
|
arch = x86_64
|
|
build_timestamp = 1554367044
|
|
platforms = x86_64,xen
|
|
variants = BaseOS
|
|
|
|
[variant-BaseOS]
|
|
id = BaseOS
|
|
name = BaseOS
|
|
packages = Packages
|
|
repository = .
|
|
type = variant
|
|
uid = BaseOS"""
|
|
|
|
TREEINFO_APPSTREAM = """[general]
|
|
; WARNING.0 = This section provides compatibility with pre-productmd treeinfos.
|
|
; WARNING.1 = Read productmd documentation for details about new format.
|
|
arch = x86_64
|
|
family = Red Hat Enterprise Linux
|
|
name = Red Hat Enterprise Linux 8.3
|
|
packagedir = Packages
|
|
platforms = x86_64
|
|
repository = .
|
|
timestamp = 1601410486
|
|
variant = AppStream
|
|
variants = AppStream
|
|
version = 8.3
|
|
|
|
[header]
|
|
type = productmd.treeinfo
|
|
version = 1.2
|
|
|
|
[release]
|
|
name = Red Hat Enterprise Linux
|
|
short = RHEL
|
|
version = 8.3
|
|
|
|
[tree]
|
|
arch = x86_64
|
|
build_timestamp = 1601410486
|
|
platforms = x86_64
|
|
variants = AppStream
|
|
|
|
[variant-AppStream]
|
|
id = AppStream
|
|
name = AppStream
|
|
packages = Packages
|
|
repository = .
|
|
type = variant
|
|
uid = AppStream"""
|
|
|
|
EXTRA_FILES_JSON = """{
|
|
"data": [
|
|
{
|
|
"checksums": {
|
|
"md5": "feb4d252ee63634debea654b446e830b",
|
|
"sha1": "a73fad5aeb5642d1b2108885010c4e7a547a1204",
|
|
"sha256": "c4117d0e325cde392981626edbd1484c751f0216689a171e4b7547e8800acc21"
|
|
},
|
|
"file": "RPM-GPG-KEY-redhat-release",
|
|
"size": 5134
|
|
},
|
|
{
|
|
"checksums": {
|
|
"md5": "3c24137e12ece142a27bbf825c256936",
|
|
"sha1": "a72daf8585b41529269cdffcca3a0b3d4e2f21cd",
|
|
"sha256": "3f8644b35db4197e7689d0a034bdef2039d92e330e6b22217abfa6b86a1fc0fa"
|
|
},
|
|
"file": "RPM-GPG-KEY-redhat-beta",
|
|
"size": 1669
|
|
},
|
|
{
|
|
"checksums": {
|
|
"md5": "b234ee4d69f5fce4486a80fdaf4a4263",
|
|
"sha1": "4cc77b90af91e615a64ae04893fdffa7939db84c",
|
|
"sha256": "8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643"
|
|
},
|
|
"file": "GPL",
|
|
"size": 18092
|
|
},
|
|
{
|
|
"checksums": {
|
|
"md5": "0c53898068810a989fa59ca0656bdf24",
|
|
"sha1": "42d51858642b8a0d10fdf09050266395544ea556",
|
|
"sha256": "8f833ce3fbcbcb82e47687a890c043332c88350ddabd606201556e14aaf8fcd9"
|
|
},
|
|
"file": "EULA",
|
|
"size": 8154
|
|
}
|
|
],
|
|
"header": {
|
|
"version": "1.0"
|
|
}
|
|
}"""
|
|
|
|
|
|
class StaticFetcher:
|
|
def __init__(self):
|
|
self.content: dict[str, str] = {}
|
|
|
|
async def __call__(self, url: str) -> Optional[BinaryIO]:
|
|
out = self.content.get(url)
|
|
if out is not None:
|
|
# Since fetchers are allowed to return either str or an io stream,
|
|
# this test wraps the canned strings into a stream (while some other
|
|
# tests do not) to ensure both cases are covered.
|
|
out = io.BytesIO(out.encode())
|
|
return out
|
|
|
|
|
|
async def test_typical_index():
|
|
fetcher = StaticFetcher()
|
|
|
|
fetcher.content["https://example.com/repodata/repomd.xml"] = REPOMD_XML
|
|
fetcher.content[
|
|
"https://example.com/repodata/d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf-primary.xml.gz"
|
|
] = PRIMARY_XML
|
|
fetcher.content["https://example.com/treeinfo"] = TREEINFO
|
|
fetcher.content["https://example.com/extra_files.json"] = EXTRA_FILES_JSON
|
|
|
|
entries: list[GeneratedIndex] = []
|
|
async for entry in autoindex("https://example.com", fetcher=fetcher):
|
|
print(f"Found one entry: {entry.relative_dir}")
|
|
entries.append(entry)
|
|
|
|
# It should generate some entries
|
|
assert entries
|
|
|
|
entries.sort(key=lambda e: e.relative_dir)
|
|
|
|
# First check that the directory structure was reproduced.
|
|
assert [e.relative_dir for e in entries] == [
|
|
"",
|
|
"images",
|
|
"images/pxeboot",
|
|
"packages",
|
|
"packages/w",
|
|
"packages/x",
|
|
"repodata",
|
|
]
|
|
|
|
by_relative_dir: dict[str, GeneratedIndex] = {}
|
|
for entry in entries:
|
|
by_relative_dir[entry.relative_dir] = entry
|
|
|
|
# Sanity check a few links expected to appear in each.
|
|
assert '<a href="repodata/">' in by_relative_dir[""].content
|
|
assert '<a href="packages/">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="w/">' in by_relative_dir["packages"].content
|
|
assert '<a href="x/">' in by_relative_dir["packages"].content
|
|
|
|
assert '<a href="images/">' in by_relative_dir[""].content
|
|
assert '<a href="pxeboot/">' in by_relative_dir["images"].content
|
|
|
|
assert (
|
|
'<a href="284769ec79daa9e0a3b0129bb6260cc6271c90c4fe02b43dfa7cdf7635fb803f-filelists.xml.gz">'
|
|
in by_relative_dir["repodata"].content
|
|
)
|
|
|
|
assert (
|
|
'<a href="wireplumber-libs-0.4.10-1.fc36.x86_64.rpm">'
|
|
in by_relative_dir["packages/w"].content
|
|
)
|
|
assert (
|
|
'<a href="xfce4-terminal-1.0.3-1.fc36.x86_64.rpm">'
|
|
in by_relative_dir["packages/x"].content
|
|
)
|
|
|
|
assert '<a href="treeinfo">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="extra_files.json">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="EULA">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="GPL">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="RPM-GPG-KEY-redhat-beta">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="RPM-GPG-KEY-redhat-release">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="boot.iso">' in by_relative_dir["images"].content
|
|
|
|
assert '<a href="install.img">' in by_relative_dir["images"].content
|
|
|
|
assert '<a href="vmlinuz">' in by_relative_dir["images/pxeboot"].content
|
|
|
|
# Sample the order of entries in some of the listings.
|
|
# Directories are expected to come first.
|
|
links = re.findall(r'<a href="([^"]+)"', by_relative_dir[""].content)
|
|
assert links == [
|
|
"images/",
|
|
"packages/",
|
|
"repodata/",
|
|
"EULA",
|
|
"GPL",
|
|
"RPM-GPG-KEY-redhat-beta",
|
|
"RPM-GPG-KEY-redhat-release",
|
|
"extra_files.json",
|
|
"treeinfo",
|
|
]
|
|
|
|
links = re.findall(r'<a href="([^"]+)"', by_relative_dir["images"].content)
|
|
assert links == [
|
|
"../",
|
|
"pxeboot/",
|
|
"boot.iso",
|
|
"efiboot.img",
|
|
"install.img",
|
|
]
|
|
|
|
|
|
async def test_typical_appstream_index():
|
|
fetcher = StaticFetcher()
|
|
|
|
fetcher.content["https://example.com/repodata/repomd.xml"] = REPOMD_XML
|
|
fetcher.content[
|
|
"https://example.com/repodata/d4888f04f95ac067af4d997d35c6d345cbe398563d777d017a3634c9ed6148cf-primary.xml.gz"
|
|
] = PRIMARY_XML
|
|
fetcher.content["https://example.com/treeinfo"] = TREEINFO_APPSTREAM
|
|
fetcher.content["https://example.com/extra_files.json"] = EXTRA_FILES_JSON
|
|
|
|
entries: list[GeneratedIndex] = []
|
|
async for entry in autoindex("https://example.com", fetcher=fetcher):
|
|
print(f"Found one entry: {entry.relative_dir}")
|
|
entries.append(entry)
|
|
|
|
# It should generate some entries
|
|
assert entries
|
|
|
|
entries.sort(key=lambda e: e.relative_dir)
|
|
|
|
# First check that the directory structure was reproduced.
|
|
assert [e.relative_dir for e in entries] == [
|
|
"",
|
|
"packages",
|
|
"packages/w",
|
|
"packages/x",
|
|
"repodata",
|
|
]
|
|
|
|
by_relative_dir: dict[str, GeneratedIndex] = {}
|
|
for entry in entries:
|
|
by_relative_dir[entry.relative_dir] = entry
|
|
|
|
# Sanity check a few links expected to appear in each.
|
|
assert '<a href="repodata/">' in by_relative_dir[""].content
|
|
assert '<a href="packages/">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="w/">' in by_relative_dir["packages"].content
|
|
assert '<a href="x/">' in by_relative_dir["packages"].content
|
|
|
|
assert (
|
|
'<a href="284769ec79daa9e0a3b0129bb6260cc6271c90c4fe02b43dfa7cdf7635fb803f-filelists.xml.gz">'
|
|
in by_relative_dir["repodata"].content
|
|
)
|
|
|
|
assert (
|
|
'<a href="wireplumber-libs-0.4.10-1.fc36.x86_64.rpm">'
|
|
in by_relative_dir["packages/w"].content
|
|
)
|
|
assert (
|
|
'<a href="xfce4-terminal-1.0.3-1.fc36.x86_64.rpm">'
|
|
in by_relative_dir["packages/x"].content
|
|
)
|
|
|
|
assert '<a href="treeinfo">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="extra_files.json">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="EULA">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="GPL">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="RPM-GPG-KEY-redhat-beta">' in by_relative_dir[""].content
|
|
|
|
assert '<a href="RPM-GPG-KEY-redhat-release">' in by_relative_dir[""].content
|