diff --git a/bincio/render/merge.py b/bincio/render/merge.py index 34c5db4..3d056f3 100644 --- a/bincio/render/merge.py +++ b/bincio/render/merge.py @@ -326,7 +326,7 @@ def _merge_all_locked(data_dir: Path) -> int: athlete_dest = merged_dir / "athlete.json" if athlete_dest.exists() or athlete_dest.is_symlink(): athlete_dest.unlink() - if athlete_src.exists(): + if athlete_src.exists() and athlete_src.stat().st_size > 0: athlete_edits_path = data_dir / "edits" / "athlete.yaml" if athlete_edits_path.exists(): try: @@ -338,9 +338,12 @@ def _merge_all_locked(data_dir: Path) -> int: edits = {} _ATHLETE_EDITABLE = {"max_hr", "ftp_w", "hr_zones", "power_zones", "seasons", "gear"} if edits: - athlete_data = json.loads(athlete_src.read_text(encoding="utf-8")) - athlete_data.update({k: v for k, v in edits.items() if k in _ATHLETE_EDITABLE}) - athlete_dest.write_text(_dumps(athlete_data)) + try: + athlete_data = json.loads(athlete_src.read_text(encoding="utf-8")) + athlete_data.update({k: v for k, v in edits.items() if k in _ATHLETE_EDITABLE}) + athlete_dest.write_text(_dumps(athlete_data)) + except (json.JSONDecodeError, OSError): + pass else: athlete_dest.symlink_to(athlete_src.resolve())