Commits (1)
  • Benjamin Blanc's avatar
    gitclone: Add new way to get revision information from [<name>-override] section. · b137a214
    Benjamin Blanc authored
    Buildout remove parts when the configuration of the section has changed, by doing
    its own uninstall (which remove parts), then it does a new install (instead of
    doing an update, for example).
    So, specifying a new revision makes buildout knowing a new section configuration,
    and then removing the parts when we just wanted to update the code.
    (This problem doesn't appear when a branch name is specified because section
    configuration is not modified.)
    So, this patch permits to the gitclone recipe to find the revision parameter
    in an other section nammed [<name>-ovverride] where <name> is the name of the section calling the gitclone.
    This, in order to do not remove parts each time revision has changed,
    it acelerates considerably the execution time and bandwidth consumption
    of the git operation.
......@@ -120,14 +120,53 @@ def download_network_cached(path, name, revision, networkcache_options):
class Recipe(object):
"""Clone a git repository."""
"""Clone a git repository.
Address of the remote repository.
Path to the git executable to use.
revision (optional)
Revision to use.
branch (optional)
Branch to use.
location (optional)
- In order to prevent buildout uninstalling, and re-installing parts
at each time revision input changes, you can use an additional
section to specifiy a revision. By inserting a new section in
your buildout configuration:
revision = <xxx>
Where <name> is the name the current section, and <xxx>
the revision to use.
- You cannot use the revision input and the additional
section descripted above at the same time.
- You can't specify a branch and a revision at the same time.
def __init__(self, buildout, name, options):
os.path.join(buildout['buildout']['parts-directory'], name))
self.repository = options.get('repository')
self.branch = options.get('branch', GIT_DEFAULT_BRANCH_NAME)
# Get revision
self.revision = options.get('revision')
# Try to get revision in [<name>-override] section.
if buildout.get('%s-override' %name):
if buildout.get('%s-override' %name).get('revision'):
self.revision = buildout.get('%s-override' %name).get('revision')
self.git_command = options.get('git-executable', 'git')
self.name = name
self.location = options.get('location')