Skip to content

Release 3.50.5.107, so a stopped copy leaves no half-written files - #239

Merged
xroche merged 5 commits into
masterfrom
release-3.50.5.107
Oct 2, 2026
Merged

xroche merged 5 commits into
masterfrom
release-3.50.5.107

Conversation

@xroche

@xroche xroche commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

The engine pin moves to the 3.50.5 tag, so versionName realigns to 3.50.5 and versionCode goes to 107.

Four of the 28 engine commits reach code this app compiles:

  • a stop during a delayed type wait no longer overwrites a slot another download owns, so the link stays absolute (c1ddc82d)
  • a spooled reply that is never saved no longer leaves an empty directory (42e4700c)
  • a failed spool write drops its partial file, and the next crawl sweeps what a killed one left (df34dc3d)
  • the engine measures -E on a monotonic millisecond clock (1fc3bebf)

-E itself still takes seconds, so the "max time overall" field needs no edit.

The bounded exit wait of commit cf589f4d is not in the APK, because it lives in src/httrack.c and Android.mk does not compile that file.

The release notes change in all 29 locales.

xroche and others added 5 commits October 2, 2026 19:58
The engine pin moves to the 3.50.5 tag (16c91fac), whose
HTTRACK_VERSIONID reads 3.50.5, so the versionName prefix realigns and
versionCode goes to 107.

What the 28 engine commits change for this app: a copy you stop no
longer leaves .delayed files or empty directories in the mirror, a
link that was never fetched keeps its absolute URL instead of pointing
at a local name that was never saved, a run with -E set stops within
its limit plus 5 seconds rather than waiting on a thread stuck in
getaddrinfo(), and spool files from a failed write or a killed process
are swept. The app passes -E from the "max time overall" field, and
that option still takes seconds: 3.50.5 only moved the measurement to
a millisecond monotonic clock.

No engine source file was added or removed between the two pins, so the
explicit ndk-build source list still covers the build. The nested
coucal pin does not move.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
Three of the four English bullets were wrong, and the review caught them
before the upload.

The time-limit bullet promised the bounded exit wait of engine commit
cf589f4d. That fix lives in src/httrack.c, the CLI main(), and
app/src/main/jni/Android.mk does not list that file, so none of it ships
here. The one reachable part of the same release is the monotonic
millisecond clock behind -E, which only sharpens a limit a user already
set, so the bullet is gone rather than reworded.

The empty-folder bullet credited stopping a copy. Engine commit 42e4700c
fixes a reply that is never saved, a 404 for example, on any crawl. The
bullet now names that case.

The leftover-file bullet read as immediate. back_spool_sweep() runs once,
at crawl setup in htscore.c, so an interrupted copy's spool goes at the
start of the NEXT copy. The bullet now says so.

The fourth claim gains the headline of engine commit c1ddc82d: a
cancelled type wait wrote a file name into a backlog slot another
download may already own.

All 29 locales follow.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
Round 2 promised that a copy you stop leaves no unfinished files. The
fourth bullet then said an interrupted copy's temporary files wait for
the next copy. Both cannot be true.

The first bullet now carries the other half of engine commit c1ddc82d.
A link the stopped copy never fetched keeps its absolute URL, instead of
pointing at a local page that was never saved. A user meets that sooner
than the slot race.

The third bullet said "mix up the name", which left unclear whose name
moved. It now says the stop cannot overwrite another download's file
name.

All 29 locales follow.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
The link note said "never fetched". The fix is gated on IS_DELAYED_EXT
(htsparse.c:5321), so it only fires when the stop arrives while the
link's type is still being probed. Every other unfetched link keeps the
local name it got at parse time. The note now names that trigger.

The empty-folder note promised that pages never saved leave none.
back_tmpname() still puts a slot's temporary beside the save name, and
back_tmpdir_drop() removes only the ~hts-tmp level, so the parent
directories can stay. The note now says "fewer".

Three bullets rather than four. The freed-slot write and the surviving
absolute URL are two halves of engine commit c1ddc82d, and listing both
read as two separate fixes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
"Halten Sie an, während HTTrack einen Dateityp prüft" is also the exact
form of the polite imperative, so a German reader meets "Stop!" and then
a clause with nothing to attach it to. "Wenn Sie anhalten" can only be
the condition. The Scandinavian and Dutch bullets keep their verb-first
conditional, which collides with no imperative there.

The Polish bullet said "gdy" twice, once as the conjunction and once
inside "w chwili, gdy". It now names the action instead.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
@xroche
xroche merged commit 803441f into master Oct 2, 2026
7 checks passed
@xroche
xroche deleted the release-3.50.5.107 branch October 2, 2026 18:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant