summaryrefslogtreecommitdiffstats
path: root/gitautodeploy/wrappers/git.py
diff options
context:
space:
mode:
authorOliver Poignant <oliver@poignant.se>2016-03-06 21:05:20 +0100
committerOliver Poignant <oliver@poignant.se>2016-03-06 21:05:20 +0100
commit3f7a830cdadc82f10bad26b060f2701ed08b34a9 (patch)
treee62af59711f37b88e64b6155aaa57904c3f3e7c7 /gitautodeploy/wrappers/git.py
parentec1f2a28c902855aa470f8523eea33f8aed6a2b5 (diff)
downloadGit-Auto-Deploy-3f7a830cdadc82f10bad26b060f2701ed08b34a9.zip
Git-Auto-Deploy-3f7a830cdadc82f10bad26b060f2701ed08b34a9.tar.gz
Git-Auto-Deploy-3f7a830cdadc82f10bad26b060f2701ed08b34a9.tar.bz2
Moved files around into new project structure
Diffstat (limited to 'gitautodeploy/wrappers/git.py')
-rw-r--r--gitautodeploy/wrappers/git.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/gitautodeploy/wrappers/git.py b/gitautodeploy/wrappers/git.py
new file mode 100644
index 0000000..04ec94a
--- /dev/null
+++ b/gitautodeploy/wrappers/git.py
@@ -0,0 +1,62 @@
+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