mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 23:36:20 +00:00
git colourisation fixes
Fix bug where uncommitted changes were not fully colourised in the same way as diffs. Also try and catch more changes, eg. highlight if a Products Type has changed.
This commit is contained in:
@@ -99,15 +99,19 @@ def colourise_revision(ifcgit: tool.IfcGit) -> None:
|
|||||||
step_ids = ifcgit.get_revisions_step_ids()
|
step_ids = ifcgit.get_revisions_step_ids()
|
||||||
if not step_ids:
|
if not step_ids:
|
||||||
return
|
return
|
||||||
modified_shape_object_step_ids = ifcgit.get_modified_shape_object_step_ids(step_ids)
|
modified_step_ids = ifcgit.get_modified_step_ids(step_ids)
|
||||||
final_step_ids = ifcgit.update_step_ids(step_ids, modified_shape_object_step_ids)
|
final_step_ids = ifcgit.update_step_ids(step_ids, modified_step_ids)
|
||||||
ifcgit.colourise(final_step_ids)
|
ifcgit.colourise(final_step_ids)
|
||||||
|
|
||||||
|
|
||||||
def colourise_uncommitted(ifcgit: tool.IfcGit, ifc: tool.Ifc, repo: git.Repo) -> None:
|
def colourise_uncommitted(ifcgit: tool.IfcGit, ifc: tool.Ifc, repo: git.Repo) -> None:
|
||||||
path_ifc = ifc.get_path()
|
path_ifc = ifc.get_path()
|
||||||
step_ids = ifcgit.ifc_diff_ids(repo, None, "HEAD", path_ifc)
|
step_ids = ifcgit.ifc_diff_ids(repo, None, "HEAD", path_ifc)
|
||||||
ifcgit.colourise(step_ids)
|
if not step_ids:
|
||||||
|
return
|
||||||
|
modified_step_ids = ifcgit.get_modified_step_ids(step_ids)
|
||||||
|
final_step_ids = ifcgit.update_step_ids(step_ids, modified_step_ids)
|
||||||
|
ifcgit.colourise(final_step_ids)
|
||||||
|
|
||||||
|
|
||||||
def switch_revision(ifcgit: tool.IfcGit, ifc: tool.Ifc) -> None:
|
def switch_revision(ifcgit: tool.IfcGit, ifc: tool.Ifc) -> None:
|
||||||
|
|||||||
@@ -370,24 +370,36 @@ class IfcGit:
|
|||||||
return step_ids
|
return step_ids
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_modified_shape_object_step_ids(cls, step_ids: STEP_IDS) -> STEP_IDS:
|
def get_modified_step_ids(cls, step_ids: STEP_IDS) -> STEP_IDS:
|
||||||
model = tool.Ifc.get()
|
model = tool.Ifc.get()
|
||||||
modified_shape_object_step_ids = {"modified": []}
|
modified_step_ids = {"modified": set()}
|
||||||
|
|
||||||
for step_id in step_ids["modified"]:
|
for step_id in step_ids["modified"] | step_ids["added"]:
|
||||||
if model.by_id(step_id).is_a() == "IfcProductDefinitionShape":
|
try:
|
||||||
product = model.by_id(step_id).ShapeOfProduct[0]
|
entity = model.by_id(step_id)
|
||||||
modified_shape_object_step_ids["modified"].append(product.id())
|
except:
|
||||||
|
continue
|
||||||
|
if entity.is_a("IfcProductDefinitionShape"):
|
||||||
|
for product in entity.ShapeOfProduct:
|
||||||
|
modified_step_ids["modified"].add(product.id())
|
||||||
|
elif entity.is_a("IfcObjectPlacement"):
|
||||||
|
for product in entity.PlacesObject:
|
||||||
|
modified_step_ids["modified"].add(product.id())
|
||||||
|
elif entity.is_a("IfcTypeProduct") and entity.Types:
|
||||||
|
for related_object in entity.Types[0].RelatedObjects:
|
||||||
|
modified_step_ids["modified"].add(related_object.id())
|
||||||
|
|
||||||
return modified_shape_object_step_ids
|
return modified_step_ids
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def update_step_ids(cls, step_ids: STEP_IDS, modified_shape_object_step_ids: STEP_IDS) -> STEP_IDS:
|
def update_step_ids(cls, step_ids: STEP_IDS, modified_step_ids: STEP_IDS) -> STEP_IDS:
|
||||||
|
|
||||||
final_step_ids = {}
|
final_step_ids = {}
|
||||||
final_step_ids["added"] = step_ids["added"]
|
final_step_ids["added"] = step_ids["added"]
|
||||||
final_step_ids["removed"] = step_ids["removed"]
|
final_step_ids["removed"] = step_ids["removed"]
|
||||||
final_step_ids["modified"] = step_ids["modified"].union(modified_shape_object_step_ids["modified"])
|
final_step_ids["modified"] = (
|
||||||
|
step_ids["modified"].union(modified_step_ids["modified"]).difference(step_ids["added"])
|
||||||
|
)
|
||||||
return final_step_ids
|
return final_step_ids
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
Reference in New Issue
Block a user