瀏覽代碼

[ADD] git resourcing and cloning

Gogs 6 年之前
父節點
當前提交
0e9b3ecb1c
共有 5 個文件被更改,包括 64 次插入9 次删除
  1. 1 4
      api/resources/git_resource.py
  2. 51 4
      api/utils/git_api.py
  3. 9 0
      api/utils/odoo_api.py
  4. 1 0
      data/.env
  5. 2 1
      odoo_control/settings.py

+ 1 - 4
api/resources/git_resource.py

@@ -22,9 +22,6 @@ class GitResource(Resource):
     def get_repositories(self, request, **kwargs):
         self.method_check(request, allowed='get')
 
-        repos = get_odoo_modules_repos_names()
-        print(repos)
-
         return self.create_response(request, {
-            'test': 'get repositories'
+            'repositories': get_odoo_modules_repos_names()
         })

+ 51 - 4
api/utils/git_api.py

@@ -5,6 +5,7 @@ from api.utils.command import list_files_and_folders
 from git.repo.base import Repo
 from git.repo.fun import is_git_dir
 from git.util import join_path
+from git.exc import GitCommandError
 
 '''
 '''
@@ -34,6 +35,44 @@ def get_repos_paths():
 
     return repos
 
+'''
+'''
+def resolve_owner_by_name(name=None):
+    if not name:
+        return None
+    
+    path = [r for r in get_odoo_modules_repos_paths() if '%s.git' % name in r]
+
+    if len(path) == 0:
+        return None
+
+    return path[0].replace('%s/' % settings.GIT_PATH, '').replace('/%s.git' % name, '')
+
+
+'''
+'''
+def clone_repo(name=None, to=None, branch='master'):
+    if not name or not to:
+        return False
+    
+    owner = resolve_owner_by_name(name)
+    repo_path = '%s.git' % join_path(settings.GIT_PATH, owner, name)
+
+    try:
+        repo = Repo(repo_path)
+        repo.clone(join_path(to, name), branch=branch)
+        repo.close()
+
+        return True
+    except GitCommandError:
+        return False
+
+'''
+'''
+def pull_repo(name=None, to=None):
+    if not name or not to:
+        return False
+
 '''
 '''
 def get_odoo_modules_repos_paths():
@@ -60,10 +99,18 @@ def get_odoo_modules_repos_names(include_owners=False):
     repos_names = []
 
     for repos_path in repos_paths:
-        last_slash_index = repos_path.rindex('/')
-        last_dot_index = repos_path.rindex('.')
+        repo_with_user = repos_path.replace('%s/' % settings.GIT_PATH, '')
+        repo_with_user = repo_with_user.split('/')
+
+        repo_with_user[1] = repo_with_user[1].replace('.git', '')
+
+        if not include_owners:
+            repos_names.append(repo_with_user[1])
+            continue
 
-        name = repos_path[last_slash_index + 1:last_dot_index]
-        repos_names.append(name)
+        repos_names.append({
+            'name': repo_with_user[1],
+            'owner': repo_with_user[0]
+        })
 
     return repos_names

+ 9 - 0
api/utils/odoo_api.py

@@ -201,3 +201,12 @@ def get_odoo_internal_ip(name=None):
         return None
 
     return get_internal_ip(name)
+
+
+'''
+'''
+def install_module(system_name=None, module_name=None):
+    if not system_name or not module_name:
+        return False
+
+    

+ 1 - 0
data/.env

@@ -29,3 +29,4 @@ ODOO_DB_PORT = '5432'
 ODOO_DB_USER = 'postgres'
 ODOO_DB_PASSWORD = 'root'
 GIT_PATH = '/opt/gogs/git/gogs-repositories'
+GIT_HOST = 'https://repo.eiru.com.py'

+ 2 - 1
odoo_control/settings.py

@@ -110,4 +110,5 @@ ODOO_DB_HOST = CONFIG('ODOO_DB_HOST', 'localhost')
 ODOO_DB_PORT = CONFIG('ODOO_DB_PORT', default=5432, cast=int)
 ODOO_DB_USER = CONFIG('ODOO_DB_USER', 'postgres')
 ODOO_DB_PASSWORD = CONFIG('ODOO_DB_PASSWORD', 'root')
-GIT_PATH = CONFIG('GIT_PATH')
+GIT_PATH = CONFIG('GIT_PATH')
+GIT_HOST = CONFIG('GIT_HOST')