You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/10/11 11:09:29 UTC
[04/50] [abbrv] git commit: Git repository initialization and
validation in Artifact management
Git repository initialization and validation in Artifact management
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/93ad2aaa
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/93ad2aaa
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/93ad2aaa
Branch: refs/heads/master
Commit: 93ad2aaa3ae4d6d6bf85418e55d914b69de87048
Parents: e5da07e
Author: Chamila de Alwis <ch...@wso2.com>
Authored: Thu Sep 25 03:23:08 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sat Oct 11 14:38:28 2014 +0530
----------------------------------------------------------------------
.../modules/artifactmgt/git/__init__.py | 1 -
.../modules/artifactmgt/git/agentgithandler.py | 81 +++++++++++++++++---
.../modules/artifactmgt/git/gitrepository.py | 2 +-
.../extensions/defaultextensionhandler.py | 2 +-
.../modules/publisher/__init__.py | 1 -
5 files changed, 73 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/93ad2aaa/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/__init__.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/__init__.py b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/__init__.py
index 372e725..e69de29 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/__init__.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/__init__.py
@@ -1 +0,0 @@
-__all__=['agentgithandler', 'gitrepository']
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/93ad2aaa/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/agentgithandler.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/agentgithandler.py b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/agentgithandler.py
index fff1ae8..f9de8b4 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/agentgithandler.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/agentgithandler.py
@@ -2,7 +2,7 @@ import logging
from git import *
-from gitrepository import GitRepositoryContext
+from gitrepository import GitRepository
from ... config.cartridgeagentconfiguration import CartridgeAgentConfiguration
from ... util import cartridgeagentutils
@@ -25,17 +25,71 @@ class AgentGitHandler:
repo_context = AgentGitHandler.get_repo_context(repo_info.tenant_id)
if repo_context is not None:
#has been previously cloned, this is not the subscription run
- cloned = True
+ subscribe_run = False
+ if AgentGitHandler.is_valid_git_repository(repo_context):
+ AgentGitHandler.log.debug("Existing git repository detected for tenant %r, no clone required" % repo_info.tenant_id)
+ AgentGitHandler.pull(repo_context)
+ else:
+ if not os.listdir(repo_context.local_repo_path):
+ #empty dir, clone
+ repo_context.repo = AgentGitHandler.clone(repo_info)
+ else:
+ #not empty
+ if AgentGitHandler.sync_initial_local_artifacts(repo_context):
+ AgentGitHandler.pull(repo_context)
+ else:
+ repo_context = None
+
#TODO: handle conflicts and errors using repo.git.pull(), status(), checkout() outputs
- AgentGitHandler.log.debug("Existing git repository detected for tenant %r, no clone required" % repo_info.tenant_id)
- AgentGitHandler.pull(repo_context)
+
else:
#subscribing run.. need to clone
- cloned = False
- repo_context = AgentGitHandler.create_git_repo_context(repo_info)
- AgentGitHandler.clone(repo_context)
+ subscribe_run = True
+ repo_context = AgentGitHandler.clone(repo_context)
+
+ return {"subscribe_run": subscribe_run, "repo_context": repo_context}
+
+ @staticmethod
+ def sync_initial_local_artifacts(repo_context):
+ #init git repo
+ AgentGitHandler.init(repo_context.local_repo_path)
+
+ # add remote repos
+ return AgentGitHandler.add_remote(repo_context)
+
+ @staticmethod
+ def add_remote(repo_context):
+ try:
+ repo_context.repo.create_remote("origin", repo_context.repo_url)
+ repo_context.repo.git.fetch()
+ repo_context.repo.git.branch("-f", "--track", "master", "origin/master")
+ return True
+ except:
+ AgentGitHandler.log.exception("Error in adding remote origin %r for local repository %r" % (repo_context.repo_url, repo_context.local_repo_path))
+ return False
+
+ @staticmethod
+ def init(path):
+ try:
+ repo = Repo.init(path, mkdir=True)
+ repo.git.init()
+ except:
+ AgentGitHandler.log.exception("Initializing local repo at %r failed" % path)
+ raise Exception("Initializing local repo at %r failed" % path)
- return {"cloned": cloned, "repo_context": repo_context}
+ @staticmethod
+ def is_valid_git_repository(repo_context):
+ if repo_context.cloned:
+ return True
+
+ for ref in repo_context.repo.refs:
+ try:
+ ref._get_object()
+ except ValueError:
+ #corrupt sha in the reference
+ return False
+
+ return True
@staticmethod
def pull(repo_context):
@@ -47,10 +101,13 @@ class AgentGitHandler:
@staticmethod
- def clone(repo_context):
+ def clone(repo_info):
+ repo_context = None
try:
+ repo_context = AgentGitHandler.create_git_repo_context(repo_info)
repo = Repo.clone_from(repo_context.repo_url, repo_context.local_repo_path)
repo_context.cloned = True
+ repo_context.repo = repo
AgentGitHandler.add_repo_context(repo_context)
AgentGitHandler.log.info("Git clone operation for tenant %r successful" % repo_context.tenant_id)
except GitCommandError as ex:
@@ -60,6 +117,8 @@ class AgentGitHandler:
cartridgeagentutils.create_dir(repo_context.local_repo_path)
else:
AgentGitHandler.log.exception("Git clone operation for tenant %r failed" % repo_context.tenant_id)
+ finally:
+ return repo_context
@staticmethod
def add_repo_context(repo_context):
@@ -79,7 +138,7 @@ class AgentGitHandler:
@staticmethod
def create_git_repo_context(repo_info):
- repo_context = GitRepositoryContext()
+ repo_context = GitRepository()
repo_context.tenant_id = repo_info.tenant_id
repo_context.local_repo_path = AgentGitHandler.get_repo_path_for_tenant(
repo_info.tenant_id, repo_info.repo_path, repo_info.is_multitenant)
@@ -97,6 +156,8 @@ class AgentGitHandler:
repo_context.cloned = False
+ repo_context.repo = None
+
return repo_context
# @staticmethod
http://git-wip-us.apache.org/repos/asf/stratos/blob/93ad2aaa/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/gitrepository.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/gitrepository.py b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/gitrepository.py
index 12ce591..26950ae 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/gitrepository.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/artifactmgt/git/gitrepository.py
@@ -1,4 +1,4 @@
-class GitRepositoryContext:
+class GitRepository:
def __init__(self):
self.repo_url = None
http://git-wip-us.apache.org/repos/asf/stratos/blob/93ad2aaa/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py b/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
index 15e79bc..505b59c 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/extensions/defaultextensionhandler.py
@@ -74,7 +74,7 @@ class DefaultExtensionHandler:
extensionutils.execute_artifacts_updated_extension(env_params)
#if !cloneExists publish instanceActivatedEvent
- if not checkout_result["cloned"]:
+ if checkout_result["subscribe_run"]:
#publish instanceActivated
cartridgeagentpublisher.publish_instance_activated_event()
http://git-wip-us.apache.org/repos/asf/stratos/blob/93ad2aaa/tools/python-cartridge-agent/cartridge-agent/modules/publisher/__init__.py
----------------------------------------------------------------------
diff --git a/tools/python-cartridge-agent/cartridge-agent/modules/publisher/__init__.py b/tools/python-cartridge-agent/cartridge-agent/modules/publisher/__init__.py
index 923c1de..e69de29 100644
--- a/tools/python-cartridge-agent/cartridge-agent/modules/publisher/__init__.py
+++ b/tools/python-cartridge-agent/cartridge-agent/modules/publisher/__init__.py
@@ -1 +0,0 @@
-__all__=['cartridgeagentpublisher']
\ No newline at end of file