Source code for pyquickhelper.loghelper.pyrepo_helper
# -*- coding: utf-8 -*-
"""
a repository class independent from the repository system (it will be guessed)
:githublink:`%|py|6`
"""
from .repositories import pysvn_helper as SVN
from .repositories import pygit_helper as GIT
[docs]class SourceRepository:
"""
Proposes the same functionality independent from the
source chosen repository (GIT or SVN).
On Windows, it might help to install either
:epkg:`TortoiseSVN` or the :epkg:`GitHub` application.
:githublink:`%|py|18`
"""
[docs] def __init__(self, commandline=True):
"""
:param commandline: use command line or a specific module (like pysvn for example)
:githublink:`%|py|23`
"""
self.commandline = commandline
self.module = None
[docs] def SetGuessedType(self, location):
"""
Guesses the repository type given a location
and changes a member of the class.
:param location: location
:return: module to use
:githublink:`%|py|34`
"""
git = GIT.IsRepo(location, commandline=self.commandline)
if not git: # pragma: no cover
svn = SVN.IsRepo(location, commandline=self.commandline)
if not svn:
try:
GIT.get_repo_version(
location, commandline=self.commandline, log=False)
self.module = GIT
except Exception as e:
raise Exception(
"Unable to guess source repository type for location '{0}'. Error: '{1}'.".format(location, e))
else:
self.module = SVN
else:
self.module = GIT
return self.module
[docs] def ls(self, path):
"""
Extracts the content of a location.
:param path: path
:return: a list
:githublink:`%|py|58`
"""
if self.module is None:
self.SetGuessedType(path)
return self.module.repo_ls(path, commandline=self.commandline)
[docs] def log(self, path=None, file_detail=False):
"""
Gets the latest changes operated on a file in a folder or a subfolder.
:param path: path to look
:param file_detail: if True, add impacted files
:return: list of changes, each change is a list of tuples:
(author, change number (int), date (datetime),
comment, full hash, link)
The function uses a command line if an error occurred.
It uses the xml format:
::
<logentry revision="161">
<author>xavier dupre</author>
<date>2013-03-23T15:02:50.311828Z</date>
<msg>pyquickhelper: first version</msg>
</logentry>
:githublink:`%|py|83`
"""
if self.module is None:
self.SetGuessedType(path)
return self.module.get_repo_log(
path, file_detail, commandline=self.commandline)
[docs] def version(self, path=None):
"""
Gets the latest check in number for a specific path.
:param path: path to look
:return: string or int (check in number)
:githublink:`%|py|95`
"""
if self.module is None:
self.SetGuessedType(path)
return self.module.get_repo_version(path, commandline=self.commandline)
[docs] def nb_commits(self, path=None):
"""
Returns the number of commits.
:param path: path to look
:return: number of commit
:githublink:`%|py|106`
"""
if self.module is None:
self.SetGuessedType(path)
return self.module.get_nb_commits(path, commandline=self.commandline)
[docs] def get_last_commit_hash(self, path=None):
"""
Returns the last commit.
:param path: path
:return: last commit
:githublink:`%|py|117`
"""
return self.log(path)[0][-2]