Pkglist-query: различия между версиями

Материал из ALT Linux Wiki
(нач из почты)
 
м (код тоже помельче)
 
Строка 14: Строка 14:
Исходник утилиты <tt>[http://git.altlinux.org/gears/a/apt-repo-tools.git?p=apt-repo-tools.git;a=blob;f=pkglist-query.cc;hb=HEAD pkglist-query]</tt> должен собираться с любой доступной версией librpm (спасибо [https://bugzilla.altlinux.org/show_bug.cgi?id=14449#c22 at@], legion@, glebfm@):
Исходник утилиты <tt>[http://git.altlinux.org/gears/a/apt-repo-tools.git?p=apt-repo-tools.git;a=blob;f=pkglist-query.cc;hb=HEAD pkglist-query]</tt> должен собираться с любой доступной версией librpm (спасибо [https://bugzilla.altlinux.org/show_bug.cgi?id=14449#c22 at@], legion@, glebfm@):


<small>
<pre>
<pre>
// g++ pkglist-query.cc -o pkglist-query -lrpm -lrpmio
// g++ pkglist-query.cc -o pkglist-query -lrpm -lrpmio
Строка 59: Строка 60:
// ex:set ts=8 sts=4 sw=4 noet:
// ex:set ts=8 sts=4 sw=4 noet:
</pre>
</pre>
</small>


[[Категория:Branches]]
[[Категория:Branches]]
[[en:pkglist-query]]
[[en:pkglist-query]]

Текущая версия от 14:59, 17 августа 2019


Доступ к метаданным репозиториев ALT можно получить напрямую таким образом:

wget -qO- http://ftp.altlinux.org/pub/distributions/ALTLinux/p9/branch/x86_64/base/pkglist.classic.xz | unxz > pkglist.classic
wget -qO- http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/aarch64/base/srclist.classic.xz | unxz > srclist.classic
pkglist-query '%{name}-%{version}-%{release}.%{arch}.rpm\n' pkglist.classic
pkglist-query '%{name}-%{version}-%{release}.src.rpm\n' srclist.classic

Исходник утилиты pkglist-query должен собираться с любой доступной версией librpm (спасибо at@, legion@, glebfm@):

// g++ pkglist-query.cc -o pkglist-query -lrpm -lrpmio

#include <stdio.h>
#include <rpm/header.h>

int main(int argc, char *argv[])
{
    const char *progname = argv[0];
    if (argc < 3) {
        fprintf(stderr, "Usage: %s <format> <pkglist>...\n", progname);
        return 2;
    }
    const char *format = argv[1];
    int rc = 0;
    const char *pkglist;
    int ix = 2;
    while ((pkglist = argv[ix++]) != NULL) {
        FD_t Fd = Fopen(pkglist, "r.ufdio");
        if (Ferror(Fd)) {
            fprintf(stderr, "%s: %s: %s\n", progname, pkglist, Fstrerror(Fd));
            rc = 1;
            continue;
        }
        Header h;
        while ((h = headerRead(Fd, HEADER_MAGIC_YES)) != NULL) {
            const char *err = "unknown error";
            char *str = headerFormat(h, format, &err);
            if (str == NULL) {
                rc = 1;
                fprintf(stderr, "%s: %s: %s\n", progname, pkglist, err);
            }
            else {
                fputs(str, stdout);
                free(str);
            }
            headerFree(h);
        }
        Fclose(Fd);
    }
    return rc;
}

// ex:set ts=8 sts=4 sw=4 noet: