github GitoxideLabs/gitoxide gix-date-v0.17.0
gix-date v0.17.0

7 hours ago

Bug Fixes

  • reject ambiguous bare numeric dates

    parse("20080214", None) silently returned epoch seconds in 1970 because
    any signed integer was accepted before the flexible date parser. Apply
    Git's 100000000 floor to bare timestamps so compact-date lookalikes,
    zero, and negative numbers do not silently become epoch seconds. Explicit
    @ timestamps and raw commit-header dates retain their existing behavior.
    Update the documented examples and their existing acceptance tests.

    Extend the existing Git baseline with six rejected bare numbers and three
    explicit raw timestamps. Generate fixed-date samples through
    GIT_AUTHOR_DATE and git var GIT_AUTHOR_IDENT: the previous expiry-date
    parser could fall back to approximate dates and conceal these errors.
    The regenerated archive preserves all 128 existing baseline samples.
    The regression failed on 20080214 before the parser change.

    Git reference: date.c::match_digit() reserves numbers below 100000000
    for date components; t/t0006-date.sh covers the threshold and explicit
    @0 +0000. Baselines were generated with Git 2.50.1 (Apple Git-155).

  • reject a timezone offset git would not read
    parse() took its offset from jiff, which reads up to ±25:59:59. Git's
    match_tz() in date.c reads the four digits as a clock time, so hours must
    be under 24 and minutes under 60, and +2400 is not a timezone to it at all —
    it falls back to the local one. Recorded from git 2.50.1:

    input git parse() before
    2022-01-01 12:00:00 +2359 +2359 +2359
    2022-01-01 12:00:00 +2400 local offset +2400
    2022-01-01 12:00:00 +2559 local offset +2559

    The accepted value could not be written back and read again, either:
    parse("2022-01-01 12:00:00 +2400") serializes to 1640952000 +2400, which
    parse() then rejects, since parse_raw() allows no offset past ±14:00.

    parse_header() is untouched, so commits carrying a wild offset — like
    1516956202 -3407 in edk2, the reproduction in #2091 — still read as before.

Changed (BREAKING)

  • raise MSRV to Rust 1.88

    The newly published dua-core 3.3 release used by linked-worktree removal
    requires Rust 1.88, so raise every workspace crate and the advertised badge
    together.

    Keep the MSRV checks buildable by selecting the latest sysinfo and rusqlite
    release lines that support Rust 1.88.

Commit Statistics

  • 12 commits contributed to the release over the course of 33 calendar days.
  • 34 days passed between releases.
  • 3 commits were understood as conventional.
  • 1 unique issue was worked on: #3001

Commit Details

view details
  • #3001
    • Reject ambiguous bare numeric dates (7c90c2b)
  • Uncategorized
    • Merge pull request #2847 from GitoxideLabs/gix-error-completion (6356013)
    • Merge pull request #3002 from GitoxideLabs/fix-8bit-date (2abc090)
    • Merge pull request #2994 from rawsun007/fix-date-offset-range (37149b8)
    • Review (ba936dc)
    • Reject a timezone offset git would not read (2f63256)
    • Merge pull request #2985 from youdie006/fix-short-time-offset-split (4ec7c08)
    • Review (a118bb4)
    • Accept a timezone offset after a short compact ISO8601 time (81d23b5)
    • Merge pull request #2949 from GitoxideLabs/error-conversion-review (a095334)
    • Raise MSRV to Rust 1.88 (4b42e0c)
    • Merge pull request #2933 from GitoxideLabs/report-august (b8914ff)

Don't miss a new gitoxide release

NewReleases is sending notifications on new releases.