Script for synchronizing charm-helpers into a charm branch. This script is intended to be used by charm authors during the development of their charm. It allows authors to pull in bits of a charm-helpers source tree and embed directly into their charm, to be deployed with the rest of their hooks and charm payload. This script is not intended to be called by the hooks themselves, but instead by the charm author while they are hacking on a charm offline. Consider it a method of compiling specific revision of a charm-helpers branch into a given charm source tree. Some goals and benefits to using a sync tool to manage this process: - Reduces the burden of manually copying in upstream charm helpers code into a charm and helps ensure we can easily keep a specific charm's helper code up to date. - Allows authors to hack on their own working branch of charm-helpers, easily sync into their WIP charm. Any changes they've made to charm helpers can be upstreamed via a merge of their charm-helpers branch into lp:charm-helpers, ideally at the same time they are upstreaming the charm itself into the charm store. Separating charm helper development from charm development can help reduce cases where charms are shipping locally modified helpers. - Avoids the need to ship the *entire* charm-helpers source tree with a charm. Authors can selectively pick and choose what subset of helpers to include to satisfy the goals of their charm. Allows specifying a list of dependencies to sync in from a charm-helpers branch. Ideally, each charm should describe its requirements in a yaml config included in the charm, eg `charm-helpers.yaml` (NOTE: Example module layout as of 12/18/2019): $ cd my-charm $ cat >charm-helpers.yaml </charm-helpers \ -d hooks/helpers core contrib.openstack contrib.hahelpers or use a specific branch using the @ notation $ charm-helpers-sync.py -r https://github.com//charm-helpers@branch_name \ -d hooks/helpers core contrib.openstack contrib.hahelpers Script will create missing `__init__.py`'s to ensure each subdirectory is importable, assuming the script is run from the charm's top-level directory.