Welcome to rebase-helper

Code Health GitLab CI build status Travis CI build status Documentation build status

There are several steps that need to be done when rebasing a package. The goal of rebase-helper is to automate most of these steps.

How to get it running?

rebase-helper is packaged in Fedora, so you can just install it with dnf.

If you wish to use the latest codebase, consult installation instructions.

How to use it?

After installation, execute rebase-helper from a directory containing SPEC file, sources and patches (usually cloned dist-git repository).

Without any arguments or configuration rebase-helper will attempt to determine the latest upstream version automatically. If that fails, or if you wish to rebase to some different version, you can specify it explicitly as an argument:

$ rebase-helper 3.1.10

or you can pass source tarball filename instead:

$ rebase-helper foo-4.2.tar.gz

For complete CLI reference see usage.

Alternatively, you can run rebase-helper in a container:

$ docker run -it -e PACKAGE=foo rebasehelper/rebase-helper:latest

See docker reference for more information.

How does it work?

The following steps describe a rebase process:

  • rebase-helper-workspace and rebase-helper-results directories are created
  • original SPEC file is copied to rebase-helper-results/rebased-sources directory and its Version tag is modified
  • old and new source tarballs are downloaded and extracted to rebase-helper-workspace directory
  • downstream patches are rebased on top of new sources using git-rebase, resulting modified patches are saved to rebase-helper-results/rebased-sources directory
  • old and new source RPMs are created and built with selected build tool
  • multiple checker tools are run against both sets of packages and their output is stored in rebase-helper-results/checkers directory
  • rebase-helper-workspace directory is removed

Rebasing of downstream patches is done as follows:

  • new git repository is initialized and the old sources are extracted and commited
  • each downstream patch is applied and changes introduced by it are commited
  • new sources are extracted and added as a remote repository
  • git-rebase is used to rebase the commits on top of new sources
  • original patches are modified/deleted accordingly
  • resulting files are stored in rebase-helper-results/rebased-sources
  • diff against original files is saved to rebase-helper-results/changes.patch