rosotacom-dev 2.5.dev81__py3-none-any.whl → 2.5.dev82__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
rosotacom/cli.py CHANGED
@@ -3562,6 +3562,35 @@ def _ota_remote_package_dir(peer: OtaSmokePeer, plan: OtaSmokePlan, *, dry_run:
3562
3562
  return located
3563
3563
 
3564
3564
 
3565
+ def _ota_missing_project_message(plan: OtaSmokePlan, peer: OtaSmokePeer) -> str:
3566
+ """Why one peer has no project file, in the terms that make it fixable.
3567
+
3568
+ `test -f` failing is the single most common way a checkout-mode run stops,
3569
+ and the bare "exit code 1" it used to raise says nothing about the contract
3570
+ it broke. The path is not resolved per peer: `--project` is split once, on
3571
+ the orchestrator, into (checkout root, path inside it), and that *relative*
3572
+ path is then asserted inside every peer's own `--peer-checkout`. So the
3573
+ peers do not merely need a rosotacom project each — they need the same
3574
+ repository, with the project at the same place in it.
3575
+
3576
+ The failure therefore has two ordinary causes and they want opposite fixes:
3577
+ the peer is behind (sync it), or the project lives in a repository this peer
3578
+ does not have (move the project, or point the peer at the repository that
3579
+ holds it). Naming both is the difference between a minute and an afternoon.
3580
+ """
3581
+ workdir = _ota_peer_workdir(plan, peer)
3582
+ return (
3583
+ f"{peer.name}: {workdir}/{plan.project} does not exist.\n"
3584
+ f" --install-mode checkout resolves the project once, on this machine, into a checkout root and "
3585
+ f"the path {plan.project!r} inside it, and then asserts that same relative path inside every peer's "
3586
+ f"--peer-checkout. Every peer therefore needs the same repository, with the project at the same "
3587
+ f"place in it -- not a project of its own.\n"
3588
+ f" If {peer.name} has that repository, it is behind: sync it and run again.\n"
3589
+ f" If it does not, the project is in the wrong repository for this run. Move it into the one the "
3590
+ f"peers actually have, or give this peer --peer-checkout for a checkout that holds it."
3591
+ )
3592
+
3593
+
3565
3594
  def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
3566
3595
  """Checkout mode's replacement for staging: assert, do not install.
3567
3596
 
@@ -3583,13 +3612,16 @@ def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
3583
3612
  dry_run=dry_run,
3584
3613
  batch=True,
3585
3614
  )
3586
- _ota_run(
3615
+ found = _ota_run(
3587
3616
  peer,
3588
3617
  f"test -f {checkout}/{project}",
3589
3618
  label=f"{peer.name}: project config {plan.project} inside the checkout",
3590
3619
  dry_run=dry_run,
3620
+ check=False,
3591
3621
  batch=True,
3592
3622
  )
3623
+ if found.returncode != 0:
3624
+ raise RuntimeError(_ota_missing_project_message(plan, peer))
3593
3625
  _ota_run(
3594
3626
  peer,
3595
3627
  f"{OTA_CHECKOUT_PATH_PREFIX}command -v rosotacom >/dev/null 2>&1",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev81
3
+ Version: 2.5.dev82
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -6,7 +6,7 @@ rosotacom/benched_set.py,sha256=lBA1Rj04dbr2e-lIvYTWoL55_LdUpCAC-y7eIvJZ8lc,2721
6
6
  rosotacom/benchmark.py,sha256=3QoXJtWUGQPwvDWyQT_fOjx6K9G2pmvtnVurA21G2QY,76612
7
7
  rosotacom/benchmark_delta.py,sha256=qXzriBkbXOeJdlLKM4ziov1F-JfwlseYHE48S9hjFsQ,10005
8
8
  rosotacom/bundle_check.py,sha256=l_3BSuYk6juXQmsNU6jkxRbH8ayH2GkiW9ONKMQ1oJY,18270
9
- rosotacom/cli.py,sha256=TlA_LJXItXqlhcAxbOvlod-oI7fjqpZrV96QgZrlwWo,446379
9
+ rosotacom/cli.py,sha256=LNawoIvPNgyi8OezEjcmY1yViCrH8ZmGFZiH7Ckn964,448335
10
10
  rosotacom/cli_benchmark.py,sha256=LsSwy42afqLv7euMVg5l_E9G1HHI0IyNWGQ_UDfFz0Y,356428
11
11
  rosotacom/deployment.py,sha256=XVhB8JjxhAsglSEEPtiVSeV6fCG0rgGmDRulh14oIYQ,7318
12
12
  rosotacom/ffmpeg_packet.py,sha256=zB1BHgY1kexr5sETVMkm4bkVnRytj9k2t0uOYiHUZ6M,4267
@@ -205,9 +205,9 @@ rosotacom/resources/ws/session/creation/generate_session_files.py,sha256=3Sx4xTS
205
205
  rosotacom/resources/ws/session/creation/run_session.py,sha256=G2hJhrmLp11gm3JZ6_C-zZcqu_reXlE_wmobB7BiCfU,16849
206
206
  rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py,sha256=Ub_5f-ttUUc-rAPrZmg_Op34s8Z4C91hTyEn8fgyt-E,2633
207
207
  rosotacom/resources/ws/session/creation/strip_ansi.py,sha256=vNjpemcq4xHr0VG4x0bZqvgwEBEfOgN-b4PzbrM5nfM,851
208
- rosotacom_dev-2.5.dev81.dist-info/licenses/LICENSE.txt,sha256=FDB3-fao3lqZ94wsJHKAH7U88kAnfvZhZC8Hm5rN__g,1459
209
- rosotacom_dev-2.5.dev81.dist-info/METADATA,sha256=OLfPycTBlUYZx_m8TSa2ixxQ2D4cU5kbcfICAqxMDmM,58884
210
- rosotacom_dev-2.5.dev81.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
211
- rosotacom_dev-2.5.dev81.dist-info/entry_points.txt,sha256=im11ZWqBbgjQUBz2Ik2RNfMu54wlMwgiVpsBKeI7dCI,49
212
- rosotacom_dev-2.5.dev81.dist-info/top_level.txt,sha256=BZrtQcIVDWn_pQZR3Mlssqy5SaRXHjOa6B-1D9Fy4Ao,10
213
- rosotacom_dev-2.5.dev81.dist-info/RECORD,,
208
+ rosotacom_dev-2.5.dev82.dist-info/licenses/LICENSE.txt,sha256=FDB3-fao3lqZ94wsJHKAH7U88kAnfvZhZC8Hm5rN__g,1459
209
+ rosotacom_dev-2.5.dev82.dist-info/METADATA,sha256=LsLR74hGwoUePIz8usF8LvnJo4JoNAQ-Zdgb_qAgKq8,58884
210
+ rosotacom_dev-2.5.dev82.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
211
+ rosotacom_dev-2.5.dev82.dist-info/entry_points.txt,sha256=im11ZWqBbgjQUBz2Ik2RNfMu54wlMwgiVpsBKeI7dCI,49
212
+ rosotacom_dev-2.5.dev82.dist-info/top_level.txt,sha256=BZrtQcIVDWn_pQZR3Mlssqy5SaRXHjOa6B-1D9Fy4Ao,10
213
+ rosotacom_dev-2.5.dev82.dist-info/RECORD,,