this post was submitted on 29 Oct 2024
85 points (96.7% liked)

Technology

58970 readers
3806 users here now

This is a most excellent place for technology news and articles.


Our Rules


  1. Follow the lemmy.world rules.
  2. Only tech related content.
  3. Be excellent to each another!
  4. Mod approved content bots can post up to 10 articles per day.
  5. Threads asking for personal tech support may be deleted.
  6. Politics threads may be removed.
  7. No memes allowed as posts, OK to post as comments.
  8. Only approved bots from the list below, to ask if your bot can be added please contact us.
  9. Check for duplicates before posting, duplicates may be removed

Approved Bots


founded 1 year ago
MODERATORS
top 7 comments
sorted by: hot top controversial new old
[–] JonnyRobbie@lemmy.world 35 points 14 hours ago

Ahh - the joys of monorepo.

[–] brezel@piefed.social 28 points 14 hours ago (1 children)

The algorithm checked only the last 16 characters of the path, so package differences were not considered.

that is such a C thing to do.

[–] Corngood@lemmy.ml 23 points 13 hours ago (1 children)

It's not as stupid as this blog post makes it sound. This was a hashing function that was intentionally taking the end of the path as the most significant part. This just impacts the order of objects in a pack file, and the size of the compression window needed to compress it.

It's not actually mistaking one file for another, and their proposed solution is not better in all situations.

[–] brezel@piefed.social 7 points 12 hours ago

yeah i'm not saying it is stupid or something, but this kind of optimisation is found in C code very often, where people take the first|last N of something because it is most likely good enough :D

[–] drre@feddit.org 8 points 14 hours ago (1 children)

maybe I'm missing something but wouldn't this show up in a diff before pushing?

[–] breadsmasher@lemmy.world 10 points 13 hours ago (1 children)

The culprit: name-hash collisions. With files like changelog.md and changelog.json, Git found all kinds of differences with each commit even though there often were none, which gradually added 173GB of unnecessary bloat. However, the changelogs were in completely different packages. The algorithm checked only the last 16 characters of the path, so package differences were not considered.

[–] drre@feddit.org 8 points 12 hours ago

thanks for the reply, but i think i got that. from the linked article:

For example, if you changed repo/packages/foo/CHANGELOG.json, when git was getting ready to do the push, it was generating a diff against repo/packages/bar/CHANGELOG.json! This meant we were in many occasions just pushing the entire file again and again, which could be 10s of MBs per file in some cases, and you can imagine in a repo our size, how that would be a problem.

but wouldn't these erroneous diffs not show up in git diff? it seems that they were pushing (maybe automatically?)without inspecting the diffs first