Files
dragonpilot/selfdrive/debug/print_docs_diff.py
Shane Smiskol aadaaabd54 compatibility docs: print diff from PR (#24941)
* print docs diff

* revert car changes

* cause a diff

* temp so it works

* text diff

* tier inline is a bit too much

* comments

* fix

* use paths

* fix

* temp

* temp

* diff

* fix

* remove something

* more text diff

* Delete comment if outdated

* Smaller diff

* remove

* no diff

* Don't try to run on fork PRs

* cause some errors

* Fix

* Fix

* Doesn't support env in job if, only step if

* in case file was moved, don't throw error

* See if this does what I think it does

* See if this does what I think it does

* should work

* change something

* revert

* uncomment

* no comment

* this shouldn't fail

* rename to base

* Remove true

* Remove other true
2022-07-12 18:58:46 -07:00

91 lines
3.0 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
import argparse
import pickle
from selfdrive.car.docs import get_all_car_info
from selfdrive.car.docs_definitions import Column
STAR_ICON = '<a href="##"><img valign="top" src="https://raw.githubusercontent.com/commaai/openpilot/master/docs/assets/icon-star-{}.svg" width="22" /></a>'
COLUMNS = "|" + "|".join([column.value for column in Column]) + "|"
COLUMN_HEADER = "|---|---|---|:---:|:---:|:---:|:---:|:---:|"
ARROW_SYMBOL = "➡️"
def load_base_car_info(path):
with open(path, "rb") as f:
return pickle.load(f)
def get_star_diff(base_car, new_car):
return [column for column, value in base_car.row.items() if value != new_car.row[column]]
def format_row(builder):
return "|" + "|".join(builder) + "|"
def print_car_info_diff(path):
base_car_info = {f"{i.make} {i.model}": i for i in load_base_car_info(path)}
new_car_info = {f"{i.make} {i.model}": i for i in get_all_car_info()}
tier_changes = []
star_changes = []
removals = []
additions = []
# Changes (tier + stars)
for base_car_model, base_car in base_car_info.items():
if base_car_model not in new_car_info:
continue
new_car = new_car_info[base_car_model]
# Tier changes
if base_car.tier != new_car.tier:
tier_changes.append(f"- Tier for {base_car.make} {base_car.model} changed! ({base_car.tier.name.title()} {ARROW_SYMBOL} {new_car.tier.name.title()})")
# Star changes
diff = get_star_diff(base_car, new_car)
if not len(diff):
continue
row_builder = []
for column in list(Column):
if column not in diff:
row_builder.append(new_car.get_column(column, STAR_ICON, "{}"))
else:
row_builder.append(base_car.get_column(column, STAR_ICON, "{}") + ARROW_SYMBOL + new_car.get_column(column, STAR_ICON, "{}"))
star_changes.append(format_row(row_builder))
# Removals
for model in set(base_car_info) - set(new_car_info):
car_info = base_car_info[model]
removals.append(format_row([car_info.get_column(column, STAR_ICON, "{}") for column in Column]))
# Additions
for model in set(new_car_info) - set(base_car_info):
car_info = new_car_info[model]
additions.append(format_row([car_info.get_column(column, STAR_ICON, "{}") for column in Column]))
# Print diff
if len(star_changes) or len(tier_changes) or len(removals) or len(additions):
markdown_builder = ["### ⚠️ This PR makes changes to [CARS.md](../blob/master/docs/CARS.md) ⚠️"]
for title, category in (("## 🏅 Tier Changes", tier_changes), ("## 🔀 Star Changes", star_changes), ("## ❌ Removed", removals), ("## Added", additions)):
if len(category):
markdown_builder.append(title)
if "Tier" not in title:
markdown_builder.append(COLUMNS)
markdown_builder.append(COLUMN_HEADER)
markdown_builder.extend(category)
print("\n".join(markdown_builder))
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--path", required=True)
args = parser.parse_args()
print_car_info_diff(args.path)