Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package createrepo_c for openSUSE:Factory checked in at 2026-03-28 20:13:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/createrepo_c (Old) and /work/SRC/openSUSE:Factory/.createrepo_c.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "createrepo_c" Sat Mar 28 20:13:06 2026 rev:26 rq:1342638 version:1.2.3 Changes: -------- --- /work/SRC/openSUSE:Factory/createrepo_c/createrepo_c.changes 2026-02-10 21:10:39.719136667 +0100 +++ /work/SRC/openSUSE:Factory/.createrepo_c.new.8177/createrepo_c.changes 2026-03-28 20:14:15.147655017 +0100 @@ -1,0 +2,9 @@ +Wed Mar 25 21:44:53 UTC 2026 - Dirk Müller <[email protected]> + +- update to 1.2.3: + * Properly guard code with CR_DELTA_RPM_SUPPORT in missed out places + * Restore compatibility with RPM 4.14.3 + * Add cr_HeaderReadingFlags flags: don't load file digests and all set + * package_from_rpm: accept optional header_reading_flags + +------------------------------------------------------------------- Old: ---- createrepo_c-1.2.2.tar.gz New: ---- createrepo_c-1.2.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ createrepo_c.spec ++++++ --- /var/tmp/diff_new_pack.ed9tJE/_old 2026-03-28 20:14:15.747679781 +0100 +++ /var/tmp/diff_new_pack.ed9tJE/_new 2026-03-28 20:14:15.751679946 +0100 @@ -45,7 +45,7 @@ %bcond_without as_createrepo %endif Name: createrepo_c -Version: 1.2.2 +Version: 1.2.3 Release: 0 Summary: RPM repository metadata generation utility License: GPL-2.0-or-later ++++++ createrepo_c-1.2.2.tar.gz -> createrepo_c-1.2.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/.github/workflows/ci-python.yml new/createrepo_c-1.2.3/.github/workflows/ci-python.yml --- old/createrepo_c-1.2.2/.github/workflows/ci-python.yml 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/.github/workflows/ci-python.yml 2026-03-20 07:44:28.000000000 +0100 @@ -8,7 +8,7 @@ runs-on: ubuntu-latest container: fedora:latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install dependencies run: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/.github/workflows/release-python.yml new/createrepo_c-1.2.3/.github/workflows/release-python.yml --- old/createrepo_c-1.2.2/.github/workflows/release-python.yml 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/.github/workflows/release-python.yml 2026-03-20 07:44:28.000000000 +0100 @@ -11,7 +11,7 @@ runs-on: ubuntu-latest container: fedora:latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Install dependencies run: | @@ -29,7 +29,7 @@ pip install dist/*.tar.gz pytest --verbose --color=yes tests/python/tests/ - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: source path: dist/*.tar.gz @@ -46,16 +46,16 @@ runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 # setup Python for cibuildwheel - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.x' - name: Build wheels for CPython - uses: pypa/[email protected] + uses: pypa/[email protected] env: CIBW_ARCHS: auto64 CIBW_SKIP: "pp* *-musllinux_* cp36* cp37* cp38*" # no PyPy or musl builds, no older Python versions @@ -67,7 +67,7 @@ CIBW_TEST_COMMAND: | pytest --verbose --color=yes {project}/tests/python/tests/ - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: ${{ matrix.arch }} path: ./wheelhouse/*.whl @@ -79,7 +79,7 @@ needs: [build_bdist, build_sdist] runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v6 with: merge-multiple: true path: dist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/.packit.yaml new/createrepo_c-1.2.3/.packit.yaml --- old/createrepo_c-1.2.2/.packit.yaml 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/.packit.yaml 2026-03-20 07:44:28.000000000 +0100 @@ -10,13 +10,15 @@ - epel-9 - epel-10 - fedora-all + - fedora-eln - job: tests trigger: pull_request identifier: "createrepo_c-tests" targets: # EPELs fail now for unrelated reasons - fedora-all + - fedora-eln fmf_url: https://github.com/rpm-software-management/ci-dnf-stack.git - fmf_ref: enable-tmt-dnf-4-stack + fmf_ref: main tmt_plan: "^/plans/integration/behave-createrepo_c$" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/CMakeLists.txt new/createrepo_c-1.2.3/CMakeLists.txt --- old/createrepo_c-1.2.2/CMakeLists.txt 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/CMakeLists.txt 2026-03-20 07:44:28.000000000 +0100 @@ -77,6 +77,11 @@ include_directories (${DRPM_INCLUDE_DIRS}) ADD_DEFINITIONS("-DCR_DELTA_RPM_SUPPORT") ENDIF (ENABLE_DRPM) +IF (ENABLE_DRPM) + SET (ENABLE_DRPM_BASH 1) +ELSE () + SET (ENABLE_DRPM_BASH 0) +ENDIF () # option to enable/disable python support OPTION (ENABLE_PYTHON "Enable python support?" ON) @@ -125,18 +130,19 @@ OPTION(ENABLE_BASHCOMP "Install Bash autocompletions?" ON) IF (ENABLE_BASHCOMP) + CONFIGURE_FILE(createrepo_c.bash.in ${CMAKE_BINARY_DIR}/createrepo_c.bash @ONLY) pkg_check_modules(BASHCOMP bash-completion) IF (BASHCOMP_FOUND) execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=completionsdir bash-completion OUTPUT_VARIABLE BASHCOMP_DIR OUTPUT_STRIP_TRAILING_WHITESPACE) message("Bash completion directory: ${BASHCOMP_DIR}") - INSTALL(FILES createrepo_c.bash DESTINATION ${BASHCOMP_DIR} RENAME createrepo_c) + INSTALL(FILES ${CMAKE_BINARY_DIR}/createrepo_c.bash DESTINATION ${BASHCOMP_DIR} RENAME createrepo_c) INSTALL(CODE " execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink createrepo_c \$ENV{DESTDIR}${BASHCOMP_DIR}/mergerepo_c) execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink createrepo_c \$ENV{DESTDIR}${BASHCOMP_DIR}/modifyrepo_c) execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink createrepo_c \$ENV{DESTDIR}${BASHCOMP_DIR}/sqliterepo_c) ") ELSEIF (BASHCOMP_FOUND) - INSTALL(FILES createrepo_c.bash DESTINATION "/etc/bash_completion.d") + INSTALL(FILES ${CMAKE_BINARY_DIR}/createrepo_c.bash DESTINATION "/etc/bash_completion.d") message("Bash completion directory: /etc/bash_completion.d") ENDIF (BASHCOMP_FOUND) ENDIF (ENABLE_BASHCOMP) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/README.md new/createrepo_c-1.2.3/README.md --- old/createrepo_c-1.2.2/README.md 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/README.md 2026-03-20 07:44:28.000000000 +0100 @@ -84,7 +84,7 @@ ### ``-DENABLE_DRPM=ON`` -Enable DeltaRPM support using drpm library (Default: ON) +Enable DeltaRPM support using drpm library (Default: OFF) Adds support for creating DeltaRPMs and incorporating them into the repository. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/VERSION.cmake new/createrepo_c-1.2.3/VERSION.cmake --- old/createrepo_c-1.2.2/VERSION.cmake 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/VERSION.cmake 2026-03-20 07:44:28.000000000 +0100 @@ -1,3 +1,3 @@ SET(CR_MAJOR "1") SET(CR_MINOR "2") -SET(CR_PATCH "2") +SET(CR_PATCH "3") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/createrepo_c.bash new/createrepo_c-1.2.3/createrepo_c.bash --- old/createrepo_c-1.2.2/createrepo_c.bash 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/createrepo_c.bash 1970-01-01 01:00:00.000000000 +0100 @@ -1,185 +0,0 @@ -# bash completion for createrepo and friends - -_cr_compress_type() -{ - COMPREPLY=( $( compgen -W "bz2 gz xz" -- "$2" ) ) -} - -_cr_checksum_type() -{ - COMPREPLY=( $( compgen -W "md5 sha sha1 sha224 sha256 sha384 sha512" -- "$2" ) ) -} - -_cr_createrepo() -{ - COMPREPLY=() - - case $3 in - -V|--version|-h|--help) - return 0 - ;; - --update-md-path|-o|--outputdir|--oldpackagedirs) - COMPREPLY=( $( compgen -d -- "$2" ) ) - return 0 - ;; - -g|--groupfile) - COMPREPLY=( $( compgen -f -o plusdirs -X '!*.xml' -- "$2" ) ) - return 0 - ;; - -s|--checksum) - _cr_checksum_type "$1" "$2" - return 0 - ;; - -i|--pkglist|--read-pkgs-list) - COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) - return 0 - ;; - -n|--includepkg) - COMPREPLY=( $( compgen -f -o plusdirs -X '!*.rpm' -- "$2" ) ) - return 0 - ;; -# --retain-old-md) -# COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$2" ) ) -# return 0 -# ;; -# --num-deltas|--max-delta-rpm-size) -# COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9' -- "$2" ) ) -# return 0 -# ;; - --workers) - local min=2 max=$( getconf _NPROCESSORS_ONLN 2>/dev/null ) - [[ -z $max || $max -lt $min ]] && max=$min - COMPREPLY=( $( compgen -W "{1..$max}" -- "$2" ) ) - return 0 - ;; - --compress-type) - _cr_compress_type "$1" "$2" - return 0 - ;; - esac - - if [[ $2 == -* ]] ; then - COMPREPLY=( $( compgen -W '--help --version --quiet --verbose - --excludes --basedir --baseurl --groupfile --checksum - --pretty --database --no-database --update --update-md-path - --skip-stat --pkglist --includepkg --outputdir - --skip-symlinks --changelog-limit --unique-md-filenames - --simple-md-filenames --retain-old-md --distro --content --repo - --revision --read-pkgs-list --workers --xz - --compress-type --keep-all-metadata --compatibility - --retain-old-md-by-age --cachedir --local-sqlite - --cut-dirs --location-prefix - --deltas --oldpackagedirs - --num-deltas --max-delta-rpm-size --recycle-pkglist' -- "$2" ) ) - else - COMPREPLY=( $( compgen -d -- "$2" ) ) - fi -} && -complete -F _cr_createrepo -o filenames createrepo_c - -_cr_mergerepo() -{ - COMPREPLY=() - - case $3 in - --version|-h|--help) - return 0 - ;; - -g|--groupfile|--blocked) - COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) - return 0 - ;; - -r|--repo|-o|--outputdir|--noarch-repo) - COMPREPLY=( $( compgen -d -- "$2" ) ) - return 0 - ;; - --compress-type) - _cr_compress_type "" "$2" - return 0 - ;; - --method) - COMPREPLY=( $( compgen -W "repo ts nvr" -- "$2" ) ) - return 0 - ;; - esac - - if [[ $2 == -* ]] ; then - COMPREPLY=( $( compgen -W '--version --help --repo --archlist --database - --no-database --verbose --outputdir --nogroups --noupdateinfo - --compress-type --method --all --noarch-repo --unique-md-filenames - --simple-md-filenames --omit-baseurl --koji --groupfile - --blocked' -- "$2" ) ) - else - COMPREPLY=( $( compgen -d -- "$2" ) ) - fi -} && -complete -F _cr_mergerepo -o filenames mergerepo_c - -_cr_modifyrepo() -{ - COMPREPLY=() - - case $3 in - --version|-h|--help) - return 0 - ;; - -f|--batchfile) - COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) - return 0 - ;; - --compress-type) - _cr_compress_type "" "$2" - return 0 - ;; - -s|--checksum) - _cr_checksum_type "$1" "$2" - return 0 - ;; - esac - - if [[ $2 == -* ]] ; then - COMPREPLY=( $( compgen -W '--version --help --mdtype --remove - --compress --no-compress --compress-type --checksum - --unique-md-filenames --simple-md-filenames - --verbose --batchfile --new-name' -- "$2" ) ) - else - COMPREPLY=( $( compgen -f -- "$2" ) ) - fi -} && -complete -F _cr_modifyrepo -o filenames modifyrepo_c - -_cr_sqliterepo() -{ - COMPREPLY=() - - case $3 in - -h|--help|-V|--version) - return 0 - ;; - --compress-type) - _cr_compress_type "" "$2" - return 0 - ;; - -s|--checksum) - _cr_checksum_type "$1" "$2" - return 0 - ;; - esac - - if [[ $2 == -* ]] ; then - COMPREPLY=( $( compgen -W '--help --version --quiet --verbose - --force --keep-old --xz --compress-type --checksum - --local-sqlite ' -- "$2" ) ) - else - COMPREPLY=( $( compgen -f -- "$2" ) ) - fi -} && -complete -F _cr_sqliterepo -o filenames sqliterepo_c - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/createrepo_c.bash.in new/createrepo_c-1.2.3/createrepo_c.bash.in --- old/createrepo_c-1.2.2/createrepo_c.bash.in 1970-01-01 01:00:00.000000000 +0100 +++ new/createrepo_c-1.2.3/createrepo_c.bash.in 2026-03-20 07:44:28.000000000 +0100 @@ -0,0 +1,192 @@ +# bash completion for createrepo and friends + +_cr_compress_type() +{ + COMPREPLY=( $( compgen -W "bz2 gz xz" -- "$2" ) ) +} + +_cr_checksum_type() +{ + COMPREPLY=( $( compgen -W "md5 sha sha1 sha224 sha256 sha384 sha512" -- "$2" ) ) +} + +_cr_createrepo() +{ + COMPREPLY=() + local _cr_has_drpm=@ENABLE_DRPM_BASH@ + + case $3 in + -V|--version|-h|--help) + return 0 + ;; + --update-md-path|-o|--outputdir) + COMPREPLY=( $( compgen -d -- "$2" ) ) + return 0 + ;; + --oldpackagedirs) + (( _cr_has_drpm )) && COMPREPLY=( $( compgen -d -- "$2" ) ) && return 0 + ;; + -g|--groupfile) + COMPREPLY=( $( compgen -f -o plusdirs -X '!*.xml' -- "$2" ) ) + return 0 + ;; + -s|--checksum) + _cr_checksum_type "$1" "$2" + return 0 + ;; + -i|--pkglist|--read-pkgs-list) + COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) + return 0 + ;; + -n|--includepkg) + COMPREPLY=( $( compgen -f -o plusdirs -X '!*.rpm' -- "$2" ) ) + return 0 + ;; +# --retain-old-md) +# COMPREPLY=( $( compgen -W '0 1 2 3 4 5 6 7 8 9' -- "$2" ) ) +# return 0 +# ;; +# --num-deltas|--max-delta-rpm-size) +# COMPREPLY=( $( compgen -W '1 2 3 4 5 6 7 8 9' -- "$2" ) ) +# return 0 +# ;; + --workers) + local min=2 max=$( getconf _NPROCESSORS_ONLN 2>/dev/null ) + [[ -z $max || $max -lt $min ]] && max=$min + COMPREPLY=( $( compgen -W "{1..$max}" -- "$2" ) ) + return 0 + ;; + --compress-type) + _cr_compress_type "$1" "$2" + return 0 + ;; + esac + + if [[ $2 == -* ]] ; then + local cr_opts='--help --version --quiet --verbose + --excludes --basedir --baseurl --groupfile --checksum + --pretty --database --no-database --update --update-md-path + --skip-stat --pkglist --includepkg --outputdir + --skip-symlinks --changelog-limit --unique-md-filenames + --simple-md-filenames --retain-old-md --distro --content --repo + --revision --read-pkgs-list --workers --xz + --compress-type --keep-all-metadata --compatibility + --retain-old-md-by-age --cachedir --local-sqlite + --cut-dirs --location-prefix + --recycle-pkglist' + (( _cr_has_drpm )) && cr_opts="$cr_opts + --deltas --oldpackagedirs + --num-deltas --max-delta-rpm-size" + COMPREPLY=( $( compgen -W "$cr_opts" -- "$2" ) ) + else + COMPREPLY=( $( compgen -d -- "$2" ) ) + fi +} && +complete -F _cr_createrepo -o filenames createrepo_c + +_cr_mergerepo() +{ + COMPREPLY=() + + case $3 in + --version|-h|--help) + return 0 + ;; + -g|--groupfile|--blocked) + COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) + return 0 + ;; + -r|--repo|-o|--outputdir|--noarch-repo) + COMPREPLY=( $( compgen -d -- "$2" ) ) + return 0 + ;; + --compress-type) + _cr_compress_type "" "$2" + return 0 + ;; + --method) + COMPREPLY=( $( compgen -W "repo ts nvr" -- "$2" ) ) + return 0 + ;; + esac + + if [[ $2 == -* ]] ; then + COMPREPLY=( $( compgen -W '--version --help --repo --archlist --database + --no-database --verbose --outputdir --nogroups --noupdateinfo + --compress-type --method --all --noarch-repo --unique-md-filenames + --simple-md-filenames --omit-baseurl --koji --groupfile + --blocked' -- "$2" ) ) + else + COMPREPLY=( $( compgen -d -- "$2" ) ) + fi +} && +complete -F _cr_mergerepo -o filenames mergerepo_c + +_cr_modifyrepo() +{ + COMPREPLY=() + + case $3 in + --version|-h|--help) + return 0 + ;; + -f|--batchfile) + COMPREPLY=( $( compgen -f -o plusdirs -- "$2" ) ) + return 0 + ;; + --compress-type) + _cr_compress_type "" "$2" + return 0 + ;; + -s|--checksum) + _cr_checksum_type "$1" "$2" + return 0 + ;; + esac + + if [[ $2 == -* ]] ; then + COMPREPLY=( $( compgen -W '--version --help --mdtype --remove + --compress --no-compress --compress-type --checksum + --unique-md-filenames --simple-md-filenames + --verbose --batchfile --new-name' -- "$2" ) ) + else + COMPREPLY=( $( compgen -f -- "$2" ) ) + fi +} && +complete -F _cr_modifyrepo -o filenames modifyrepo_c + +_cr_sqliterepo() +{ + COMPREPLY=() + + case $3 in + -h|--help|-V|--version) + return 0 + ;; + --compress-type) + _cr_compress_type "" "$2" + return 0 + ;; + -s|--checksum) + _cr_checksum_type "$1" "$2" + return 0 + ;; + esac + + if [[ $2 == -* ]] ; then + COMPREPLY=( $( compgen -W '--help --version --quiet --verbose + --force --keep-old --xz --compress-type --checksum + --local-sqlite ' -- "$2" ) ) + else + COMPREPLY=( $( compgen -f -- "$2" ) ) + fi +} && +complete -F _cr_sqliterepo -o filenames sqliterepo_c + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/createrepo_c.spec new/createrepo_c-1.2.3/createrepo_c.spec --- old/createrepo_c-1.2.2/createrepo_c.spec 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/createrepo_c.spec 2026-03-20 07:44:28.000000000 +0100 @@ -38,7 +38,7 @@ %if %{defined gitrev} %define package_version %{?gitrev} %else -%define package_version 1.2.2 +%define package_version 1.2.3 %endif Summary: Creates a common metadata repository diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/doc/CMakeLists.txt new/createrepo_c-1.2.3/doc/CMakeLists.txt --- old/createrepo_c-1.2.2/doc/CMakeLists.txt 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/doc/CMakeLists.txt 2026-03-20 07:44:28.000000000 +0100 @@ -15,8 +15,15 @@ ADD_DEPENDENCIES (doc doc-c) endif(BUILD_DOC_C) +IF(ENABLE_DRPM) + SET(ENABLE_DRPM_MAN 1) +ELSE() + SET(ENABLE_DRPM_MAN 0) +ENDIF() +CONFIGURE_FILE(createrepo_c.8.in ${CMAKE_CURRENT_BINARY_DIR}/createrepo_c.8 @ONLY) + IF(CREATEREPO_C_INSTALL_MANPAGES) - INSTALL(FILES createrepo_c.8 mergerepo_c.8 modifyrepo_c.8 sqliterepo_c.8 + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/createrepo_c.8 mergerepo_c.8 modifyrepo_c.8 sqliterepo_c.8 DESTINATION "${CMAKE_INSTALL_MANDIR}/man8" COMPONENT bin) ENDIF(CREATEREPO_C_INSTALL_MANPAGES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/doc/createrepo_c.8 new/createrepo_c-1.2.3/doc/createrepo_c.8 --- old/createrepo_c-1.2.2/doc/createrepo_c.8 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/doc/createrepo_c.8 1970-01-01 01:00:00.000000000 +0100 @@ -1,223 +0,0 @@ -.\" Man page generated from reStructuredText. -. -.TH CREATEREPO_C 8 "2021-09-23" "" "" -.SH NAME -createrepo_c \- Create rpm-md format (xml-rpm-metadata) repository -. -.nr rst2man-indent-level 0 -. -.de1 rstReportMargin -\\$1 \\n[an-margin] -level \\n[rst2man-indent-level] -level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] -- -\\n[rst2man-indent0] -\\n[rst2man-indent1] -\\n[rst2man-indent2] -.. -.de1 INDENT -.\" .rstReportMargin pre: -. RS \\$1 -. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] -. nr rst2man-indent-level +1 -.\" .rstReportMargin post: -.. -.de UNINDENT -. RE -.\" indent \\n[an-margin] -.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] -.nr rst2man-indent-level -1 -.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] -.in \\n[rst2man-indent\\n[rst2man-indent-level]]u -.. -.\" -*- coding: utf-8 -*- -. -.SH SYNOPSIS -.sp -createrepo_c [options] <directory> -.SH DESCRIPTION -.sp -Uses rpm packages from <directory> to create repodata. -.sp -If compiled with libmodulemd support modular metadata inside <directory> identified by the patterns below and all their compressed variants are automatically collected, merged and added to the repodata. -.sp -The patterns are: -.INDENT 0.0 -.INDENT 3.5 -.INDENT 0.0 -.IP \(bu 2 -*.modulemd.yaml (recommended file name: N:S:V:C:A.modulemd.yaml) -.IP \(bu 2 -*.modulemd\-defaults.yaml (recommended file name: N.modulemd\-defaults.yaml) -.IP \(bu 2 -modules.yaml (recommended way of importing multiple documents at once) -.UNINDENT -.UNINDENT -.UNINDENT -.SH OPTIONS -.SS \-V \-\-version -.sp -Show program\(aqs version number and exit. -.SS \-q \-\-quiet -.sp -Run quietly. -.SS \-v \-\-verbose -.sp -Run verbosely. -.SS \-x \-\-excludes PACKAGE_NAME_GLOB -.sp -Path patterns to exclude, can be specified multiple times. The patterns are -matched against relative paths to RPMs. Note that the feature uses -\fBg\_pattern\_match()\fR function, not \fBglob()\fR, for semantic differences -see https://developer.gnome.org/glib/stable/glib-Glob-style-pattern-matching.html -.SS \-\-basedir BASEDIR -.sp -Basedir for path to directories. -.SS \-u \-\-baseurl URL -.sp -Optional base URL location for all files. -.SS \-g \-\-groupfile GROUPFILE -.sp -Path to groupfile to include in metadata. -.SS \-s \-\-checksum CHECKSUM_TYPE -.sp -Choose the checksum type used in repomd.xml and for packages in the metadata. The default is now sha256. -.SS \-p \-\-pretty -.sp -Make sure all xml generated is formatted (default) -.SS \-p \-\-no\-pretty -.sp -Minify the generated xml content. On average this reduces compressed size by 2%. -.SS \-d \-\-database -.sp -DEPRECATED: Generate sqlite databases for use with yum. -.SS \-\-no\-database -.sp -Do not generate sqlite databases in the repository. -.SS \-\-update -.sp -If metadata already exists in the outputdir and an rpm is unchanged (based on file size and mtime) since the metadata was generated, reuse the existing metadata rather than recalculating it. In the case of a large repository with only a few new or modified rpms this can significantly reduce I/O and processing time. -.SS \-\-update\-md\-path -.sp -Existing metadata from this path are loaded and reused in addition to those present in the outputdir (works only with \-\-update). Can be specified multiple times. -.SS \-\-skip\-stat -.sp -Skip the stat() call on a \-\-update, assumes if the filename is the same then the file is still the same (only use this if you\(aqre fairly trusting or gullible). -.SS \-\-split -.sp -Run in split media mode. Rather than pass a single directory, take a set of directories corresponding to different volumes in a media set. Meta data is created in the first given directory -.SS \-i \-\-pkglist FILENAME -.sp -Specify a text file which contains the complete list of files to include in the repository from the set found in the directory. File format is one package per line, no wildcards or globs. -.SS \-n \-\-includepkg PACKAGE -.sp -Specify pkgs to include on the command line. Takes urls as well as local paths. -.SS \-\-recycle\-pkglist -.sp -Useful only with \fB\-\-update\fR. Read the list of packages from old metadata, -and reuse it instead of (perhaps expensive) directory traversal. This doesn't -collide with explicitly selected packages by \fB\-\-pkglist\fR or -\fB\-\-includepkg\fR, such packages are appended to the recycled list. -This option is useful for I/O optimal repo modifications (package removal by -\fB\-\-exclude\fR, and additions with \fB\-\-pkglist\fR). -.SS \-o \-\-outputdir URL -.sp -Optional output directory. -.SS \-S \-\-skip\-symlinks -.sp -Ignore symlinks of packages. -.SS \-\-changelog\-limit NUM -.sp -Only import the last N changelog entries, from each rpm, into the metadata. -.SS \-\-unique\-md\-filenames -.sp -Include the file\(aqs checksum in the metadata filename, helps HTTP caching (default). -.SS \-\-simple\-md\-filenames -.sp -Do not include the file\(aqs checksum in the metadata filename. -.SS \-\-retain\-old\-md NUM -.sp -Specify NUM to 0 to remove all repodata present in old repomd.xml or any other positive number to keep all old repodata. Use \-\-compatibility flag to get the behavior of original createrepo: Keep around the latest (by timestamp) NUM copies of the old repodata (works only for primary, filelists, other and their DB variants). -.SS \-\-distro DISTRO -.sp -Distro tag and optional cpeid: \-\-distro\(aqcpeid,textname\(aq. -.SS \-\-content CONTENT_TAGS -.sp -Tags for the content in the repository. -.SS \-\-repo REPO_TAGS -.sp -Tags to describe the repository itself. -.SS \-\-revision REVISION -.sp -User\-specified revision for this repository. -.SS \-\-set\-timestamp\-to\-revision -.sp -Set timestamp fields in repomd.xml and last modification times of created repodata to a value given with \-\-revision. This requires \-\-revision to be a timestamp formatted in \(aqdate +%s\(aq format. -.SS \-\-read\-pkgs\-list READ_PKGS_LIST -.sp -Output the paths to the pkgs actually read useful with \-\-update. -.SS \-\-workers -.sp -Number of workers to spawn to read rpms. -.SS \-\-xz -.sp -Use xz for repodata compression. -.SS \-\-compress\-type COMPRESSION_TYPE -.sp -Which compression type to use. Supported compressions are: bz2, gz, zck, zstd, xz. -.SS \-\-general\-compress\-type COMPRESSION_TYPE -.sp -Which compression type to use (even for primary, filelists and other xml). -.SS \-\-zck -.sp -Generate zchunk files as well as the standard repodata. -.SS \-\-zck\-dict\-dir ZCK_DICT_DIR -.sp -Directory containing compression dictionaries for use by zchunk -.SS \-\-keep\-all\-metadata -.sp -Keep all additional metadata (not primary, filelists and other xml or sqlite files, nor their compressed variants) from source repository during update (default). -.SS \-\-discard\-additional\-metadata -.sp -Discard all additional metadata (not primary, filelists and other xml or sqlite files, nor their compressed variants) from source repository during update. -.SS \-\-compatibility -.sp -Enforce maximal compatibility with classical createrepo (Changes \-\-retain\-old\-md behavior, defaults to Gzip for compression). -.SS \-\-retain\-old\-md\-by\-age AGE -.sp -During \-\-update, remove all files in repodata/ which are older then the specified period of time. (e.g. \(aq2h\(aq, \(aq30d\(aq, ...). Available units (m \- minutes, h \- hours, d \- days) -.SS \-c \-\-cachedir CACHEDIR. -.sp -Set path to cache dir -.SS \-\-deltas -.sp -Tells createrepo to generate deltarpms and the delta metadata. -.SS \-\-oldpackagedirs PATH -.sp -Paths to look for older pkgs to delta against. Can be specified multiple times. -.SS \-\-num\-deltas INT -.sp -The number of older versions to make deltas against. Defaults to 1. -.SS \-\-max\-delta\-rpm\-size MAX_DELTA_RPM_SIZE -.sp -Max size of an rpm that to run deltarpm against (in bytes). -.SS \-\-local\-sqlite -.sp -Gen sqlite DBs locally (into a directory for temporary files). Sometimes, sqlite has a trouble to gen DBs on a NFS mount, use this option in such cases. This option could lead to a higher memory consumption if TMPDIR is set to /tmp or not set at all, because then the /tmp is used and /tmp dir is often a ramdisk. -.SS \-\-cut\-dirs NUM -.sp -Ignore NUM of directory components in location_href during repodata generation -.SS \-\-location\-prefix PREFIX -.sp -Append this prefix before location_href in output repodata -.SS \-\-repomd\-checksum CHECKSUM_TYPE -.sp -Checksum type to be used in repomd.xml -.SS \-\-error\-exit\-val -.sp -Exit with retval 2 if there were any errors during processing (option deprecated, on by default) -.SS \-\-ignore\-lock -.sp -Expert (risky) option: Ignore an existing .repodata/. (Remove the existing .repodata/ and create an empty new one to serve as a lock for other createrepo instances. For the repodata generation, a different temporary dir with the name in format .repodata.time.microseconds.pid/ will be used). NOTE: Use this option on your own risk! If two createrepos run simultaneously, then the state of the generated metadata is not guaranteed \- it can be inconsistent and wrong. -.\" Generated by docutils manpage writer. -. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/doc/createrepo_c.8.in new/createrepo_c-1.2.3/doc/createrepo_c.8.in --- old/createrepo_c-1.2.2/doc/createrepo_c.8.in 1970-01-01 01:00:00.000000000 +0100 +++ new/createrepo_c-1.2.3/doc/createrepo_c.8.in 2026-03-20 07:44:28.000000000 +0100 @@ -0,0 +1,225 @@ +.\" Man page generated from reStructuredText. +. +.TH CREATEREPO_C 8 "2021-09-23" "" "" +.SH NAME +createrepo_c \- Create rpm-md format (xml-rpm-metadata) repository +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.\" -*- coding: utf-8 -*- +. +.SH SYNOPSIS +.sp +createrepo_c [options] <directory> +.SH DESCRIPTION +.sp +Uses rpm packages from <directory> to create repodata. +.sp +If compiled with libmodulemd support modular metadata inside <directory> identified by the patterns below and all their compressed variants are automatically collected, merged and added to the repodata. +.sp +The patterns are: +.INDENT 0.0 +.INDENT 3.5 +.INDENT 0.0 +.IP \(bu 2 +*.modulemd.yaml (recommended file name: N:S:V:C:A.modulemd.yaml) +.IP \(bu 2 +*.modulemd\-defaults.yaml (recommended file name: N.modulemd\-defaults.yaml) +.IP \(bu 2 +modules.yaml (recommended way of importing multiple documents at once) +.UNINDENT +.UNINDENT +.UNINDENT +.SH OPTIONS +.SS \-V \-\-version +.sp +Show program\(aqs version number and exit. +.SS \-q \-\-quiet +.sp +Run quietly. +.SS \-v \-\-verbose +.sp +Run verbosely. +.SS \-x \-\-excludes PACKAGE_NAME_GLOB +.sp +Path patterns to exclude, can be specified multiple times. The patterns are +matched against relative paths to RPMs. Note that the feature uses +\fBg\_pattern\_match()\fR function, not \fBglob()\fR, for semantic differences +see https://developer.gnome.org/glib/stable/glib-Glob-style-pattern-matching.html +.SS \-\-basedir BASEDIR +.sp +Basedir for path to directories. +.SS \-u \-\-baseurl URL +.sp +Optional base URL location for all files. +.SS \-g \-\-groupfile GROUPFILE +.sp +Path to groupfile to include in metadata. +.SS \-s \-\-checksum CHECKSUM_TYPE +.sp +Choose the checksum type used in repomd.xml and for packages in the metadata. The default is now sha256. +.SS \-p \-\-pretty +.sp +Make sure all xml generated is formatted (default) +.SS \-p \-\-no\-pretty +.sp +Minify the generated xml content. On average this reduces compressed size by 2%. +.SS \-d \-\-database +.sp +DEPRECATED: Generate sqlite databases for use with yum. +.SS \-\-no\-database +.sp +Do not generate sqlite databases in the repository. +.SS \-\-update +.sp +If metadata already exists in the outputdir and an rpm is unchanged (based on file size and mtime) since the metadata was generated, reuse the existing metadata rather than recalculating it. In the case of a large repository with only a few new or modified rpms this can significantly reduce I/O and processing time. +.SS \-\-update\-md\-path +.sp +Existing metadata from this path are loaded and reused in addition to those present in the outputdir (works only with \-\-update). Can be specified multiple times. +.SS \-\-skip\-stat +.sp +Skip the stat() call on a \-\-update, assumes if the filename is the same then the file is still the same (only use this if you\(aqre fairly trusting or gullible). +.SS \-\-split +.sp +Run in split media mode. Rather than pass a single directory, take a set of directories corresponding to different volumes in a media set. Meta data is created in the first given directory +.SS \-i \-\-pkglist FILENAME +.sp +Specify a text file which contains the complete list of files to include in the repository from the set found in the directory. File format is one package per line, no wildcards or globs. +.SS \-n \-\-includepkg PACKAGE +.sp +Specify pkgs to include on the command line. Takes urls as well as local paths. +.SS \-\-recycle\-pkglist +.sp +Useful only with \fB\-\-update\fR. Read the list of packages from old metadata, +and reuse it instead of (perhaps expensive) directory traversal. This doesn't +collide with explicitly selected packages by \fB\-\-pkglist\fR or +\fB\-\-includepkg\fR, such packages are appended to the recycled list. +This option is useful for I/O optimal repo modifications (package removal by +\fB\-\-exclude\fR, and additions with \fB\-\-pkglist\fR). +.SS \-o \-\-outputdir URL +.sp +Optional output directory. +.SS \-S \-\-skip\-symlinks +.sp +Ignore symlinks of packages. +.SS \-\-changelog\-limit NUM +.sp +Only import the last N changelog entries, from each rpm, into the metadata. +.SS \-\-unique\-md\-filenames +.sp +Include the file\(aqs checksum in the metadata filename, helps HTTP caching (default). +.SS \-\-simple\-md\-filenames +.sp +Do not include the file\(aqs checksum in the metadata filename. +.SS \-\-retain\-old\-md NUM +.sp +Specify NUM to 0 to remove all repodata present in old repomd.xml or any other positive number to keep all old repodata. Use \-\-compatibility flag to get the behavior of original createrepo: Keep around the latest (by timestamp) NUM copies of the old repodata (works only for primary, filelists, other and their DB variants). +.SS \-\-distro DISTRO +.sp +Distro tag and optional cpeid: \-\-distro\(aqcpeid,textname\(aq. +.SS \-\-content CONTENT_TAGS +.sp +Tags for the content in the repository. +.SS \-\-repo REPO_TAGS +.sp +Tags to describe the repository itself. +.SS \-\-revision REVISION +.sp +User\-specified revision for this repository. +.SS \-\-set\-timestamp\-to\-revision +.sp +Set timestamp fields in repomd.xml and last modification times of created repodata to a value given with \-\-revision. This requires \-\-revision to be a timestamp formatted in \(aqdate +%s\(aq format. +.SS \-\-read\-pkgs\-list READ_PKGS_LIST +.sp +Output the paths to the pkgs actually read useful with \-\-update. +.SS \-\-workers +.sp +Number of workers to spawn to read rpms. +.SS \-\-xz +.sp +Use xz for repodata compression. +.SS \-\-compress\-type COMPRESSION_TYPE +.sp +Which compression type to use. Supported compressions are: bz2, gz, zck, zstd, xz. +.SS \-\-general\-compress\-type COMPRESSION_TYPE +.sp +Which compression type to use (even for primary, filelists and other xml). +.SS \-\-zck +.sp +Generate zchunk files as well as the standard repodata. +.SS \-\-zck\-dict\-dir ZCK_DICT_DIR +.sp +Directory containing compression dictionaries for use by zchunk +.SS \-\-keep\-all\-metadata +.sp +Keep all additional metadata (not primary, filelists and other xml or sqlite files, nor their compressed variants) from source repository during update (default). +.SS \-\-discard\-additional\-metadata +.sp +Discard all additional metadata (not primary, filelists and other xml or sqlite files, nor their compressed variants) from source repository during update. +.SS \-\-compatibility +.sp +Enforce maximal compatibility with classical createrepo (Changes \-\-retain\-old\-md behavior, defaults to Gzip for compression). +.SS \-\-retain\-old\-md\-by\-age AGE +.sp +During \-\-update, remove all files in repodata/ which are older then the specified period of time. (e.g. \(aq2h\(aq, \(aq30d\(aq, ...). Available units (m \- minutes, h \- hours, d \- days) +.SS \-c \-\-cachedir CACHEDIR. +.sp +Set path to cache dir +.if @ENABLE_DRPM_MAN@ \{\ +.SS \-\-deltas +.sp +Tells createrepo to generate deltarpms and the delta metadata. +.SS \-\-oldpackagedirs PATH +.sp +Paths to look for older pkgs to delta against. Can be specified multiple times. +.SS \-\-num\-deltas INT +.sp +The number of older versions to make deltas against. Defaults to 1. +.SS \-\-max\-delta\-rpm\-size MAX_DELTA_RPM_SIZE +.sp +Max size of an rpm that to run deltarpm against (in bytes). +.\} +.SS \-\-local\-sqlite +.sp +Gen sqlite DBs locally (into a directory for temporary files). Sometimes, sqlite has a trouble to gen DBs on a NFS mount, use this option in such cases. This option could lead to a higher memory consumption if TMPDIR is set to /tmp or not set at all, because then the /tmp is used and /tmp dir is often a ramdisk. +.SS \-\-cut\-dirs NUM +.sp +Ignore NUM of directory components in location_href during repodata generation +.SS \-\-location\-prefix PREFIX +.sp +Append this prefix before location_href in output repodata +.SS \-\-repomd\-checksum CHECKSUM_TYPE +.sp +Checksum type to be used in repomd.xml +.SS \-\-error\-exit\-val +.sp +Exit with retval 2 if there were any errors during processing (option deprecated, on by default) +.SS \-\-ignore\-lock +.sp +Expert (risky) option: Ignore an existing .repodata/. (Remove the existing .repodata/ and create an empty new one to serve as a lock for other createrepo instances. For the repodata generation, a different temporary dir with the name in format .repodata.time.microseconds.pid/ will be used). NOTE: Use this option on your own risk! If two createrepos run simultaneously, then the state of the generated metadata is not guaranteed \- it can be inconsistent and wrong. +.\" Generated by docutils manpage writer. +. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/CMakeLists.txt new/createrepo_c-1.2.3/src/CMakeLists.txt --- old/createrepo_c-1.2.2/src/CMakeLists.txt 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/CMakeLists.txt 2026-03-20 07:44:28.000000000 +0100 @@ -78,6 +78,11 @@ ENDIF () ENDIF () +# rpm/rpmver.h exists since RPM 4.16.0-beta2. +IF (RPM_VERSION VERSION_GREATER_EQUAL "4.16.0") + ADD_COMPILE_DEFINITIONS(HAVE_RPM_RPMVER_H) +ENDIF () + IF (BUILD_LIBCREATEREPO_C_SHARED) SET (createrepo_c_library_type SHARED) ELSE () diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/cmd_parser.c new/createrepo_c-1.2.3/src/cmd_parser.c --- old/createrepo_c-1.2.2/src/cmd_parser.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/cmd_parser.c 2026-03-20 07:44:28.000000000 +0100 @@ -56,10 +56,13 @@ .location_prefix = NULL, .repomd_checksum = NULL, .pretty = DEFAULT_FORMAT_PRETTY, + +#ifdef CR_DELTA_RPM_SUPPORT .deltas = FALSE, .oldpackagedirs = NULL, .num_deltas = 1, .max_delta_rpm_size = CR_DEFAULT_MAX_DELTA_RPM_SIZE, +#endif .checksum_cachedir = NULL, .repomd_checksum_type = CR_CHECKSUM_SHA256, @@ -630,6 +633,7 @@ } } +#ifdef CR_DELTA_RPM_SUPPORT // Check oldpackagedirs x = 0; while (options->oldpackagedirs && options->oldpackagedirs[x]) { @@ -639,6 +643,7 @@ (gpointer) path); x++; } +#endif // Check cut_dirs if (options->cut_dirs < 0) { @@ -690,7 +695,10 @@ g_strfreev(options->distro_tags); g_strfreev(options->content_tags); g_strfreev(options->repo_tags); + +#ifdef CR_DELTA_RPM_SUPPORT g_strfreev(options->oldpackagedirs); +#endif cr_slist_free_full(options->include_pkgs, g_free); cr_slist_free_full(options->exclude_masks, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/cmd_parser.h new/createrepo_c-1.2.3/src/cmd_parser.h --- old/createrepo_c-1.2.2/src/cmd_parser.h 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/cmd_parser.h 2026-03-20 07:44:28.000000000 +0100 @@ -100,6 +100,7 @@ d - days) */ char *cachedir; /*!< Cache dir for checksums */ +#ifdef CR_DELTA_RPM_SUPPORT gboolean deltas; /*!< Is delta generation enabled? */ char **oldpackagedirs; /*!< Paths to look for older pks to delta agains */ @@ -107,6 +108,8 @@ deltas against */ gint64 max_delta_rpm_size; /*!< Max size of an rpm that to run deltarpm against */ +#endif + gboolean local_sqlite; /*!< Gen sqlite locally into a directory for temporary files. For situations when sqlite has a trouble diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/createrepo_c.c new/createrepo_c-1.2.3/src/createrepo_c.c --- old/createrepo_c-1.2.2/src/createrepo_c.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/createrepo_c.c 2026-03-20 07:44:28.000000000 +0100 @@ -1474,9 +1474,13 @@ user_data.id_fex = 0; user_data.id_oth = 0; user_data.buffer = g_queue_new(); + +#ifdef CR_DELTA_RPM_SUPPORT user_data.deltas = cmd_options->deltas; user_data.max_delta_rpm_size= cmd_options->max_delta_rpm_size; user_data.deltatargetpackages = NULL; +#endif + user_data.cut_dirs = cmd_options->cut_dirs; user_data.location_prefix = cmd_options->location_prefix; user_data.had_errors = 0; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/deltarpms.h.in new/createrepo_c-1.2.3/src/deltarpms.h.in --- old/createrepo_c-1.2.2/src/deltarpms.h.in 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/deltarpms.h.in 2026-03-20 07:44:28.000000000 +0100 @@ -25,7 +25,6 @@ #endif #include <glib.h> -#include <rpm/rpmlib.h> #include "package.h" #include "parsehdr.h" #include "xml_file.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/dumper_thread.h new/createrepo_c-1.2.3/src/dumper_thread.h --- old/createrepo_c-1.2.2/src/dumper_thread.h 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/dumper_thread.h 2026-03-20 07:44:28.000000000 +0100 @@ -25,7 +25,6 @@ #endif #include <glib.h> -#include <rpm/rpmlib.h> #include "load_metadata.h" #include "locate_metadata.h" #include "misc.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/locate_metadata.c new/createrepo_c-1.2.3/src/locate_metadata.c --- old/createrepo_c-1.2.2/src/locate_metadata.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/locate_metadata.c 2026-03-20 07:44:28.000000000 +0100 @@ -265,19 +265,19 @@ handle = curl_easy_init(); // Fail on HTTP error (return code >= 400) - if (curl_easy_setopt(handle, CURLOPT_FAILONERROR, 1) != CURLE_OK) { + if (curl_easy_setopt(handle, CURLOPT_FAILONERROR, 1L) != CURLE_OK) { g_critical("%s: curl_easy_setopt(CURLOPT_FAILONERROR) error", __func__); goto get_remote_metadata_cleanup; } // Follow redirs - if (curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1) != CURLE_OK) { + if (curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1L) != CURLE_OK) { g_critical("%s: curl_easy_setopt(CURLOPT_FOLLOWLOCATION) error", __func__); goto get_remote_metadata_cleanup; } // Maximal number of redirects - if (curl_easy_setopt(handle, CURLOPT_MAXREDIRS, 6) != CURLE_OK) { + if (curl_easy_setopt(handle, CURLOPT_MAXREDIRS, 6L) != CURLE_OK) { g_critical("%s: curl_easy_setopt(CURLOPT_MAXREDIRS) error", __func__); goto get_remote_metadata_cleanup; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/misc.c new/createrepo_c-1.2.3/src/misc.c --- old/createrepo_c-1.2.2/src/misc.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/misc.c 2026-03-20 07:44:28.000000000 +0100 @@ -25,7 +25,11 @@ #include <curl/curl.h> #include <errno.h> #include <ftw.h> +#ifdef HAVE_RPM_RPMVER_H +#include <rpm/rpmver.h> +#else #include <rpm/rpmlib.h> +#endif #include <stdio.h> #include <stdlib.h> #include <string.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/parsehdr.c new/createrepo_c-1.2.3/src/parsehdr.c --- old/createrepo_c-1.2.2/src/parsehdr.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/parsehdr.c 2026-03-20 07:44:28.000000000 +0100 @@ -19,8 +19,16 @@ #include <glib.h> #include <assert.h> +#include <rpm/header.h> #include <rpm/rpmfi.h> #include <rpm/rpmpgp.h> +#include <rpm/rpmtag.h> +#include <rpm/rpmtd.h> +#ifdef HAVE_RPM_RPMVER_H +#include <rpm/rpmver.h> +#else +#include <rpm/rpmlib.h> +#endif #include <stdlib.h> #include "parsehdr.h" #include "xml_dump.h" @@ -321,8 +329,10 @@ packagefile->type = cr_safe_string_chunk_insert(pkg->chunk, ""); } - packagefile->digest = cr_safe_string_chunk_insert(pkg->chunk, - rpmtdGetString(filedigests)); + if (!(hdrrflags & CR_HDRR_NOFILEDIGESTS)) { + packagefile->digest = cr_safe_string_chunk_insert(pkg->chunk, + rpmtdGetString(filedigests)); + } g_hash_table_replace(filenames_hashtable, (gpointer) rpmtdGetString(full_filenames), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/parsehdr.h new/createrepo_c-1.2.3/src/parsehdr.h --- old/createrepo_c-1.2.2/src/parsehdr.h 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/parsehdr.h 2026-03-20 07:44:28.000000000 +0100 @@ -25,7 +25,7 @@ #endif #include <glib.h> -#include <rpm/rpmlib.h> +#include <rpm/rpmtypes.h> #include "package.h" /** \defgroup parsehdr Header parser API. @@ -39,6 +39,11 @@ CR_HDRR_NONE = (1 << 0), CR_HDRR_LOADHDRID = (1 << 1), /*!< Load hdrid */ CR_HDRR_LOADSIGNATURES = (1 << 2), /*!< Load siggpg and siggpg */ + CR_HDRR_NOFILEDIGESTS = (1 << 3), /*!< Don't load file digests */ + CR_HDRR_ALL = CR_HDRR_NONE | + CR_HDRR_LOADHDRID | + CR_HDRR_LOADSIGNATURES | + CR_HDRR_NOFILEDIGESTS, /*!< All flags set (doesn't mean load all) */ } cr_HeaderReadingFlags; /** Read data from header and return filled cr_Package structure. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/python/createrepo_c/__init__.py new/createrepo_c-1.2.3/src/python/createrepo_c/__init__.py --- old/createrepo_c-1.2.2/src/python/createrepo_c/__init__.py 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/python/createrepo_c/__init__.py 2026-03-20 07:44:28.000000000 +0100 @@ -86,6 +86,11 @@ XMLFILE_PRESTODELTA = _createrepo_c.XMLFILE_PRESTODELTA #: Prestodelta xml file XMLFILE_UPDATEINFO = _createrepo_c.XMLFILE_UPDATEINFO #: Updateinfo xml file +HDRR_NONE = _createrepo_c.HDRR_NONE #: No header reading flags +HDRR_LOADHDRID = _createrepo_c.HDRR_LOADHDRID #: Load hdrid +HDRR_LOADSIGNATURES = _createrepo_c.HDRR_LOADSIGNATURES #: Load siggpg and sigpgp +HDRR_NOFILEDIGESTS = _createrepo_c.HDRR_NOFILEDIGESTS #: Don't load file digests (changes package file tuples from 4 to 3 elements) + #: XML warning - Unknown tag XML_WARNING_UNKNOWNTAG = _createrepo_c.XML_WARNING_UNKNOWNTAG @@ -309,10 +314,10 @@ # Functions def package_from_rpm(filename, checksum_type=SHA256, location_href=None, - location_base=None, changelog_limit=10): + location_base=None, changelog_limit=10, header_reading_flags=HDRR_NONE): """:class:`.Package` object from the rpm package""" return _createrepo_c.package_from_rpm(filename, checksum_type, - location_href, location_base, changelog_limit) + location_href, location_base, changelog_limit, header_reading_flags) def xml_from_rpm(filename, checksum_type=SHA256, location_href=None, location_base=None, changelog_limit=10): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/python/createrepo_cmodule.c new/createrepo_c-1.2.3/src/python/createrepo_cmodule.c --- old/createrepo_c-1.2.2/src/python/createrepo_cmodule.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/python/createrepo_cmodule.c 2026-03-20 07:44:28.000000000 +0100 @@ -305,5 +305,11 @@ PyModule_AddIntConstant(m, "XML_WARNING_UNKNOWNVAL", CR_XML_WARNING_UNKNOWNVAL); PyModule_AddIntConstant(m, "XML_WARNING_BADATTRVAL", CR_XML_WARNING_BADATTRVAL); + /* Header Reading flags */ + PyModule_AddIntConstant(m, "HDRR_NONE", CR_HDRR_NONE); + PyModule_AddIntConstant(m, "HDRR_LOADHDRID", CR_HDRR_LOADHDRID); + PyModule_AddIntConstant(m, "HDRR_LOADSIGNATURES", CR_HDRR_LOADSIGNATURES); + PyModule_AddIntConstant(m, "HDRR_NOFILEDIGESTS", CR_HDRR_NOFILEDIGESTS); + return m; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/python/parsepkg-py.c new/createrepo_c-1.2.3/src/python/parsepkg-py.c --- old/createrepo_c-1.2.2/src/python/parsepkg-py.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/python/parsepkg-py.c 2026-03-20 07:44:28.000000000 +0100 @@ -36,20 +36,27 @@ int checksum_type, changelog_limit; char *filename, *location_href, *location_base; GError *tmp_err = NULL; - cr_HeaderReadingFlags flags = CR_HDRR_NONE; // TODO - support for flags + cr_HeaderReadingFlags header_reading_flags = CR_HDRR_NONE; - if (!PyArg_ParseTuple(args, "sizzi:py_package_from_rpm", + if (!PyArg_ParseTuple(args, "sizzi|i:py_package_from_rpm", &filename, &checksum_type, &location_href, &location_base, - &changelog_limit)) { + &changelog_limit, + &header_reading_flags)) { + return NULL; + } + + if (header_reading_flags & ~ CR_HDRR_ALL) { + PyErr_SetString(PyExc_ValueError, "Unknown header reading flags."); return NULL; } pkg = cr_package_from_rpm(filename, checksum_type, location_href, location_base, changelog_limit, NULL, - flags, &tmp_err); + header_reading_flags, &tmp_err); + if (tmp_err) { cr_package_free(pkg); nice_exception(&tmp_err, "Cannot load %s: ", filename); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/python/parsepkg-py.h new/createrepo_c-1.2.3/src/python/parsepkg-py.h --- old/createrepo_c-1.2.2/src/python/parsepkg-py.h 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/python/parsepkg-py.h 2026-03-20 07:44:28.000000000 +0100 @@ -24,7 +24,7 @@ PyDoc_STRVAR(package_from_rpm__doc__, "package_from_rpm(filename, checksum_type, location_href, " -"location_base, changelog_limit) -> Package\n\n" +"location_base, changelog_limit[, header_reading_flags]) -> Package\n\n" "Package object from the rpm package"); PyObject *py_package_from_rpm(PyObject *self, PyObject *args); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/src/sqlite.c new/createrepo_c-1.2.3/src/sqlite.c --- old/createrepo_c-1.2.2/src/sqlite.c 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/src/sqlite.c 2026-03-20 07:44:28.000000000 +0100 @@ -26,6 +26,7 @@ #include <assert.h> #include <string.h> #include <stdlib.h> +#include <sys/stat.h> #include <errno.h> #include <libxml/encoding.h> #include <libxml/xmlstring.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/createrepo_c-1.2.2/tests/python/tests/test_package.py new/createrepo_c-1.2.3/tests/python/tests/test_package.py --- old/createrepo_c-1.2.2/tests/python/tests/test_package.py 2026-01-19 08:23:36.000000000 +0100 +++ new/createrepo_c-1.2.3/tests/python/tests/test_package.py 2026-03-20 07:44:28.000000000 +0100 @@ -232,3 +232,12 @@ del(pkg_c) self.assertEqual(pkg_d.name, "FooPackage") del(pkg_d) + + def test_package_without_digests(self): + pkg = cr.package_from_rpm(PKG_ARCHER_PATH, header_reading_flags=cr.HDRR_NOFILEDIGESTS) + self.assertTrue(pkg) + self.assertEqual(pkg.files, [ + ('', '/usr/bin/', 'complex_a'), + ('dir', '/usr/share/doc/', 'Archer-3.4.5'), + ('', '/usr/share/doc/Archer-3.4.5/', 'README') + ])
