Skip to main content

C implementation of createrepo

Project description

createrepo_c

C implementation of createrepo

Run createrepo -h for usage syntax.

Devel tips

Building

Package build requires - Pkg name in Fedora/Ubuntu:

From your checkout dir:

mkdir build
cd build/
cmake ..
make

To build the documentation, from the build/ directory:

make doc

Note: For build with debugging symbols you could use (from the build/ directory):

cmake -DCMAKE_BUILD_TYPE:STRING=DEBUG .. && make

Building from an rpm checkout

E.g. when you want to try weak and rich dependencies.

cmake .. && make

Note: The RPM must be built in that directory

Commands I am using for building the RPM:

cd /home/tmlcoch/git/rpm
CPPFLAGS='-I/usr/include/nss3/ -I/usr/include/nspr4/' ./autogen.sh --rpmconfigure --with-vendor=redhat --with-external-db --with-lua --with-selinux --with-cap --with-acl --enable-python
make clean && make

Other build options

-DBUILD_DOC_C=OFF

Build C API documentation (Default: ON)

Disable building of C API documentation, which requires doxygen to be present.

-DENABLE_LEGACY_WEAKDEPS=ON

Enable legacy SUSE/Mageia/Mandriva weakdeps support (Default: ON)

-DENABLE_THREADED_XZ_ENCODER=ON

Threaded XZ encoding (Default: OFF)

Note: This option is disabled by default, because Createrepo_c parallelizes a lot of tasks (including compression) by default; this only adds extra threads on XZ library level which causes thread bloat and for most usecases doesn't bring any performance boost. On regular hardware (e.g. less-or-equal 4 cores) this option may even cause degradation of performance.

-DENABLE_DRPM=ON

Enable DeltaRPM support using drpm library (Default: OFF)

Adds support for creating DeltaRPMs and incorporating them into the repository.

-DWITH_ZCHUNK=ON

Build with zchunk support (Default: ON)

-DWITH_LIBMODULEMD=ON

Build with libmodulemd support (Default: ON)

Adds support for working with repos containing Fedora Modularity metadata.

Build tarball

utils/make_tarball.sh [git revision]

Without git revision specified HEAD is used.

Build Python package

To create a binary "wheel" distribution, use:

python setup.py bdist_wheel

To create a source distribution, use:

python setup.py sdist

Installing source distributions require the installer of the package to have all of the build dependencies installed on their system, since they compile the code during installation. Binary distributions are pre-compiled, but they are likely not portable between substantially different systems, e.g. Fedora and Ubuntu.

Note: if you are building a bdist or installing the sdist on a system with an older version of Pip, you may need to install the scikit-build Python package first.

To install either of these packages, use:

pip install dist/{{ package name }}

To create an "editable" install of createrepo_c, use:

python setup.py develop

Note: To recompile the libraries and binaries, you muse re-run this command.

Build RPM package

Modify createrepo_c.spec and run:

utils/make_rpm.sh

Note: Current .spec for Fedora rawhide

Testing

All unit tests run from librepo checkout dir

Build C tests && run c and python tests

make tests && make test

Note: For a verbose output of testing use: make ARGS="-V" test

Run only C unittests (from your checkout dir):

build/tests/run_tests.sh

Note: The C tests have to be built by make tests)!

Run only Python unittests (from your checkout dir):

PYTHONPATH=`readlink -f ./build/src/python/` python3 -m unittest discover -bs tests/python/

Note: When compiling createrepo_c without libmodulemd support add WITH_LIBMODULEMD=OFF

Links

Bugzilla

Important notes

In original createrepo sha is a nickname for the sha1 checksum. Createrepo_c mimics this behaviour.

Contribution

Here's the most direct way to get your work merged into the project.

  1. Fork the project

  2. Clone down your fork

  3. Implement your feature or bug fix and commit changes

  4. If the change fixes a bug at Red Hat bugzilla, or if it is important to the end user, add the following block to the commit message:

    = changelog =
    msg:           message to be included in the changelog
    type:          one of: bugfix/enhancement/security (this field is required when message is present)
    resolves:      URLs to bugs or issues resolved by this commit (can be specified multiple times)
    related:       URLs to any related bugs or issues (can be specified multiple times)
    
    • For example::

      = changelog =
      msg: Enhance error handling when locating repositories
      type: bugfix
      resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1762697
      
    • For your convenience, you can also use git commit template by running the following command in the top-level directory of this project:

      git config commit.template ./.git-commit-template
      
  5. In a separate commit, add your name and email into the authors file as a reward for your generosity

  6. Push the branch to your fork

  7. Send a pull request for your branch


Differences in behavior between createrepo_c and createrepo

Checksums after update

Use case:

  • Repodata in repo/ are has checksum xxx
  • Params: --update --checksum=yyy repo/

createrepo_c result:

  • All package checksums are recalculated into yyy

original createrepo result:

  • Only new and changed packages has yyy checksums other packages has still xxx checksums

Skip symlinks param

Use case:

  • Some packages in repo/ are symlinks
  • Params: --skip-symlinks repo/

createrepo_c result:

  • Symlinked packages are ignored

original createrepo result:

Base path from update-md-path repo

Use case:

  • A somebody else's repo is somewhere
  • The repo items have set a base path to http://foo.com/
  • We want to create metadata for our repo
  • Some packages in our repo are same as packages in somebody else's repo
  • We want to speed up creation of our repodata with combo --update and --update-md-path=somebody_else's_repo
  • Params: --update --update-md-path=ftp://somebody.else/repo our_repo/

createrepo_c results:

  • All our packages have no base path set (if we don't set --baseurl explicitly)

original createrepo result:

Crippled paths in filelists.xml after update

Use case:

  • A repo with old metadata exists
  • We want to update metadata
  • Params: --update repo/

createrepo_c results:

  • All is fine

original createrepo result:

--update leaves behind some old repodata files

Use case:

  • A repo with repodata created with --simple-md-filenames exists
  • We want to update repodata to have checksums in filenames
  • Params: --update repo/

createrepo_c results:

  • All repodata contains checksum in the name

original createrepo result:

Mergerepo_c

Default merge method

  • Original mergerepo included even packages with the same NVR by default
  • Mergerepo_c can be configured by --method option to specify how repositories should be merged.
  • Additionally its possible to use --all option to replicate original mergerepo behavior.

Modifyrepo_c

Modifyrepo_c is compatible with classical Modifyrepo except some misbehaviour:

  • TODO: Report bugs and add reference here

Batch file

When there is need to do several modification to repository (repomd.xml) a batch file could be used.

Batch file is Modifyrepo_c specific. It is not supported by the classical Modifyrepo - at least not yet.

Example

# Add:
#   [<path/to/file>]
#   <options>

# Metadata that use a bunch of config options
[some/path/comps.xml]
type=group
compress=true
compress-type=gz
unique-md-filenames=true
checksum=sha256
new-name=group.xml

# Metadata that use default settings
[some/path/bar.xml]

# Remove:
#   [<metadata name>]
#   remove=true

[updateinfo]
remove=true

Supported options

Option name Description Supported value(s) Default
path Path to the file. When specified it override the path specified in group name (name between [] parenthesis) Any string group name (string between '[' ']')
type Type of the metadata Any string Based on filename
remove Remove specified file/type from repodata true or false false
compress Compress the new metadata before adding it to repo true or false true
compress-type Compression format to use gz, bz2, xz gz
checksum Checksum type to use md5, sha, sha1, sha224, sha256, sha384, sha512 sha256
unique-md-filenames Include the file's checksum in the filename true or false true
new-name New name for the file. If compress is true, then compression suffix will be appended. If unique-md-filenames is true, then checksum will be prepended. Any string Original source filename

Notes

  • Lines beginning with a '#' and blank lines are considered comments.
  • If remove=true is used, no other config options should be used

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ ARM64

createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_aarch64.whl (11.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

File details

Details for the file createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f25c3c698ee12d83eff741653db7952ac41e0df838ec5860bb6d3df314552a2e
MD5 168cd4a828dc45f0a960d954740df98a
BLAKE2b-256 58e472530633cb1031a7f952d5cde484c6a7ec7c6ab91efa3fcf8793a690174a

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp314-cp314t-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e584d543d6e82370195f017590e5cb3e447597780677efb9bab3d0c1ecf46b0a
MD5 84d1a91d467941dfc3e9a3b78802e0a8
BLAKE2b-256 3865fd64724362140d151f14b934c7f0c589d87bf87884b175dfe94297a6ac9c

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 cab69d822bfb63a2901cb463265ba806ca038f09ecc2459cc9305aeb5dbdace3
MD5 b5ab66ac84d7b70f9ac064793ca4ec54
BLAKE2b-256 5f24c1527faab1ef54e939ec0ce1319a72170144df260910b6011f72dc4ba80f

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 51e0d1978b7c106d8a4b7a90bc7c9858ad2a8bd7b43898636cf6e8fbe922a6e6
MD5 c2d43c49dfc5ff798d2d34c581b480d4
BLAKE2b-256 8bc5c2ed234ac257a49774da908bfdb9fbeb6d1dce8d1a8f7fd7e6738e228031

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0ce8af54c5887d6b1f6a6552abe48f7b1af24755f09790d52884c302520d9cda
MD5 834bedb0c7577ef18c794615e8fe40d8
BLAKE2b-256 024940976d46f345cbf8725a360773bbb5278f8bb2b83f9764c14a2e1c8aa77e

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 bf4eb52d857bc1b4bdce2faec6cabecedffd49909e25754c44d6273afd32b986
MD5 2c0911043b5c2e3309bd5576d66a2276
BLAKE2b-256 5dee4bc5cb831ec60db8b9e20fc000eaad3b2f8ceb286fbf5d6ca287641874b7

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 eea865e9ffc2e177900e6486f3120bacaf3c0e49b7114e44d0549401142edc3f
MD5 2ae20f4ce88f0f0fd30523ec4a3d5a08
BLAKE2b-256 aca0a76b0b6ed22c7cbe77d73c95329efba4153d9138186489dc981401b08512

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e4ff7d8f3eaadb975fce87238173be7d456e9b9b7596430fa6e8d307799f9b30
MD5 f1d278769d99a564439e7ed4a55a26ad
BLAKE2b-256 7c5d899e553fbd1932e2be2b4d885399fa77f11d776a50ac65108abe41c9d907

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 154f9179bacf1b160101c173d8727001732ef689e4429603119a0c2254b667ab
MD5 51ad83264278482584be0898e2bddc7f
BLAKE2b-256 669a6a338f32b2a50c25d147c296f650658b9efe8eb2a7cd0d64a60a020fd4cf

See more details on using hashes here.

File details

Details for the file createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for createrepo_c-1.2.3-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d8a58426e84777d02dc58090288091238d596a1fb8268a270e7e2ea1bd16b140
MD5 6d721a7fae475d08850ee5523e394003
BLAKE2b-256 5f9d82aedc551a84a73073a8dea5d783716ef81648bd02880ae373e9d7dc353c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page