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 ...@@ -31,12 +31,16 @@ from subprocess import check_call
GIT_DEFAULT_REMOTE_NAME = 'origin' GIT_DEFAULT_REMOTE_NAME = 'origin'
GIT_DEFAULT_BRANCH_NAME = 'master' GIT_DEFAULT_BRANCH_NAME = 'master'
TRUE_VALUES = ['y', 'yes', '1', 'true']
class Recipe(object): class Recipe(object):
"""Clone a git repository."""
def __init__(self, buildout, name, options): def __init__(self, buildout, name, options):
options.setdefault('branch', GIT_DEFAULT_BRANCH_NAME) options.setdefault('branch', GIT_DEFAULT_BRANCH_NAME)
options.setdefault('revision', '') options.setdefault('revision', '')
options.setdefault('branch', '')
options.setdefault('develop', 'false')
options.setdefault('git-command', 'git') options.setdefault('git-command', 'git')
options.setdefault('location', options.setdefault('location',
os.path.join( os.path.join(
...@@ -46,31 +50,47 @@ class Recipe(object): ...@@ -46,31 +50,47 @@ class Recipe(object):
) )
self.options = options 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): def install(self):
""" Do a git clone. If revision is specified, reset to it."""
if not os.path.exists(self.options['location']): 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['url'],
self.options['location']]) self.options['location']]
if self.options['branch']:
self.update() 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): def update(self):
check_call([self.options['git-command'], 'fetch', '--all'], check_call([self.options['git-command'], 'fetch', '--all'],
cwd=self.options['location']) 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']: if self.options['revision']:
check_call([self.options['git-command'], self.gitReset(self.options['revision'])
'reset', '--hard', self.options['revision']], elif self.options['branch']:
cwd=self.options['location']) self.gitReset('%s/%s' % (
GIT_DEFAULT_REMOTE_NAME, self.options['branch']))
else: else:
check_call([self.options['git-command'], self.gitReset('%s/%s' % (
'pull', GIT_DEFAULT_REMOTE_NAME, GIT_DEFAULT_REMOTE_NAME, GIT_DEFAULT_BRANCH_NAME))
self.options['branch']],
cwd=self.options['location']
)
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