alissa-tools-github-revloop 0.31.26__tar.gz → 0.31.27__tar.gz

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.
Files changed (40) hide show
  1. {alissa_tools_github_revloop-0.31.26/src/main/alissa_tools_github_revloop.egg-info → alissa_tools_github_revloop-0.31.27}/PKG-INFO +1 -1
  2. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/janitor.py +24 -6
  3. alissa_tools_github_revloop-0.31.27/src/main/alissa/tools/github/revloop/version +1 -0
  4. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27/src/main/alissa_tools_github_revloop.egg-info}/PKG-INFO +1 -1
  5. alissa_tools_github_revloop-0.31.26/src/main/alissa/tools/github/revloop/version +0 -1
  6. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/LICENSE +0 -0
  7. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/MANIFEST.in +0 -0
  8. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/NOTICE +0 -0
  9. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/README.md +0 -0
  10. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/requirements.txt +0 -0
  11. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/setup.cfg +0 -0
  12. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/setup.py +0 -0
  13. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/__init__.py +0 -0
  14. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/__main__.py +0 -0
  15. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/alissa.py +0 -0
  16. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/alissa_client.py +0 -0
  17. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/bows.py +0 -0
  18. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/config.py +0 -0
  19. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/fleet_vitals.py +0 -0
  20. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/ghclient.py +0 -0
  21. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/loop.py +0 -0
  22. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/loop_events.py +0 -0
  23. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/parking.py +0 -0
  24. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/proc.py +0 -0
  25. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/prompts.py +0 -0
  26. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/prreview.py +0 -0
  27. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/state.py +0 -0
  28. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/trust.py +0 -0
  29. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/version.py +0 -0
  30. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/__init__.py +0 -0
  31. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/__main__.py +0 -0
  32. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/auth.py +0 -0
  33. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/page.py +0 -0
  34. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/server.py +0 -0
  35. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/sources.py +0 -0
  36. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa/tools/github/revloop/webui/sysinfo.py +0 -0
  37. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa_tools_github_revloop.egg-info/SOURCES.txt +0 -0
  38. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa_tools_github_revloop.egg-info/dependency_links.txt +0 -0
  39. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa_tools_github_revloop.egg-info/entry_points.txt +0 -0
  40. {alissa_tools_github_revloop-0.31.26 → alissa_tools_github_revloop-0.31.27}/src/main/alissa_tools_github_revloop.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-revloop
3
- Version: 0.31.26
3
+ Version: 0.31.27
4
4
  Summary: ALISSA-TOOLS-GITHUB-REVLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera
@@ -132,12 +132,18 @@ class HeldWalk:
132
132
  newest mtime when the walk began, the sweep `now` it began at, the bytes
133
133
  counted so far, and the directories still to read. A resumed walk's
134
134
  total may count a directory removed since it was read; it never counts a
135
- directory twice."""
135
+ directory twice.
136
+
137
+ `advanced` is the sweep `now` the walk last read a directory (issue
138
+ #191), 0 until it has. Kept walks resume least-recently-advanced first,
139
+ so two walks that each need several sweeps take turns: the one that just
140
+ had the leftover budget waits behind the one that did not."""
136
141
 
137
142
  mtime: float
138
143
  started: float
139
144
  total: int
140
145
  stack: "list[str]"
146
+ advanced: float = 0.0
141
147
 
142
148
 
143
149
  # One held folder's cached size, by path: either a finished walk, as
@@ -751,16 +757,26 @@ def _size_held(
751
757
  resumed walk is cached as of the sweep it began in, so the hourly
752
758
  re-walk counts from the oldest directory it read.
753
759
 
760
+ Kept walks go least-recently-advanced first, not oldest first (issue
761
+ #191). Otherwise a walk that needs more than SIZE_CACHE_SECONDS of
762
+ sweeps -- whose figure has expired by the sweep after it lands, so it
763
+ starts over -- takes every sweep's leftover budget, and a younger kept
764
+ walk never reads a directory.
765
+
754
766
  `sizes` is then re-keyed to this sweep's held folders: entries for gone
755
767
  folders drop out, and so do unsized folders whose walk never began."""
756
768
  previous = sizes or {}
757
769
 
758
- def cut_short(item: "tuple[float, Candidate, str]") -> bool:
759
- return isinstance(previous.get(item[1].path), HeldWalk)
770
+ def turn(item: "tuple[float, Candidate, str]") -> "tuple[bool, float]":
771
+ kept = previous.get(item[1].path)
772
+ if isinstance(kept, HeldWalk):
773
+ return True, kept.advanced
774
+ return False, 0.0
760
775
 
761
776
  seen: SizeCache = {}
762
- # Stable: oldest first within each group, as the sweep queued them.
763
- for mtime, candidate, key in sorted(queue, key=cut_short):
777
+ # Stable: oldest first among the folders not cut short and among kept
778
+ # walks that last advanced in the same sweep, as the sweep queued them.
779
+ for mtime, candidate, key in sorted(queue, key=turn):
764
780
  cached = previous.get(candidate.path)
765
781
  if (isinstance(cached, tuple) and cached[0] == mtime
766
782
  and now - cached[2] < SIZE_CACHE_SECONDS):
@@ -773,9 +789,11 @@ def _size_held(
773
789
  if isinstance(cached, HeldWalk) and cached.mtime == mtime:
774
790
  progress = cached
775
791
  else:
776
- progress = HeldWalk(mtime, now, 0, [os.fspath(candidate.path)])
792
+ progress = HeldWalk(mtime, now, 0, [os.fspath(candidate.path)],
793
+ cached.advanced if isinstance(cached, HeldWalk) else 0.0)
777
794
  walked = None
778
795
  if not out_of_time():
796
+ progress.advanced = now
779
797
  walked = held_bytes_of(candidate.path, out_of_time, progress)
780
798
  resumable = resumable or walked is None
781
799
  if walked is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alissa-tools-github-revloop
3
- Version: 0.31.26
3
+ Version: 0.31.27
4
4
  Summary: ALISSA-TOOLS-GITHUB-REVLOOP
5
5
  Home-page: https://alissa.app
6
6
  Author: Fahera