Skip to content

po: in-place rename Petar Maymounkov's email + paper URL in all catalogs (post #851) - #853

Merged
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:chore/po-kademlia-url-bump
Jun 5, 2026
Merged

po: in-place rename Petar Maymounkov's email + paper URL in all catalogs (post #851)#853
mrjimenez merged 1 commit into
amule-project:masterfrom
got3nks:chore/po-kademlia-url-bump

Conversation

@got3nks

@got3nks got3nks commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

PR #851 updated the email and the Kademlia paper URL in src/amuleDlg.cpp:533-534, but the po/*.po and po/amule.pot files still carried the old strings in both msgid and msgstr. After #851 landed, the catalogs were stale — surfaced by @cardpuncher on the merge commit.

Why direct substitution instead of regenerate-and-translate

Both fields appear literally in every msgid and every msgstr — checked across all 38 languages, no translator localized either the email address or the URL. So a sed s/old/new/g pass across msgid AND msgstr in every .po + the .pot keeps every existing translation intact (the surrounding "Copyright (c) ... Petar Maymounkov" wording stays in whatever language it was already in) and brings the catalogs into sync with the source in one mechanical pass.

Alternative would be: regen the .pot, msgmerge → all 38 catalogs end up with #~-prefixed obsolete entries for the old strings + empty msgstr for the new strings → 38 PRs from translators to refill. Same wording, just different email/URL. Much higher friction for zero translator value.

What

  • Substitute [email protected][email protected] in po/amule.pot and every po/*.po (both msgid and msgstr).
  • Substitute http://kademlia.scs.cs.nyu.eduhttps://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf in the same files (both halves).
  • Then re-ran scripts/update-po.sh on top — small POT-Creation-Date / line-number drift only.

Verified

  • msgfmt --check po/*.po passes on every file.
  • Zero occurrences of post.harvard.edu / kademlia.scs.cs.nyu.edu remain in any .po or in amule.pot.
  • Existing translations untouched (e.g. zh_CN still translates "Copyright" → "版权所有" with the new email; fr / de / es are unchanged English with the new email).

PR amule-project#851 updated [email protected] -> [email protected] and the
NYU URL -> the MIT CSAIL paper URL in src/amuleDlg.cpp:533-534, but the
po/*.po files still carried the old strings in both msgid and msgstr.
After amule-project#851 landed they were stale — translators would have ended up
re-translating identical text just because the email/URL changed.

Direct sed substitution across msgid AND msgstr in every .po + the
.pot preserves every existing translation untouched (the surrounding
"Copyright (c) ... Petar Maymounkov" wording stays in whatever language
it was already in) and brings the catalogs into sync with the source
in one mechanical pass — no obsolete entries, no fuzzy markers, no
manual re-translation.

scripts/update-po.sh then re-ran cleanly on top (just POT-Creation-Date
+ line-number realignment from a few days of drift). msgfmt --check
passes on every .po file.
got3nks referenced this pull request Jun 5, 2026
…rent

The About box and three kademlia source-file copyright headers carried
the 2002-era post.harvard.edu email and the long-defunct
http://kademlia.scs.cs.nyu.edu page. Petar Maymounkov confirmed his
current address and a durable canonical URL for the paper on #838:

  email: [email protected]  -> [email protected]
  url:   http://kademlia.scs.cs.nyu.edu
         -> https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf

Updated in five spots:
  - src/amuleDlg.cpp:533-534   (user-visible About box text)
  - src/kademlia/routing/Contact.cpp:24-25
  - src/kademlia/routing/RoutingBin.cpp:24-25
  - src/kademlia/routing/RoutingZone.cpp:25-26

Closes #838.
@mrjimenez
mrjimenez merged commit b6c587f into amule-project:master Jun 5, 2026
7 checks passed
@got3nks
got3nks deleted the chore/po-kademlia-url-bump branch June 5, 2026 22:35
got3nks added a commit to got3nks/amule that referenced this pull request Jun 7, 2026
…ule-project#912)

Extends existing categories (preferring extensions over new lines):
- Performance/Upload: amule-project#898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  amule-project#879/amule-project#882/amule-project#890/amule-project#886; new amuleweb security hardening bullet
  consolidating ngosang's amule-project#869-amule-project#874 triage (all landed in amule-project#875);
  amulegui list extended with amule-project#857; shared-folder watcher extended
  with amule-project#858.
- Packaging: Windows installer i18n line extended with amule-project#899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering amule-project#851/amule-project#855/amule-project#862/amule-project#888/amule-project#900/amule-project#866/amule-project#867/amule-project#895 and amule-project#909/amule-project#910/amule-project#912.
- Translations: new pre-release final-wave bullet covering amule-project#847/amule-project#856/
  amule-project#891/amule-project#908/amule-project#860/amule-project#904/amule-project#859/amule-project#863/amule-project#861/amule-project#880/amule-project#911/amule-project#901/amule-project#902/amule-project#889/amule-project#868/amule-project#853.
- Bug Fixes & Stability: amule-project#850/amule-project#854/amule-project#878/amule-project#906.
- CI: ccache wiring (amule-project#892, amule-project#903) + CodeQL binutils-dev (amule-project#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through amule-project#912.
mrjimenez pushed a commit that referenced this pull request Jun 8, 2026
Extends existing categories (preferring extensions over new lines):
- Performance/Upload: #898 SlotAllocation default raised.
- Networking & Discovery: wire-parser hardening list extended with
  #879/#882/#890/#886; new amuleweb security hardening bullet
  consolidating ngosang's #869-#874 triage (all landed in #875);
  amulegui list extended with #857; shared-folder watcher extended
  with #858.
- Packaging: Windows installer i18n line extended with #899.
- Internals & Refactoring: new docs-polish + code-quality bullets
  covering #851/#855/#862/#888/#900/#866/#867/#895 and #909/#910/#912.
- Translations: new pre-release final-wave bullet covering #847/#856/
  #891/#908/#860/#904/#859/#863/#861/#880/#911/#901/#902/#889/#868/#853.
- Bug Fixes & Stability: #850/#854/#878/#906.
- CI: ccache wiring (#892, #903) + CodeQL binutils-dev (#907).

Contributors footer gains mifritscher and nguyenhoangminhhieu2004-gif
(both first-time contributors).

PR index extended through #912.
got3nks added a commit to got3nks/amule that referenced this pull request Aug 8, 2026
The splash stayed up until the startup hash queue drained, because
FinishStartupSplash() both ended the list batches and showed the window, and it
only ran once CThreadScheduler reported nothing left to hash. A share with many
new files therefore left the application unreachable for as long as hashing
took -- half an hour in issue amule-project#853 -- and Preferences was among the things out
of reach, so a user could not stop aMule hashing a folder they no longer wanted
to share.

The justification for waiting does not hold. It reasoned that each completion's
main-thread work would leave the UI unusable, but that is only true once the
batch is over: while it is open, BeginBatchUpdate() makes ShowFile() an O(1)
append instead of a sorted insert that rebuilds the row index. The freeze it
was avoiding came from ending the batch, which the same function did a few
lines earlier.

So the two are separated. When the scan ends the download list closes its batch
as before, the shared list sorts what the scan found and thaws while its batch
stays open, and the window goes up. Rows from the drain then arrive as appends,
and the poll tick sorts them into place -- but only when one actually arrived.
Hashing cost tracks bytes, so a large file is minutes of nothing followed by a
single append; sorting per tick regardless would run a full std::sort, a
row-index rebuild and a model reset once a second for no reordering at all. The
tick also reports what is left on the shared-files label, so the count is
visible in the window rather than on a splash nobody can see past.

Hashing gets the whole of the bar's last band back as a result: it had
kScanBandEnd = 99 and its own band from there, so the longest phase of a first
run advanced the bar by one point and read as a hang.

CSplashScreen::SetLoopRunning() went with it. It existed so updates would stop
pumping the loop once the splash outlived OnInit, which it no longer does, and
without it m_pumpsLoop could never be false -- leaving an unreachable branch in
SetProgress().
got3nks added a commit to got3nks/amule that referenced this pull request Aug 8, 2026
The splash stayed up until the startup hash queue drained, because
FinishStartupSplash() both ended the list batches and showed the window, and it
only ran once CThreadScheduler reported nothing left to hash. A share with many
new files therefore left the application unreachable for as long as hashing
took -- half an hour in issue amule-project#853 -- and Preferences was among the things out
of reach, so a user could not stop aMule hashing a folder they no longer wanted
to share.

The justification for waiting does not hold. It reasoned that each completion's
main-thread work would leave the UI unusable, but that is only true once the
batch is over: while it is open, BeginBatchUpdate() makes ShowFile() an O(1)
append instead of a sorted insert that rebuilds the row index. The freeze it
was avoiding came from ending the batch, which the same function did a few
lines earlier.

So the two are separated. When the scan ends the download list closes its batch
as before, the shared list sorts what the scan found and thaws while its batch
stays open, and the window goes up. Rows from the drain then arrive as appends,
and the poll tick sorts them into place -- but only when one actually arrived.
Hashing cost tracks bytes, so a large file is minutes of nothing followed by a
single append; sorting per tick regardless would run a full std::sort, a
row-index rebuild and a model reset once a second for no reordering at all. The
tick also reports what is left on the shared-files label, so the count is
visible in the window rather than on a splash nobody can see past.

Hashing gets the whole of the bar's last band back as a result: it had
kScanBandEnd = 99 and its own band from there, so the longest phase of a first
run advanced the bar by one point and read as a hang.

CSplashScreen::SetLoopRunning() went with it. It existed so updates would stop
pumping the loop once the splash outlived OnInit, which it no longer does, and
without it m_pumpsLoop could never be false -- leaving an unreachable branch in
SetProgress().
mrjimenez pushed a commit to mrjimenez/amule that referenced this pull request Aug 8, 2026
…oes (amule-project#858)

The splash stayed up until the startup hash queue drained, because
FinishStartupSplash() both ended the list batches and showed the window, and it
only ran once CThreadScheduler reported nothing left to hash. A share with many
new files therefore left the application unreachable for as long as hashing
took -- half an hour in issue amule-project#853 -- and Preferences was among the things out
of reach, so a user could not stop aMule hashing a folder they no longer wanted
to share.

The justification for waiting does not hold. It reasoned that each completion's
main-thread work would leave the UI unusable, but that is only true once the
batch is over: while it is open, BeginBatchUpdate() makes ShowFile() an O(1)
append instead of a sorted insert that rebuilds the row index. The freeze it
was avoiding came from ending the batch, which the same function did a few
lines earlier.

So the two are separated. When the scan ends the download list closes its batch
as before, the shared list sorts what the scan found and thaws while its batch
stays open, and the window goes up. Rows from the drain then arrive as appends,
and the poll tick sorts them into place -- but only when one actually arrived.
Hashing cost tracks bytes, so a large file is minutes of nothing followed by a
single append; sorting per tick regardless would run a full std::sort, a
row-index rebuild and a model reset once a second for no reordering at all. The
tick also reports what is left on the shared-files label, so the count is
visible in the window rather than on a splash nobody can see past.

Hashing gets the whole of the bar's last band back as a result: it had
kScanBandEnd = 99 and its own band from there, so the longest phase of a first
run advanced the bar by one point and read as a hang.

CSplashScreen::SetLoopRunning() went with it. It existed so updates would stop
pumping the loop once the splash outlived OnInit, which it no longer does, and
without it m_pumpsLoop could never be false -- leaving an unreachable branch in
SetProgress().
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.

2 participants