[KiRi][Added] Now we can choose the branch

Also added check to see if we have at least 2 commits
This commit is contained in:
Salvador E. Tropea 2023-12-29 10:50:21 -03:00
parent 7f8828ad3f
commit 0e37d40d2f
2 changed files with 16 additions and 11 deletions

View File

@ -290,6 +290,7 @@ W_BADANGLE = '(W134) '
W_VALMISMATCH = '(W135) ' W_VALMISMATCH = '(W135) '
W_BADOFFSET = '(W136) ' W_BADOFFSET = '(W136) '
W_BUG16418 = '(W137) ' W_BUG16418 = '(W137) '
W_NOTHCMP = '(W138) '
# Somehow arbitrary, the colors are real, but can be different # Somehow arbitrary, the colors are real, but can be different
PCB_MAT_COLORS = {'fr1': "937042", 'fr2': "949d70", 'fr3': "adacb4", 'fr4': "332B16", 'fr5': "6cc290"} PCB_MAT_COLORS = {'fr1': "937042", 'fr2': "949d70", 'fr3': "adacb4", 'fr4': "332B16", 'fr5': "6cc290"}
PCB_FINISH_COLORS = {'hal': "8b898c", 'hasl': "8b898c", 'imag': "8b898c", 'enig': "cfb96e", 'enepig': "cfb96e", PCB_FINISH_COLORS = {'hal': "8b898c", 'hasl': "8b898c", 'imag': "8b898c", 'enig': "cfb96e", 'enepig': "cfb96e",

View File

@ -30,6 +30,7 @@ from .gs import GS
from .kicad.color_theme import load_color_theme from .kicad.color_theme import load_color_theme
from .kiplot import load_any_sch, run_command from .kiplot import load_any_sch, run_command
from .layer import Layer from .layer import Layer
from .misc import W_NOTHCMP
from .out_base import VariantOptions from .out_base import VariantOptions
from .macros import macros, document, output_class # noqa: F401 from .macros import macros, document, output_class # noqa: F401
from . import log from . import log
@ -64,6 +65,8 @@ class KiRiOptions(VariantOptions):
""" Color used for the background of the diff canvas """ """ Color used for the background of the diff canvas """
self.max_commits = 0 self.max_commits = 0
""" Maximum number of commits to include. Use 0 for all available commits """ """ Maximum number of commits to include. Use 0 for all available commits """
self.branch = 'HEAD'
""" Branch to use for the commits """
self.keep_generated = False self.keep_generated = False
""" *Avoid PCB and SCH images regeneration. Useful for incremental usage """ """ *Avoid PCB and SCH images regeneration. Useful for incremental usage """
super().__init__() super().__init__()
@ -180,9 +183,9 @@ class KiRiOptions(VariantOptions):
f.write((GS.pcb_title or 'No title')+'|'+(GS.pcb_rev or '')+'|'+(GS.pcb_date or today)+'\n') f.write((GS.pcb_title or 'No title')+'|'+(GS.pcb_rev or '')+'|'+(GS.pcb_date or today)+'\n')
def get_modified_status(self, pcb_file, sch_files): def get_modified_status(self, pcb_file, sch_files):
res = self.run_git(['log', '--pretty=format:%H', '--', pcb_file]) res = self.run_git(['log', '--pretty=format:%H', self.branch] + self._max_commits + ['--', pcb_file])
self.commits_with_changed_pcb = set(res.split()) self.commits_with_changed_pcb = set(res.split())
res = self.run_git(['log', '--pretty=format:%H', '--'] + sch_files) res = self.run_git(['log', '--pretty=format:%H', self.branch] + self._max_commits + ['--'] + sch_files)
self.commits_with_changed_sch = set(res.split()) self.commits_with_changed_sch = set(res.split())
if GS.debug_level > 1: if GS.debug_level > 1:
logger.debug(f'Commits with changes in the PCB: {self.commits_with_changed_pcb}') logger.debug(f'Commits with changes in the PCB: {self.commits_with_changed_pcb}')
@ -262,17 +265,20 @@ class KiRiOptions(VariantOptions):
self.repo_dir = GS.sch_dir self.repo_dir = GS.sch_dir
GS.check_pcb() GS.check_pcb()
# Get a list of hashes where we have changes # Get a list of hashes where we have changes
# TODO implement a limit -n X self._max_commits = ['-n', str(self.max_commits)] if self.max_commits else []
cmd = ['log', "--date=format:%Y-%m-%d %H:%M:%S", '--pretty=format:%H | %ad | %an | %s'] cmd = ['log', "--date=format:%Y-%m-%d %H:%M:%S", '--pretty=format:%H | %ad | %an | %s']
if self.max_commits: res = self.run_git(cmd + self._max_commits + [self.branch, '--', GS.pcb_file] + sch_files)
cmd += ['-n', str(self.max_commits)]
res = self.run_git(cmd + ['--', GS.pcb_file] + sch_files)
hashes = [r.split(' | ') for r in res.split('\n')] hashes = [r.split(' | ') for r in res.split('\n')]
self.create_layers_incl(self.layers) # Ensure we have at least 2
self.solve_layer_colors() sch_dirty = self.git_dirty(GS.sch_file)
pcb_dirty = self.git_dirty(GS.pcb_file)
if len(hashes) + (1 if sch_dirty or pcb_dirty else 0) < 2:
logger.warning(W_NOTHCMP+'Nothing to compare')
return
# Get more information about what is changed # Get more information about what is changed
self.get_modified_status(GS.pcb_file, sch_files) self.get_modified_status(GS.pcb_file, sch_files)
# TODO ensure we have at least 2 self.create_layers_incl(self.layers)
self.solve_layer_colors()
try: try:
git_tmp_wd = None git_tmp_wd = None
try: try:
@ -303,8 +309,6 @@ class KiRiOptions(VariantOptions):
if git_tmp_wd: if git_tmp_wd:
self.remove_git_worktree(git_tmp_wd) self.remove_git_worktree(git_tmp_wd)
# Do we have modifications? # Do we have modifications?
sch_dirty = self.git_dirty(GS.sch_file)
pcb_dirty = self.git_dirty(GS.pcb_file)
if sch_dirty or pcb_dirty: if sch_dirty or pcb_dirty:
# Include the current files # Include the current files
dst_dir = os.path.join(self.cache_dir, HASH_LOCAL) dst_dir = os.path.join(self.cache_dir, HASH_LOCAL)