gbs devel subcommand to facilitate package maintainers in maintaining the packaging branch in the orphan-packaging branch model. The command offers the following actions:
startcreates a new development branch with the upstream version embedded in its name.
exportexports patches from a development branch to its corresponding packaging branch.
dropremoves an unnecessary development branch.
switchswitches between the packaging branch and the corresponding development branch.
convertconverts a package to the orphan-packaging branch model.
For more information on the 2 maintenance models (orphan-packaging and joint-packaging) and their differences, see Maintenance Models Supported by GBS.
For command usage details, enter:
gbs devel help
The following code shows an example workflow:
# maintainer: create upstream branch and packaging branch (initial packaging) ... # maintainer: push packaging and upstream branches (and tags) to Git/Gerrit $ git push --tags origin upstream master # maintainer: start development branch $ gbs devel start # maintainer: push development branch to Git/Gerrit $ git push origin development/master/1.0 # developer: clone package $ gbs clone git://review.tizen.org/example.git # developer: modify code, test, commit on development branch $ ... $ gbs build # developer: push changes for review $ git push origin development/master/1.0:refs/for/development/master/1.0 # maintainer: after review, merge changes in Gerrit # maintainer: generate patches, update packaging/release branch $ gbs devel export $ git add . $ git commit -m"New change" # maintainer: push packaging branch for review $ git push master:refs/for/master # maintainer: once merged, submit for integration $ gbs submit
gbs devel [-h] [--packaging-dir PACKAGING_DIR] [--spec SPEC] [--upstream-tag UPSTREAM_TAG] [--retain-history] [gitdir] <Second_Level_Subcommand>
The following example shows the second level subcommands for different actions:
gbs devel start gbs devel export gbs devel switch gbs devel drop gbs devel convert
--retain-history parameter preserves the history of the local changes. In the convert action, for each commit in the old (joint-packaging) branch, this option creates a corresponding commit in the new orphan packaging branch.
To use each action:
gbs devel start
Creates a development branch by:
- Using the upstream version as basis to create a local copy.
- Applying all patches from the packaging branch on top of the local branch.
- Importing the
.gbs.conffile from the packaging branch.
The upstream version is embedded in the development branch name. Thus, when doing a version bump, you must create a new development branch with this command.
Before using the command, make sure that an orphan-packaging branch (containing all local changes as patches) and the other packaging files are available and ready for use.
$ git branch * tizen upstream $ gbs devel start info: Using 'packaging/dbus.spec' from 'working copy' info: Switching to branch 'development/tizen/1.0' info: Importing additional file(s) from branch 'tizen' into 'development/tizen/1.0' info: Trying to apply patches from branch 'tizen' onto '159fdbf680d2dcdd5f80568c3305e93114caddfa' info: Patches listed in 'dbus.spec' imported on 'development/tizen/1.0' info: Updating local .gbs.conf info: Committing local .gbs.conf to git $ git branch * development/tizen/1.0 tizen upstream
Each upstream version must have a dedicated development branch. In the above example, “development/tizen/1.0” corresponds to the upstream version 1.0.
gbs devel export
Exports patches to the packaging branch by:
- Generating patches (one-per-commit) from the development branch.
- Updating the spec file accordingly.
This command does not automatically commit the changes. The package maintainers must verify the changes and commit them manually.
$ git branch * development/tizen/1.1 upstream tizen $ gbs devel export info: Exporting patches to packaging branch info: On branch 'development/tizen/1.1', switching to 'tizen' info: Generating patches from git (6450890aa002b0868537ee50cc1aea177fdcc941..development/tizen/1.1) no changes added to commit (use "git add" and/or "git commit -a")
gbs devel switch
Switches between the packaging branch and the corresponding development branch.
$ git branch development/tizen/1.1 * tizen upstream $ gbs devel switch info: Switching to branch 'development/tizen/1.1' $ git branch * development/tizen/1.1 tizen upstream $ gbs devel switch info: Switching to branch 'tizen' $ git branch development/tizen/1.1 * tizen upstream
gbs devel drop
Removes the development branch to which the upstream version points.
You must be on the packaging branch to delete the development branch. Note that the command only removes the development branch that the current (upstream) version points to. For example, assuming the current version is 2.0, if available branches include “development/tizen/1.0” and “development/tizen/2.0”, only the latter is removed.
Converts a package from the joint-packaging maintenance model and Git-layout to the orphan-packaging model by:
- Using the content of the packaging directory as a basis.
- Automatically generating patches and putting these into a new orphan packaging branch.
This command basically contains the output of the GBS export minus the source code tarball.
$ git branch * tizen upstream $ gbs devel convert info: Converting package to orphan-packaging git layout info: Importing packaging files from branch 'tizen' to 'tizen-orphan' info: Generating patches from git (04e9d5867181807acae3b89f8ebc1f517c246933..d2ab912babf1ee161004b041ca2bd70f3ff7de0c) info: Package successfully converted to orphan-packaging. info: You're now on the new 'tizen-orphan' packaging branch (the old packaging branch 'tizen' was left intact). info: Please check all files and test building the package! info: You can now create the development branch with 'gbs devel start' $ git branch tizen * tizen-orphan upstream
The convert action only creates the orphan packaging branch. This means that you need to create the development branch separately with the
gbs devel startcommand.
Using gbs devel with gbs build
The following example shows a recommended procedure that shows how the
gbs devel and
gbs build subcommands work together. The “acl” package is used as an example.
Show the branch in the joint-packaging model:
Start to switch to the orphan-packaging model by creating the orphan-packaging branch:
~/projects/acl[common*]$ gbs devel convert --retain-history info: Converting package to orphan-packaging git layout info: Importing packaging files from branch 'common' to 'common-orphan' ... info: You're now on the new 'common-orphan' packaging branch (the old packaging branch 'common' was left intact). info: Please check all files and test building the package! info: You can now create the development branch with 'gbs devel start' ~/projects/acl[common-orphan*]$
Show the branches to check the newly created “common-orphan” packaging branch in the orphan-packaging model:
~/projects/acl[branch common * -orphan-orphan*]$ git
Continue to create and check the development branch in the orphan-packaging model:
~/projects/acl[common-orphan*]$ gbs devel start info: Switching to branch 'development/common-orphan/2.2.51' ... ~/projects/acl[development/common-orphan/2.2.51*]$ git br common common-orphan * development/common-orphan/2.2.51
Perform local development and then export patches to the packaging branch:
~/projects/acl[development/common-orphan/2.2.51*]$ gbs devel export info: Exporting patches to packaging branch info: On branch 'development/common-orphan/2.2.51', switching to 'common-orphan' ... no changes added to commit (use "git add" and/or "git commit -a") ~/projects/acl[common-orphan*]$
Commit all changes on the packaging branch:
~/projects/acl[add -A && git commit -s-orphan*]$ git
Perform building on the packaging branch:
~/projects/acl[build -A <Arch>-orphan*]$ gbs
Switch to the development branch by using the
gbs devel switchcommand:
~/projects/acl[common-orphan*]$ gbs devel switch ~/projects/acl[development/common-orphan/2.2.51]$
Perform building on the development branch:
~2.2.51]$ gbs build -A <Arch>acl[development
Make changes to the source code and build with uncommitted changes included:
~/projects/acl[development/2.2.51]$ gbs build -A <Arch> -- -all-orphan/