From ae450b15a436fd202724620b380203789c8c9065 Mon Sep 17 00:00:00 2001 From: "Salvador E. Tropea" Date: Tue, 6 Dec 2022 13:36:35 -0300 Subject: [PATCH] [KiKit Present] Now using the detected git binary - Also added repository URL detection --- README.md | 3 +++ docs/samples/generic_plot.kibot.yaml | 4 +++- kibot/PcbDraw/README.md | 2 +- kibot/PcbDraw/present.py | 7 +++++-- kibot/out_kikit_present.py | 29 ++++++++++++++++++++++++---- src/kibot-check | 9 ++++++++- 6 files changed, 45 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 599bfdfb..5c871170 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,7 @@ Notes: [**Git**](https://git-scm.com/) [![Tool](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/llave-inglesa-22x22.png)](https://git-scm.com/) [![Debian](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/debian-openlogo-22x22.png)](https://packages.debian.org/bullseye/git) ![Auto-download](https://raw.githubusercontent.com/INTI-CMNB/KiBot/master/docs/images/auto_download-22x22.png) - Optional to: - Compare with files in the repo for `diff` + - Find commit hash and/or date for `kikit_present` - Find commit hash and/or date for `pcb_replace` - Find commit hash and/or date for `sch_replace` - Find commit hash and/or date for `set_text_variables` @@ -2474,6 +2475,8 @@ Notes: If empty we use the name of the KiCad project. The default template uses it for things like the page title. - `repository`: [string=''] URL of the repository. Will be passed to the template. + If empty we will try to find it using `git remote get-url origin`. + The default template uses it to create an URL for the current commit. - `resources`: [string|list(string)=''] A list of file name patterns for additional resources to be included. I.e. images referenced in description. They will be copied relative to the output dir. diff --git a/docs/samples/generic_plot.kibot.yaml b/docs/samples/generic_plot.kibot.yaml index e61b9ebb..4f4babaa 100644 --- a/docs/samples/generic_plot.kibot.yaml +++ b/docs/samples/generic_plot.kibot.yaml @@ -1251,7 +1251,9 @@ outputs: # If empty we use the name of the KiCad project. # The default template uses it for things like the page title name: '' - # [string=''] URL of the repository. Will be passed to the template + # [string=''] URL of the repository. Will be passed to the template. + # If empty we will try to find it using `git remote get-url origin`. + # The default template uses it to create an URL for the current commit repository: '' # [string|list(string)=''] A list of file name patterns for additional resources to be included. # I.e. images referenced in description. diff --git a/kibot/PcbDraw/README.md b/kibot/PcbDraw/README.md index 990e405f..58940d35 100644 --- a/kibot/PcbDraw/README.md +++ b/kibot/PcbDraw/README.md @@ -205,4 +205,4 @@ This file comes from KiKit, but it has too much in common with `populate.py`. So now the images and gerbers come from outside. - Adapted Template._renderBoards to just copy the files (keeping the extensions) - Added listResources, with some changes to copyRelativeTo and _copyResources - +- The command used for git is now configurable diff --git a/kibot/PcbDraw/present.py b/kibot/PcbDraw/present.py index aceda045..cbbde418 100644 --- a/kibot/PcbDraw/present.py +++ b/kibot/PcbDraw/present.py @@ -137,7 +137,9 @@ class Template: """ Return a git revision string if in git repo, None otherwise """ - proc = subprocess.run(["git", "rev-parse", "HEAD"], capture_output=True) + if self.git_command is None: + return None + proc = subprocess.run([self.git_command, "rev-parse", "HEAD"], capture_output=True) if proc.returncode: return None return proc.stdout.decode("utf-8") @@ -177,9 +179,10 @@ class HtmlTemplate(Template): with open(os.path.join(outputDirectory, "index.html"),"w") as outFile: outFile.write(content) -def boardpage(outdir, description, board, resource, template, repository, name): +def boardpage(outdir, description, board, resource, template, repository, name, git_command): Path(outdir).mkdir(parents=True, exist_ok=True) template = readTemplate(template) + template.git_command = git_command template.addDescriptionFile(description) template.setRepository(repository) template.setName(name) diff --git a/kibot/out_kikit_present.py b/kibot/out_kikit_present.py index 961e8315..1443e68b 100644 --- a/kibot/out_kikit_present.py +++ b/kibot/out_kikit_present.py @@ -10,10 +10,13 @@ Dependencies: debian: python3-markdown2 arch: python-markdown2 role: mandatory + - from: Git + role: Find commit hash and/or date """ import glob import os import shutil +import subprocess import sys from tempfile import NamedTemporaryFile, TemporaryDirectory, mkdtemp from .error import KiPlotConfigurationError @@ -293,12 +296,21 @@ class KiKit_PresentOptions(BaseOptions): """ Path to a template directory or a name of built-in one. See KiKit's doc/present.md for template specification """ self.repository = '' - """ URL of the repository. Will be passed to the template """ + """ URL of the repository. Will be passed to the template. + If empty we will try to find it using `git remote get-url origin`. + The default template uses it to create an URL for the current commit """ self.name = '' """ Name of the project. Will be passed to the template. If empty we use the name of the KiCad project. The default template uses it for things like the page title """ super().__init__() + self._git_solved = False + + def get_git_command(self): + if not self._git_solved: + self._git_command = self.check_tool('Git') + self._git_solved = True + return self._git_command def config(self, parent): super().config(parent) @@ -326,6 +338,12 @@ class KiKit_PresentOptions(BaseOptions): self.template = GS.get_resource_path(os.path.join('pcbdraw', 'present', 'templates', self.template)) except SystemExit: raise KiPlotConfigurationError('Missing template `{}`'.format(self.template)) + # Repo URL + if not self.repository and self.get_git_command(): + try: + self.repository = run_command([self.get_git_command(), 'remote', 'get-url', 'origin'], just_raise=True) + except subprocess.CalledProcessError: + pass def get_targets(self, out_dir): # The web page @@ -374,7 +392,8 @@ class KiKit_PresentOptions(BaseOptions): else: self._description = self.description try: - boardpage(dir_name, self._description, board, self.resources, self.template, self.repository, self.name) + boardpage(dir_name, self._description, board, self.resources, self.template, self.repository, self.name, + self.get_git_command()) except RuntimeError as e: raise KiPlotConfigurationError('KiKit present error: '+str(e)) finally: @@ -408,12 +427,14 @@ class KiKit_Present(BaseOutput): 'back_image': 'renderer_for_present', 'gerbers': 'gerbers_for_present'}} # Renderer - renderer = BaseOutput.simple_conf_examples('pcbdraw', 'Renderer for the presentation', 'Presentation/Render') + renderer = BaseOutput.simple_conf_examples('pcbdraw', 'Renderer for the presentation', 'Render_for_presentation') renderer[0]['name'] = 'renderer_for_present' + renderer[0]['run_by_default'] = False outs.append(renderer[0]) # Gerbers - gerber = BaseOutput.simple_conf_examples('gerber', 'Gerbers for the presentation', 'Presentation/Gerber') + gerber = BaseOutput.simple_conf_examples('gerber', 'Gerbers for the presentation', 'Gerber_for_presentation') gerber[0]['name'] = 'gerbers_for_present' gerber[0]['layers'] = 'copper' + gerber[0]['run_by_default'] = False outs.append(gerber[0]) return outs diff --git a/src/kibot-check b/src/kibot-check index 5d77425d..2ec288e9 100755 --- a/src/kibot-check +++ b/src/kibot-check @@ -103,7 +103,7 @@ deps = '{\ "extra_arch": null,\ "extra_deb": null,\ "help_option": "--version",\ - "importance": 4,\ + "importance": 5,\ "in_debian": true,\ "is_kicad_plugin": false,\ "is_python": false,\ @@ -121,6 +121,13 @@ deps = '{\ "output": "diff",\ "version": null\ },\ + {\ + "desc": "Find commit hash and/or date",\ + "mandatory": false,\ + "max_version": null,\ + "output": "kikit_present",\ + "version": null\ + },\ {\ "desc": "Find commit hash and/or date",\ "mandatory": false,\