123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals
- from django.conf import settings
- from api.utils.command import execute, list_files_and_folders
- from git.repo.base import Repo
- from git.db import GitDB
- from git.repo.fun import is_git_dir
- from git.util import join_path
- from git.exc import GitCommandError
- import os
- '''
- '''
- def get_users_folders():
- fullpath = join_path(settings.GIT_PATH)
- folders = list_files_and_folders(fullpath)
- return folders.get('items', [])
- '''
- '''
- def get_repos_paths():
- cmd_out = execute(['find', settings.GIT_PATH, '-maxdepth', '2', '-type', 'd', '-name', '*.git'])
- paths = cmd_out.split('\n')
- return filter(lambda x: len(x) != 0, paths)
- '''
- '''
- def resolve_owner_by_name(name=None):
- if not name:
- return None
-
- paths = [r for r in get_odoo_modules_repos_paths() if r.endswith('/%s.git' % name)]
- if len(paths) == 0:
- return None
- return paths[0].replace('%s/' % settings.GIT_PATH, '').replace('/%s.git' % name, '')
- '''
- '''
- def clone_repo(name=None, to=None, branch='master'):
- return clone_repos([name], to, branch)
- '''
- '''
- def clone_repos(repo_names=[], to=None, branch='master'):
- if len(repo_names) == 0:
- return False
- for user_folder in get_users_folders():
- for repo_name in repo_names:
- repo_path = '%s.git' % join_path(settings.GIT_PATH, user_folder, repo_name)
- if not os.path.exists(repo_path):
- continue
-
- try:
- repo = Repo(repo_path)
- repo.clone(join_path(to, repo_name), branch=branch)
- repo.close()
- except GitCommandError:
- pass
- return True
- '''
- '''
- def pull_repo(name=None, to=None):
- if not name or not to:
- return False
- '''
- '''
- def get_odoo_modules_repos_paths():
- repos_paths = get_repos_paths()
- modules_paths = []
- for repo_path in repos_paths:
- r = Repo(repo_path, odbt=GitDB)
- try:
- if '__openerp__.py' in [o.path for o in r.tree()]:
- modules_paths.append(repo_path)
- except ValueError:
- continue
- finally:
- r.close()
- return modules_paths
- '''
- '''
- def get_odoo_modules_repos_names(include_owners=False):
- repos_paths = get_odoo_modules_repos_paths()
- repos_names = []
- for repos_path in repos_paths:
- 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
- repos_names.append({
- 'name': repo_with_user[1],
- 'owner': repo_with_user[0]
- })
- return repos_names
|