diff --git a/git_repo/repo.py b/git_repo/repo.py index 006dcdf..d612ebb 100644 --- a/git_repo/repo.py +++ b/git_repo/repo.py @@ -32,6 +32,7 @@ {self} [--path=] [-v...] (gist|snippet) delete [-f] {self} [--path=] [-v...] config [--config=] {self} [-v...] config [--config=] + {self} --version {self} --help Tool for managing remote repository services. @@ -52,6 +53,7 @@ / Repository to work with -p,--path= Path to work on [default: .] -v,--verbose Makes it more chatty (repeat twice to see git commands) + --version Show the version -h,--help Shows this message Options for list: @@ -142,7 +144,7 @@ from .tools import print_tty, print_iter, loop_input, confirm from .kwargparse import KeywordArgumentParser, store_parameter, register_action -from git import Repo, Git +from git import Repo, Git, __version__ as GitPythonVersion from git.exc import InvalidGitRepositoryError, NoSuchPathError, BadName class GitRepoRunner(KeywordArgumentParser): @@ -586,9 +588,39 @@ def main(args): return 2 +class Version: + def __str__(self): + import importlib + s = ['Version: {}'.format(__version__), + ' GitPython: {}'.format(GitPythonVersion), + ' Services:' + ] + services = RepositoryService.service_map.values() + + for service in sorted(services, key=lambda s: s.name): + version = 'unknown' + try: + mod = importlib.import_module(service.__module__) + package = mod.SERVICE_PACKAGE + client = package.__name__ + except: + client = 'unknown' + else: + try: + version = package.__version__ + except AttributeError: + pass + + s.append(' {}:'.format(service.name)) + s.append(' {}: {}'.format(client, version)) + + return '\n'.join(s) + + def cli(): # pragma: no cover try: - sys.exit(main(docopt(__doc__.format(self=sys.argv[0].split(os.path.sep)[-1], version=__version__)))) + sys.exit(main(docopt(__doc__.format(self=sys.argv[0].split(os.path.sep)[-1], version=__version__), + version=Version()))) finally: # Whatever happens, make sure that the cursor reappears with some ANSI voodoo if sys.stdout.isatty(): diff --git a/git_repo/services/ext/bitbucket.py b/git_repo/services/ext/bitbucket.py index 651128e..3912bc2 100644 --- a/git_repo/services/ext/bitbucket.py +++ b/git_repo/services/ext/bitbucket.py @@ -7,6 +7,7 @@ from ...exceptions import ResourceError, ResourceExistsError, ResourceNotFoundError from ...tools import columnize +import pybitbucket from pybitbucket.bitbucket import Client, Bitbucket from pybitbucket.auth import BasicAuthenticator from pybitbucket.pullrequest import PullRequest, PullRequestPayload @@ -26,6 +27,9 @@ import os, json, platform +SERVICE_PACKAGE = pybitbucket + + @register_target('bb', 'bitbucket') class BitbucketService(RepositoryService): fqdn = 'bitbucket.org' diff --git a/git_repo/services/ext/gitbucket.py b/git_repo/services/ext/gitbucket.py index f12c319..4a38266 100644 --- a/git_repo/services/ext/gitbucket.py +++ b/git_repo/services/ext/gitbucket.py @@ -9,6 +9,10 @@ import github3 + +SERVICE_PACKAGE = github3 + + @register_target('bucket', 'gitbucket') class GitbucketService(GithubService): fqdn = "localhost" diff --git a/git_repo/services/ext/github.py b/git_repo/services/ext/github.py index 6e7a0ba..034c41d 100644 --- a/git_repo/services/ext/github.py +++ b/git_repo/services/ext/github.py @@ -13,6 +13,10 @@ from datetime import datetime + +SERVICE_PACKAGE = github3 + + GITHUB_COM_FQDN = 'github.com' @register_target('hub', 'github') diff --git a/git_repo/services/ext/gitlab.py b/git_repo/services/ext/gitlab.py index 0fdeb6b..230f6c0 100644 --- a/git_repo/services/ext/gitlab.py +++ b/git_repo/services/ext/gitlab.py @@ -17,6 +17,10 @@ import dateutil.parser from datetime import datetime + +SERVICE_PACKAGE = gitlab + + @register_target('lab', 'gitlab') class GitlabService(RepositoryService): fqdn = 'gitlab.com' @@ -41,6 +45,10 @@ def connect(self): self.gl.auth() self.username = self.gl.user.username + def server_version(self): + self.connect() + return self.gl.version() + def create(self, user, repo, add=False): try: group = self.gl.groups.search(user) diff --git a/git_repo/services/ext/gogs.py b/git_repo/services/ext/gogs.py index dcee00b..7faa54e 100644 --- a/git_repo/services/ext/gogs.py +++ b/git_repo/services/ext/gogs.py @@ -7,6 +7,8 @@ from ...exceptions import ResourceError, ResourceExistsError, ResourceNotFoundError from ...tools import columnize +import gogs_client + from gogs_client import GogsApi, GogsRepo, Token, UsernamePassword, ApiFailure from requests import Session, HTTPError from urllib.parse import urlparse, urlunparse @@ -17,6 +19,10 @@ from git import config as git_config from git.exc import GitCommandError + +SERVICE_PACKAGE = gogs_client + + class GogsClient(GogsApi): def __init__(self): self.session = Session()