Pure OCaml xxhash implementation

Fix sync not picking up external pushes on first run

The needs_pull optimization was computed from status before fetching
from remotes. If a repo was "In_sync" but received commits during
fetch, it was incorrectly skipped in the subtree pull phase.

Now repos that receive commits during fetch are always included in
the subtree pull, regardless of their pre-fetch status.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+14 -1
+14 -1
monopam/lib/monopam.ml
··· 1778 1778 end 1779 1779 else begin 1780 1780 (* OPTIMIZATION: skip packages already in sync *) 1781 - let to_pull, to_skip = List.partition needs_pull successfully_fetched in 1781 + (* But always pull repos that received commits from fetch *) 1782 + let repos_updated_by_fetch = 1783 + List.filter_map 1784 + (fun (name, was_cloned, commits) -> 1785 + if was_cloned || commits > 0 then Some name else None) 1786 + fetch_successes 1787 + in 1788 + let needs_pull_after_fetch pkg = 1789 + needs_pull pkg 1790 + || List.mem (Package.repo_name pkg) repos_updated_by_fetch 1791 + in 1792 + let to_pull, to_skip = 1793 + List.partition needs_pull_after_fetch successfully_fetched 1794 + in 1782 1795 Log.app (fun m -> m " Updating subtrees..."); 1783 1796 if to_skip <> [] then 1784 1797 Log.app (fun m ->