diff --git a/gitsync/cli.py b/gitsync/cli.py index 6c0a034..e105b1b 100644 --- a/gitsync/cli.py +++ b/gitsync/cli.py @@ -6,6 +6,7 @@ from termcolor import cprint from gitsync.providers.github_provider import GithubProvider +from gitsync.providers.gitlab_provider import GitlabProvider from gitsync.providers.tuleap_provider import TuleapProvider from gitsync.providers.file_provider import FileProvider @@ -21,7 +22,7 @@ def parse_args(): '--provider', dest='repository_provider', default="file", - help='git-sync provider: github, tuleap, file (default)' + help='git-sync provider: gitlab, github, tuleap, file (default)' ) parser.add_argument( @@ -43,6 +44,18 @@ def parse_args(): help='Tuleap hostname' ) + parser.add_argument( + '--gitlab.url', + dest='gitlab_url', + help='Gitlab url' + ) + + parser.add_argument( + '--gitlab.token', + dest='gitlab_token', + help='Gitlab token' + ) + parser.add_argument( '--tuleap.username', dest='tuleap_username', @@ -63,12 +76,17 @@ def main(): args = parse_args() repository_provider = FileProvider() + if args.repository_provider == 'gitlab': + gitlab_url = 'https://gitlab.com' + if args.gitlab_url: + gitlab_url = args.gitlab_url + + repository_provider = GitlabProvider(gitlab_url, args.gitlab_token, args.workspace) + if args.repository_provider == 'github': if args.github_username: password = getpass.getpass('Your Github password:') repository_provider = GithubProvider(args.github_username, password, args.workspace) - else: - raise ValueError("Unkown github username") if args.repository_provider == 'tuleap': if not args.tuleap_username: diff --git a/gitsync/providers/gitlab_provider.py b/gitsync/providers/gitlab_provider.py new file mode 100644 index 0000000..64c8190 --- /dev/null +++ b/gitsync/providers/gitlab_provider.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +import gitlab + +from gitsync.model.project import Project +from gitsync.provider import Provider + + +class GitlabProvider(Provider): + + def __init__(self, url, token, working_directory): + super(Provider, self).__init__() + self.gitlab = gitlab.Gitlab(url=url, private_token=token) + self.working_directory = working_directory + + def projects(self): + projects = [] + for project in self.gitlab.projects.list(owned=True): + projects.append(Project( + {"name": "%s" % project.attributes['path'], + "url": project.attributes['http_url_to_repo'], + "path": "%s/%s" % (self.working_directory, project.attributes['path'])})) + + return projects + + def need_to_write_gitsync_file(self): + return True diff --git a/requirements.txt b/requirements.txt index 0c6a3bc..b8c0af8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,4 +4,5 @@ GitPython>=1.0.2 termcolor>=1.1.0 PyYAML>=3.10 pygithub>=1.26.0 -requests>=2.5.3 \ No newline at end of file +requests>=2.5.3 +python-gitlab>=1.7.0 \ No newline at end of file