summaryrefslogtreecommitdiffstats
path: root/gitautodeploy/wrappers/git.py
diff options
context:
space:
mode:
Diffstat (limited to 'gitautodeploy/wrappers/git.py')
-rw-r--r--gitautodeploy/wrappers/git.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/gitautodeploy/wrappers/git.py b/gitautodeploy/wrappers/git.py
new file mode 100644
index 0000000..98a7361
--- /dev/null
+++ b/gitautodeploy/wrappers/git.py
@@ -0,0 +1,57 @@
+class GitWrapper():
+ """Wraps the git client. Currently uses git through shell command
+ invocations."""
+
+ def __init__(self):
+ pass
+
+ @staticmethod
+ def pull(repo_config):
+ """Pulls the latest version of the repo from the git server"""
+ import logging
+ from process import ProcessWrapper
+
+ logger = logging.getLogger()
+ logger.info("Post push request received")
+
+ # Only pull if there is actually a local copy of the repository
+ if 'path' not in repo_config:
+ logger.info('No local repository path configured, no pull will occure')
+ return 0
+
+ logger.info('Updating ' + repo_config['path'])
+
+ cmd = 'unset GIT_DIR ' + \
+ '&& git fetch ' + repo_config['remote'] + \
+ '&& git reset --hard ' + repo_config['remote'] + '/' + repo_config['branch'] + ' ' + \
+ '&& git submodule init ' + \
+ '&& git submodule update'
+
+ # '&& git update-index --refresh ' +\
+ res = ProcessWrapper().call([cmd], cwd=repo_config['path'], shell=True)
+ logger.info('Pull result: ' + str(res))
+
+ return int(res)
+
+ @staticmethod
+ def clone(url, branch, path):
+ from process import ProcessWrapper
+ ProcessWrapper().call(['git clone --recursive ' + url + ' -b ' + branch + ' ' + path], shell=True)
+
+ @staticmethod
+ def deploy(repo_config):
+ """Executes any supplied post-pull deploy command"""
+ from process import ProcessWrapper
+ import logging
+ logger = logging.getLogger()
+
+ if 'path' in repo_config:
+ path = repo_config['path']
+
+ logger.info('Executing deploy command(s)')
+
+ # Use repository path as default cwd when executing deploy commands
+ cwd = (repo_config['path'] if 'path' in repo_config else None)
+
+ for cmd in repo_config['deploy_commands']:
+ ProcessWrapper().call([cmd], cwd=cwd, shell=True) \ No newline at end of file