Skip to content
This repository has been archived by the owner on Jan 13, 2024. It is now read-only.

Commit

Permalink
Fixes #239, add directive gitlog
Browse files Browse the repository at this point in the history
  • Loading branch information
sdpython committed Mar 16, 2019
1 parent 8e93575 commit 2aaa457
Show file tree
Hide file tree
Showing 8 changed files with 355 additions and 7 deletions.
15 changes: 13 additions & 2 deletions _unittests/ut_loghelper/test_git_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@
from src.pyquickhelper.loghelper import fLOG, removedirs
from src.pyquickhelper.filehelper import change_file_status
from src.pyquickhelper.loghelper.repositories.pygit_helper import clone, rebase
from src.pyquickhelper.pycode import is_travis_or_appveyor
from src.pyquickhelper.loghelper.repositories.pygit_helper import get_file_last_modification
from src.pyquickhelper.pycode import is_travis_or_appveyor, ExtTestCase


class TestGitHelper(unittest.TestCase):
class TestGitHelper(ExtTestCase):

def test_clone_repo(self):
fLOG(
Expand Down Expand Up @@ -67,6 +68,16 @@ def test_clone_repo(self):
r = change_file_status(temp)
self.assertTrue(len(r) > 0)

def test_git_last_modifications(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")

this = os.path.abspath(__file__).replace(".pyc", ".py")
last = get_file_last_modification(this)
self.assertIn(last, "2019")


if __name__ == "__main__":
unittest.main()
133 changes: 133 additions & 0 deletions _unittests/ut_sphinxext/test_gitlog_extension.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
"""
@brief test log(time=4s)
@author Xavier Dupre
"""

import sys
import os
import unittest
import warnings
from datetime import datetime

try:
import src
except ImportError:
path = os.path.normpath(
os.path.abspath(
os.path.join(
os.path.split(__file__)[0],
"..",
"..")))
if path not in sys.path:
sys.path.append(path)
import src

from src.pyquickhelper.loghelper.flog import fLOG
from src.pyquickhelper.pycode import get_temp_folder
from src.pyquickhelper.helpgen import rst2html
from src.pyquickhelper.sphinxext import gitlog_role
from docutils.parsers.rst.roles import register_canonical_role


class TestGitlogExtension(unittest.TestCase):

def _test_post_parse_sn(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")

register_canonical_role("gitlog", gitlog_role)

def test_gitlog(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")

from docutils import nodes as skip_

content = """
test a directive
================
before
:gitlog:`date`
after
this code shoud appear
""".replace(" ", "")
if sys.version_info[0] >= 3:
content = content.replace('u"', '"')

html = rst2html(content, # fLOG=fLOG,
writer="html", keep_warnings=True,
directives=None)

t1 = "this code shoud not appear"
if t1 in html:
raise Exception(html)

t1 = "this code shoud appear"
if t1 not in html:
raise Exception(html)

t1 = str(datetime.now().year)
if t1 not in html:
raise Exception(html)

temp = get_temp_folder(__file__, "temp_gitlog")
with open(os.path.join(temp, "out_gitlog.html"), "w", encoding="utf8") as f:
f.write(html)

def test_gitlog_inline(self):
fLOG(
__file__,
self._testMethodName,
OutputPrint=__name__ == "__main__")

from docutils import nodes as skip_

content = """
test a directive
================
abeforea :gitlog:`date:{0}` aaftera
""".replace(" ", "")
this = os.path.abspath(__file__).replace('.pyc', '.py')
content = content.format(this).replace('\\', '/')
content = content.replace("_gitlog", "_bigger")

html = rst2html(content, # fLOG=fLOG,
writer="html", keep_warnings=True,
directives=None)

t1 = "abeforea"
if t1 not in html:
raise Exception(html)

t1 = "aftera"
if t1 not in html:
raise Exception(html)

t1 = '{1}'
if t1 in html:
raise Exception(html)

t1 = "date:"
if t1 in html:
raise Exception(html)

t1 = "bigger"
if t1 in html:
raise Exception(html)

temp = get_temp_folder(__file__, "temp_gitlog_inline")
with open(os.path.join(temp, "out_gitlog.html"), "w", encoding="utf8") as f:
f.write(html)


if __name__ == "__main__":
unittest.main()
3 changes: 2 additions & 1 deletion src/pyquickhelper/helpgen/default_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -848,6 +848,7 @@ def custom_setup(app, author):
from ..sphinxext.sphinx_blocref_extension import setup as setup_blocref
from ..sphinxext.sphinx_exref_extension import setup as setup_exref
from ..sphinxext.sphinx_faqref_extension import setup as setup_faqref
from ..sphinxext.sphinx_gitlog_extension import setup as setup_gitlog
from ..sphinxext.sphinx_mathdef_extension import setup as setup_mathdef
from ..sphinxext.sphinx_quote_extension import setup as setup_quote
from ..sphinxext.sphinx_nbref_extension import setup as setup_nbref
Expand Down Expand Up @@ -890,7 +891,7 @@ def custom_setup(app, author):
setup_signature, setup_docassert, setup_postcontents,
setup_tocdelay, setup_youtube, setup_tpl,
setup_epkg, setup_image, setup_collapse,
setup_downloadlink, setup_quote]
setup_downloadlink, setup_quote, setup_gitlog]

for ext in exts:
meta = ext(app)
Expand Down
2 changes: 2 additions & 0 deletions src/pyquickhelper/helpgen/sphinx_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
from ..sphinxext.sphinx_epkg_extension import epkg_role
from ..sphinxext.sphinx_bigger_extension import bigger_role
from ..sphinxext.sphinx_githublink_extension import githublink_role
from ..sphinxext.sphinx_gitlog_extension import gitlog_role
from ..sphinxext.sphinx_mathdef_extension import MathDef
from ..sphinxext.sphinx_quote_extension import QuoteNode
from ..sphinxext.sphinx_blocref_extension import BlocRef
Expand Down Expand Up @@ -320,6 +321,7 @@ def lay_build_override_newconf(t3):
roles.register_canonical_role("sharenet", sharenet_role)
roles.register_canonical_role("bigger", bigger_role)
roles.register_canonical_role("githublink", githublink_role)
roles.register_canonical_role("gitlog", gitlog_role)
roles.register_canonical_role("tpl", tpl_role)
roles.register_canonical_role("epkg", epkg_role)
roles.register_canonical_role("downloadlink", process_downloadlink_role)
Expand Down
45 changes: 42 additions & 3 deletions src/pyquickhelper/loghelper/repositories/pygit_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ def get_master_location(path=None, commandline=True):
try:
raise NotImplementedError()
except Exception:
return get_repo_version(path, True)
return get_master_location(path, True)
else:
cmd = get_cmd_git()
cmd += " config --get remote.origin.url"
Expand Down Expand Up @@ -673,8 +673,8 @@ def get_nb_commits(path=None, commandline=True):
if not commandline:
try:
raise NotImplementedError()
except Exception as e:
return get_repo_version(path, True)
except Exception:
return get_nb_commits(path, True)
else:
cmd = get_cmd_git()
cmd += ' rev-list HEAD --count'
Expand Down Expand Up @@ -704,6 +704,45 @@ def get_nb_commits(path=None, commandline=True):
return nb


def get_file_last_modification(path, commandline=True):
"""
Returns the last modification of a file.
@param path path to look
@param commandline if True, use the command line to get the version number, otherwise it uses pysvn
@return integer
"""
if path is None:
path = os.path.normpath(
os.path.abspath(os.path.join(os.path.split(__file__)[0], "..", "..", "..")))

if not commandline:
try:
raise NotImplementedError()
except Exception:
return get_file_last_modification(path, True)
else:
cmd = get_cmd_git()
cmd += ' log -1 --format="%ad" --'
cmd += " \"%s\"" % path

out, err = run_cmd(cmd,
wait=True,
encerror="strict",
encoding=sys.stdout.encoding if sys.stdout is not None else "utf8",
change_path=os.path.split(
path)[0] if os.path.isfile(path) else path,
log_error=False,
shell=sys.platform.startswith("win32"))

if len(err) > 0:
raise GitException(
"Unable to get commit number from path {0}\n[giterror]\n{1}\nCMD:\n{2}".format(path, err, cmd))

lines = out.strip("\n\r ")
return lines


def clone(location, srv, group, project, username=None, password=None, fLOG=None):
"""
Clones a :epkg:`git` repository.
Expand Down
4 changes: 3 additions & 1 deletion src/pyquickhelper/sphinxext/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from .sphinx_exref_extension import ExRef, ExRefList
from .sphinx_faqref_extension import FaqRef, FaqRefList
from .sphinx_githublink_extension import githublink_node, githublink_role
from .sphinx_gitlog_extension import gitlog_node, gitlog_role
from .sphinx_mathdef_extension import MathDef, MathDefList
from .sphinx_quote_extension import QuoteNode
from .sphinx_nbref_extension import NbRef, NbRefList
Expand All @@ -51,6 +52,7 @@
from ..sphinxext.sphinx_exref_extension import setup as setup_exref
from ..sphinxext.sphinx_faqref_extension import setup as setup_faqref
from ..sphinxext.sphinx_githublink_extension import setup as setup_githublink
from ..sphinxext.sphinx_gitlog_extension import setup as setup_gitlog
from ..sphinxext.sphinx_image_extension import setup as setup_simpleimage
from ..sphinxext.sphinx_mathdef_extension import setup as setup_mathdef
from ..sphinxext.sphinx_quote_extension import setup as setup_quote
Expand Down Expand Up @@ -123,7 +125,7 @@ def get_default_extensions(load_bokeh=False):
setup_autodoc, setup_imagesvg,
setup_plot, setup_image, setup_collapse,
setup_video, setup_simpleimage, setup_downloadlink,
setup_quote]
setup_quote, setup_gitlog]

if load_bokeh:
try:
Expand Down
Loading

0 comments on commit 2aaa457

Please sign in to comment.