# -*- 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