Commit 9f7e9661 authored by Cédric de Saint Martin's avatar Cédric de Saint Martin

Refactor gitclone recipe to support branches and develop.

parent e09557b4
......@@ -31,12 +31,16 @@ from subprocess import check_call
GIT_DEFAULT_REMOTE_NAME = 'origin'
GIT_DEFAULT_BRANCH_NAME = 'master'
TRUE_VALUES = ['y', 'yes', '1', 'true']
class Recipe(object):
"""Clone a git repository."""
def __init__(self, buildout, name, options):
options.setdefault('branch', GIT_DEFAULT_BRANCH_NAME)
options.setdefault('revision', '')
options.setdefault('branch', '')
options.setdefault('develop', 'false')
options.setdefault('git-command', 'git')
options.setdefault('location',
os.path.join(
......@@ -46,31 +50,47 @@ class Recipe(object):
)
self.options = options
if options['revision'] and options['branch']:
# revision and branch options are incompatible
raise ValueError('revision and branch parameters are set but are'
'incompatible. Please specify only one of them.')
def gitReset(self, revision=None):
"""Operates git reset on the repository."""
command = [self.options['git-command'], 'reset', '--hard']
if revision:
command.append(revision)
check_call(command, cwd=self.options['location'])
def install(self):
""" Do a git clone. If revision is specified, reset to it."""
if not os.path.exists(self.options['location']):
check_call([self.options['git-command'], 'clone',
git_clone_command = [self.options['git-command'], 'clone',
self.options['url'],
self.options['location']])
self.update()
self.options['location']]
if self.options['branch']:
git_clone_command.extend(['--branch', self.options['branch']])
check_call(git_clone_command)
return []
if self.options['revision']:
self.gitReset(self.options['revision'])
return [self.options['location']]
def update(self):
check_call([self.options['git-command'], 'fetch', '--all'],
cwd=self.options['location'])
# If develop parameter is set, don't reset/update.
# Otherwise, reset --hard
if not self.options.get('develop') in TRUE_VALUES:
if self.options['revision']:
check_call([self.options['git-command'],
'reset', '--hard', self.options['revision']],
cwd=self.options['location'])
self.gitReset(self.options['revision'])
elif self.options['branch']:
self.gitReset('%s/%s' % (
GIT_DEFAULT_REMOTE_NAME, self.options['branch']))
else:
check_call([self.options['git-command'],
'pull', GIT_DEFAULT_REMOTE_NAME,
self.options['branch']],
cwd=self.options['location']
)
self.gitReset('%s/%s' % (
GIT_DEFAULT_REMOTE_NAME, GIT_DEFAULT_BRANCH_NAME))
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment