RGerrish
7fe3bf042b
fix(update): self-heal stale git locks and stop false 'update available' on shallow clones
...
Two related failure modes after a crashed/interrupted fetch on a shallow
clone (git clone --depth 1 installs):
1. STALE LOCK WEDGES EVERY FETCH. A killed fetch can leave .git/shallow.lock
behind; every later 'git fetch' then fails with 'Unable to create
.../shallow.lock: File exists'. 'hermes update --check' reported a hard
fetch failure, and the passive banner check swallowed the exception and
compared stale refs. Add hermes_cli.gitlock.clear_stale_git_locks(), a
guarded sweep (age + git-process check so a live fetch is never yanked)
wired into the check path, the apply path, and the banner's passive check.
2. SHALLOW TIP-SHA COMPARE FALSE-POSITIVES. On a shallow clone the check
cannot count commits, so it compares tip SHAs. Local cherry-picks on top
of the remote tip (e.g. re-applied local patches) make HEAD differ from
origin/main even though HEAD already contains it — a false 'update
available' banner. Add hermes_cli.gitlock.is_ancestor_of_head() and use
'git merge-base --is-ancestor' in the CLI check and banner paths before
reporting an update. Mirror in the desktop (update-count.ts gains an
isAncestor input; main.ts probes merge-base --is-ancestor).
Tests: tests/test_gitlock.py (9) covering stale/young/no-lock/no-repo sweeps
and ancestry true/false; update-count.test.ts +3 for the isAncestor path.
2026-08-15 04:33:47 -07:00
..
2026-08-14 21:39:01 +00:00
2026-08-12 18:52:08 -07:00
2026-08-15 00:33:01 -07:00
2026-07-22 16:51:01 -04:00
2026-08-12 19:56:44 -07:00
2026-08-15 02:03:24 -07:00
2026-08-13 11:52:47 -07:00
2026-08-15 03:54:07 -07:00
2026-08-14 22:03:56 -07:00
2026-08-08 04:03:41 -07:00
2026-08-14 21:58:09 -07:00
2026-08-02 21:13:12 +05:30
2026-08-12 19:44:04 -07:00
2026-08-15 00:33:01 -07:00
2026-08-02 14:55:32 +05:30
2026-08-08 23:56:46 -07:00
2026-07-26 21:13:03 -07:00
2026-08-12 16:26:55 -07:00
2026-08-07 08:57:39 -07:00
2026-08-07 08:57:39 -07:00
2026-07-17 11:37:25 +05:30
2026-08-15 00:36:03 -07:00
2026-07-11 12:28:55 +05:30
2026-08-14 21:47:23 -07:00
2026-07-31 21:21:20 -07:00
2026-08-14 13:46:33 -07:00
2026-08-07 17:45:06 +05:30
2026-07-29 23:16:18 -07:00
2026-05-28 22:26:25 -07:00
2026-08-02 20:21:59 -07:00
2026-08-08 15:10:35 +05:30
2026-07-24 11:45:57 -07:00
2026-08-14 20:47:13 -07:00
2026-07-29 11:53:39 -07:00
2026-08-14 13:40:19 -07:00
2026-07-29 08:42:16 -07:00
2026-07-21 05:27:13 -07:00
2026-07-01 23:51:54 +05:30
2026-08-15 02:04:49 -07:00
2026-06-01 19:51:03 -07:00
2026-08-15 01:05:39 -07:00
2026-08-15 00:20:32 -07:00
2026-08-15 03:16:21 -07:00
2026-08-15 00:33:32 -07:00
2026-08-01 10:52:34 -07:00
2026-07-22 21:17:21 -07:00
2026-08-03 21:16:09 +05:30
2026-07-19 03:02:21 -07:00
2026-08-15 02:44:14 -07:00
2026-07-25 19:27:17 -07:00
2026-08-10 15:13:29 -04:00
2026-08-14 21:46:32 -07:00
2026-06-27 21:30:37 -07:00
2026-08-04 11:53:32 -06:00
2026-06-24 18:56:26 -07:00
2026-08-13 02:38:28 -07:00
2026-06-30 17:29:23 -07:00
2026-07-07 04:09:35 -07:00
2026-08-13 02:38:28 -07:00
2026-08-13 02:38:28 -07:00
2026-08-02 16:16:36 -07:00
2026-08-15 03:54:07 -07:00
2026-07-26 23:41:54 -07:00
2026-07-31 22:35:26 -07:00
2026-07-26 18:10:34 -07:00
2026-07-29 11:53:39 -07:00
2026-07-26 17:50:54 -07:00
2026-08-15 03:53:51 -07:00
2026-08-15 04:33:47 -07:00
2026-08-10 12:43:46 -07:00
2026-08-05 11:47:05 -04:00
2026-08-05 22:32:55 -07:00
2026-08-13 23:10:16 +05:30
2026-07-26 17:46:29 -07:00
2026-07-15 07:39:42 -07:00
2026-07-28 03:52:33 -05:00
2026-07-01 16:25:48 -05:00
2026-08-14 22:25:23 -07:00
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-08-13 10:47:40 -07:00
2026-07-27 21:10:51 -07:00
2026-08-05 11:47:05 -04:00
2026-07-05 13:42:46 -07:00
2026-08-14 13:40:19 -07:00
2026-08-15 02:26:38 -07:00
2026-06-19 07:46:33 -07:00
2026-08-14 22:37:46 -07:00
2026-08-15 02:03:24 -07:00
2026-07-28 00:53:16 -05:00
2026-06-21 19:05:27 -07:00
2026-08-07 09:44:21 -07:00
2026-08-02 22:44:38 +05:30
2026-06-22 19:16:47 -05:00
2026-08-13 23:15:25 +05:30
2026-07-29 11:53:39 -07:00
2026-08-12 21:50:35 -07:00
2026-08-12 21:50:35 -07:00
2026-08-01 14:52:18 -07:00
2026-08-14 01:31:31 -07:00
2026-08-14 01:06:13 -07:00
2026-08-04 19:35:57 +00:00
2026-07-26 21:22:40 -07:00
2026-08-14 01:06:13 -07:00
2026-08-13 22:09:50 -07:00
2026-08-15 00:34:29 -07:00
2026-08-15 00:34:29 -07:00
2026-08-07 19:47:40 +05:30
2026-06-21 22:43:48 -07:00
2026-07-29 10:13:50 -07:00
2026-08-13 02:38:28 -07:00
2026-08-14 21:35:30 -07:00
2026-07-29 10:14:11 -07:00
2026-08-15 10:29:05 +05:30
2026-07-29 17:51:40 -05:00
2026-07-02 05:10:31 -07:00
2026-08-09 10:33:58 -07:00
2026-08-15 00:32:44 -07:00
2026-08-12 20:10:51 -07:00
2026-08-12 20:10:51 -07:00
2026-08-12 18:39:22 -07:00
2026-08-12 18:52:08 -07:00
2026-08-12 19:56:44 -07:00
2026-08-13 13:38:58 -07:00
2026-08-14 21:56:33 -07:00
2026-07-28 22:42:19 -07:00
2026-07-15 07:39:17 -07:00
2026-08-06 05:00:17 +05:30
2026-08-10 22:48:24 -07:00
2026-06-25 16:40:26 -05:00
2026-08-15 00:33:11 -07:00
2026-08-03 23:23:39 +05:30
2026-07-31 21:21:16 -07:00
2026-06-25 13:52:06 -07:00
2026-08-13 03:06:08 -07:00
2026-07-29 11:53:39 -07:00
2026-07-30 03:39:26 -05:00
2026-07-29 10:14:11 -07:00
2026-08-14 13:51:26 -07:00
2026-06-27 15:59:00 -07:00
2026-08-10 17:02:56 -07:00
2026-07-29 17:13:48 +05:30
2026-08-15 03:16:21 -07:00
2026-06-17 01:04:26 +08:00
2026-08-15 01:55:22 -07:00
2026-05-29 13:24:12 -07:00
2026-07-29 11:53:39 -07:00
2026-08-01 10:47:20 -07:00
2026-08-08 12:32:23 -07:00
2026-08-14 21:07:21 -07:00
2026-08-15 02:04:49 -07:00
2026-07-07 12:36:41 -07:00
2026-08-15 02:04:49 -07:00
2026-07-26 19:30:21 -07:00
2026-07-31 22:36:55 -07:00
2026-08-15 00:31:37 -07:00
2026-07-17 04:53:38 -07:00
2026-08-12 19:43:47 -07:00
2026-08-15 02:20:13 -07:00
2026-07-26 08:43:24 -07:00
2026-06-11 07:51:01 -07:00
2026-08-12 16:59:37 -07:00
2026-08-08 15:10:35 +05:30
2026-07-09 19:57:54 -07:00
2026-08-02 13:31:16 +05:30
2026-08-05 11:59:33 +05:30
2026-07-21 21:00:43 -05:00
2026-07-29 09:33:48 -07:00
2026-07-29 12:11:24 -07:00
2026-07-24 16:00:03 -07:00
2026-07-31 23:18:12 -07:00
2026-06-25 16:40:26 -05:00
2026-08-07 08:58:14 -07:00
2026-08-15 01:04:19 -07:00
2026-05-28 22:26:25 -07:00
2026-08-07 17:45:06 +05:30
2026-06-05 03:20:10 -07:00
2026-08-02 16:16:36 -07:00
2026-08-14 00:26:11 -07:00
2026-08-15 04:16:31 -07:00
2026-07-29 11:53:39 -07:00
2026-08-06 05:00:17 +05:30
2026-08-15 04:33:47 -07:00
2026-07-31 22:28:46 -07:00
2026-08-14 16:43:37 -07:00
2026-07-29 19:48:37 -07:00
2026-08-07 10:11:05 -07:00
2026-08-15 01:05:39 -07:00
2026-07-29 16:21:54 -07:00
2026-08-09 06:21:04 -05:00
2026-08-15 01:21:40 -07:00
2026-08-15 01:53:34 -07:00
2026-07-24 11:45:57 -07:00
2026-07-29 10:14:11 -07:00
2026-08-01 14:30:16 -07:00
2026-06-09 23:21:14 -07:00
2026-08-06 05:00:17 +05:30