Skip to main content

A library to aggregate git branches from different remotes into a consolidated one

Project description

License: AGPL-3 https://travis-ci.org/acsone/git-aggregator.svg?branch=master https://coveralls.io/repos/acsone/git-aggregator/badge.png?branch=master Python support: 2.7, 3.5, 3.6, 3.7

git-aggregator

Manage the aggregation of git branches from different remotes to build a consolidated one.

Configuration file

Create a repos.yaml or repos.yml file:

./product_attribute:
    remotes:
        oca: https://github.com/OCA/product-attribute.git
        acsone: git+ssh://git@github.com/acsone/product-attribute.git
    merges:
        - oca 8.0
        - oca refs/pull/105/head
        - oca refs/pull/106/head
    target: acsone aggregated_branch_name

./connector-interfaces:
    remotes:
        oca:  https://github.com/OCA/connector-interfaces.git
        acsone:  https://github.com/acsone/connector-interfaces.git
    merges:
        - oca 6054de2c4e669f85cec380da90d746061967dc83
        - acsone 8.0-connector_flow
        - acsone 80_connector_flow_ir_cron_able-lmi
        - acsone 8.0_connector_flow_improve_eval_config
    target: acsone aggregated_branch_name
    fetch_all:
        - oca

Environment variables inside of this file will be expanded if the proper option is selected.

Fetching only required branches

If any of your merges refer to a specific commit, you will probably need to fetch all remotes from the corresponding remote or use any other strategy to get that fetch working, but we recommend to simply add this like in the example above:

fetch_all:
    - oca
    - other-remote

You can specify that you want to fetch all references from all remotes you have defined with:

fetch_all: true

Shallow repositories

To save big amounts of bandwidth and disk space, you can use shallow clones. These download only a restricted amount of commits depending on some criteria. Available options are depth, shallow-since and shallow-exclude.

You can use those in the defaults sections to apply them everywhere, or specifying them in the corresponding merges section, for which you must use the dict alternate construction. If you need to disable a default in merges, set it to false:

./odoo:
    defaults:
        depth: 20
    remotes:
        odoo: https://github.com/odoo/odoo.git
        ocb: https://github.com/OCA/OCB.git
        acsone: https://github.com/acsone/odoo.git
    merges:
        -
            remote: ocb
            ref: "9.0"
            depth: 1000
        -
            remote: odoo
            ref: refs/pull/14859/head
    target: acsone 9.0

Remember that you need to fetch at least the common ancestor of all merges for it to succeed.

Triggers

It’s also possible to specify a command or a list of shell commands to execute after the aggregation (and before the push). The commands are executed into the aggregated directory.

./product_attribute:
    remotes:
    oca: https://github.com/OCA/product-attribute.git
    acsone: git+ssh://git@github.com/acsone/product-attribute.git
    merges:
        - oca 8.0
    target: acsone aggregated_branch_name
    shell_command_after: echo 'my command'

./connector-interfaces:
    remotes:
    oca:  https://github.com/OCA/connector-interfaces.git
    acsone:  https://github.com/acsone/connector-interfaces.git
    merges:
        - oca 9.0
    target: acsone aggregated_branch_name
    shell_command_after:
        - echo 'a first command'
        - echo 'a second command'

A real life example: applying a patch

./odoo:
    remotes:
    oca: https://github.com/OCA/OCB.git
    acsone: git@github.com/acsone/OCB.git
    merges:
        - oca 9.0
    target: acsone aggregated_branch_name
    shell_command_after:
        - git am "$(git format-patch -1 XXXXXX -o ../patches)"

Command line Usage

Following the example repos.yaml file from above, aggregate your repositories at any time:

$ gitaggregate -c repos.yaml

Expand environment variables inside of the configuration file when loading:

$ gitaggregate -c repos.yaml --expand-env

You can also aggregate and automatically push the result to the target:

$ gitaggregate -c repos.yaml -p

Only aggregate a specific repository using fnmatch:

$ gitaggregate -c repos.yaml -p -d connector-interfaces

Show github pull requests

gitaggregate has a mechanism to identify merges that correpond to merged or closed Github pull requests.

Such merges are of the form refs/pull/NNN/head where NNN is the pull request number, with a https://github.com or git@github.com remote.

To work around API limitation, you must first generate a Github API token.

$ export GITHUB_TOKEN=...
$ gitaggregate -c repos.yaml show-all-prs
$ gitaggregate -c repos.yaml show-closed-prs

Changes

1.7.1 (September 30, 2019)

  • If an error happens, log in which repo it happens. Helpful when running in parallel.

1.7.0 (August 14, 2019)

  • Fix a bug in --show-all-prs, which was printing a wrong PR URL.

  • Display PR labels too in --show-all-prs.

1.6.0 (March 04, 2019)

  • Add –show-all-prs command to list all GitHub pull requests used in merge sections.

1.5.0 (December 07, 2018)

  • Add –force. If set, dirty repositories will fail to aggregate.

1.4.0 (September 13, 2018)

  • Add –jobs option for multi-process operation.

1.3.0 (August 21, 2018)

  • Improve configuration file parsing by mimicing Kaptan’s behavior of resolving handler by extension (#22)

1.2.1 (July, 12, 2018)

  • show-closed-prs now displays merge status

  • some documentation improvements

1.2.0 (May, 17, 2017)

  • support .yml config file extension

  • add a show-closed-prs command to display github pull requests that are not open anymore; github pull requests must be referenced as refs/pull/NNN/head in the merges section

1.1.0 (Feb, 01, 2017)

1.0.0 (Jan, 19, 2016)

  • First release

Credits

Author

Contributors

Maintainer

ACSONE SA/NV

This project is maintained by ACSONE SA/NV.

Project details


Download files

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

Source Distribution

git-aggregator-1.7.1.tar.gz (34.1 kB view details)

Uploaded Source

Built Distribution

git_aggregator-1.7.1-py2.py3-none-any.whl (28.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file git-aggregator-1.7.1.tar.gz.

File metadata

  • Download URL: git-aggregator-1.7.1.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/2.7.15

File hashes

Hashes for git-aggregator-1.7.1.tar.gz
Algorithm Hash digest
SHA256 3bf0aed7a4ddf1527dcc1c41531de34fb004457c35c7c80747b718983eede078
MD5 8148e7790518bcfd8cfeb72714cbed77
BLAKE2b-256 8f515bb134bd4970688e4f4804497099c27d557cf4e74c119d8c9e355d2435e6

See more details on using hashes here.

File details

Details for the file git_aggregator-1.7.1-py2.py3-none-any.whl.

File metadata

  • Download URL: git_aggregator-1.7.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 28.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/2.7.15

File hashes

Hashes for git_aggregator-1.7.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f9a1cfc56e5d83bf18c26a262fb788f8a862d629301cf89c2079ba02fde589bf
MD5 e94b17b6f486a1cac3cecc8b9605483f
BLAKE2b-256 4e05fc684129f124b379d62d6836ce686fbc7ed0d7eb6f3fd46d5968c59c2cbe

See more details on using hashes here.

Supported by

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