docs: library comments say what the scanner and resolver do, not how they came to be (#6277)
release / govulncheck (push) Successful in 20s
release / web (push) Successful in 1m20s
release / go (push) Successful in 1m37s
release / integration (push) Successful in 5m15s
release / android (push) Successful in 5m26s
release / Build signed APK (releases and dev) (push) Successful in 5m45s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 16s
release / Verify release artifacts (tag releases only) (push) Skipped
release / govulncheck (push) Successful in 20s
release / web (push) Successful in 1m20s
release / go (push) Successful in 1m37s
release / integration (push) Successful in 5m15s
release / android (push) Successful in 5m26s
release / Build signed APK (releases and dev) (push) Successful in 5m45s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 16s
release / Verify release artifacts (tag releases only) (push) Skipped
Rewrites the internal/library comment blocks to rule 32. Task, milestone, decision and rule ids are gone; the incidents behind them are restated as the constraint they left (why a file is deleted before its row, why the missing mark is a mark, why duplicates block on duration). Counts and album names from one library are dropped from production comments; test comments keep the names their fixtures use. The tagReadVersion log keeps each version's before and after, without the measurements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,7 @@ func extractGenres(meta tag.Metadata, rs io.ReadSeeker) (genres []string, fellBa
|
||||
// dhowden/tag will have nothing either — not worth flagging.
|
||||
fellBack = meta.Genre() != ""
|
||||
case tag.VORBIS, tag.MP4:
|
||||
// dhowden/tag keeps only the last of a repeated field here (#2500):
|
||||
// dhowden/tag keeps only the last of a repeated field here:
|
||||
// see vorbisgenre.go and mp4genre.go.
|
||||
var values []string
|
||||
var err error
|
||||
@@ -84,9 +84,8 @@ func normaliseGenres(values []string) []string {
|
||||
// A value may be:
|
||||
// - plain text ("Alternative Rock") — passed through
|
||||
// - a bare ID3v1 index ("17") — resolved to "Rock". This is what the spec
|
||||
// says a numeric TCON means, and what ffmpeg does. It is why the operator's
|
||||
// library showed genres like "4017" and "526617": several numeric values
|
||||
// welded together by the old reader.
|
||||
// says a numeric TCON means, and what ffmpeg does. Several of them
|
||||
// welded together read as genres like "4017".
|
||||
// - ID3v2.3 refinement syntax ("(17)", "(51)(39)", "(17)Hard Rock", "(RX)")
|
||||
// — each parenthesised index becomes its own genre, and trailing text
|
||||
// becomes one more.
|
||||
@@ -134,7 +133,8 @@ func normaliseGenreValue(v string) []string {
|
||||
}
|
||||
if n, err := strconv.Atoi(v); err == nil {
|
||||
if name, ok := id3v1GenreName(n); ok {
|
||||
// Canonical table name, deliberately NOT re-cased — see id3v1Genres.
|
||||
// Canonical table name, deliberately NOT re-cased — see
|
||||
// id3v1Genres.
|
||||
return append(out, name)
|
||||
}
|
||||
return out
|
||||
@@ -143,8 +143,7 @@ func normaliseGenreValue(v string) []string {
|
||||
}
|
||||
|
||||
// genreAcronyms are tokens that belong in caps. Tag editors that title-case the
|
||||
// whole genre field turn "EDM" into "Edm" and "UK Garage" into "Uk Garage", and
|
||||
// the operator's library carries all of these (#2468).
|
||||
// whole genre field turn "EDM" into "Edm" and "UK Garage" into "Uk Garage".
|
||||
//
|
||||
// Matched case-INSENSITIVELY, so "edm", "Edm" and "EDM" all land on "EDM". That
|
||||
// is a deliberate, narrow exception to the project's rule that genre case is
|
||||
@@ -169,8 +168,8 @@ var genreAcronyms = map[string]string{
|
||||
// how "Children's Music" became "Children'S Music".
|
||||
//
|
||||
// Deliberately a fixed list rather than "lowercase whatever follows an
|
||||
// apostrophe": that broader rule would break "O'Brien" and "D'Angelo", which are
|
||||
// correctly capitalised after the apostrophe.
|
||||
// apostrophe": that broader rule would break "O'Brien" and "D'Angelo", which
|
||||
// are correctly capitalised after the apostrophe.
|
||||
var contractionSuffixes = map[string]bool{
|
||||
"s": true, "t": true, "re": true, "ll": true, "ve": true, "d": true, "m": true,
|
||||
}
|
||||
@@ -178,7 +177,7 @@ var contractionSuffixes = map[string]bool{
|
||||
// trueUpCasing repairs casing damage done by tag editors that title-case the
|
||||
// genre field. It only ever changes case, never the letters — so it cannot
|
||||
// silently turn one genre into a different one, which is what separates it from
|
||||
// the label-remapping idea #2468 rejected.
|
||||
// remapping labels.
|
||||
func trueUpCasing(s string) string {
|
||||
if s == "" {
|
||||
return s
|
||||
|
||||
Reference in New Issue
Block a user