NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #1211 most downloaded on crates.io
A crate of the gitoxide project parsing dates the way git does
Last release 13 days ago
25 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 45 of 45 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
46 releases · first in 2023
One column per quarter.
gix remote ref-map --show-unmapped-remote-refs. That way it's more obvious to see what was filtered out by ref-specs.
<csr-id-e973dfeaf17ca63385496202e9fdcdd912e20f42/> gix remote ref-map --show-unmapped-remote-refs.
That way it's more obvious to see what was filtered out by ref-specs.
It's also great to validate that server-side filtering via ref-prefix will not send refs that are referred to by symbolic refs that are not filtered out. That should be fine as it's all about objects, it's just something to deal with as we may have to deal with symbolic refs that aren't in the set of refs the server sent to us.
<csr-id-b1edb9e3537df86669714f03666f4a88e0ac3709/> diff algorithm is controlled by git configuration diff.algorithm
<csr-id-20259da4ddf9fabfb2d2bd4e2274c0ed42bdb0e5/> ein t hours allows to specify the amount of worker threads.
<csr-id-3a053284cfefe27873dcc5b4f74d63a560bb5d41/> collect stderr and print it afterwards to avoid intersection with line progress.
Previously it would happen that stderr would be printed directly and mix
with the line progress (as in -v) which also prints to stderr.
Now errors are collected and output at the end once the line renderer was already shutdown.
lock_mode from all methods dealing with reference edits.
It is now read from core.filesRefLockTimeout accordingly.gix remote --url in favor of determining the intention similar to git fetch<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
443a75a)gix remote ref-map --show-unmapped-remote-refs. (e973dfe)diff.algorithm (30d32e7)c8ef759)stderr and print it afterwards to avoid intersection with line progress. (3a05328)clone and print once entire clone is done (9a476df)gix clone (23a5e8b)63947ae)f5e2eeb)core.checkState (8b2aba1)de13c66)gix progress (0e9bd41)d10a82e)init.defaultBranch - now used by custom initialization. (4d6d7bb)gix fetch (c47dcc6)d034882)gix remote --url in favor of determining the intention similar to git fetch (92bbe33)--url for arbitrary urls when fetching (8c7351c)gix fetch (5b72d27)fd18320)lock_mode from all methods dealing with reference edits. (3a0fb1b)7076891)3c188b2)eade88f)6abd5a4)5c0d0ab)65e6496)b42b08a)317e02a)gix progress show (92e082a)ein t hours allows to specify the amount of worker threads. (20259da)ba17db0)index.version for when we can write V4 indices. (da96d34)ad44982)1ec27f8)extension.worktreeConfig (fe1e646)c4e6849)init.templateDir to gix progress (9fab050)ea2136b)def53b3)diff.algorithm (b1edb9e)fa27570)f53f942)git-diff for a 2x speedup when calculating line changes (296f3b6)gix progress records (b05a2e7)de4fe06)6225f35)da5f63c)c8d0345)8c24386)67f2247)01ab5ca)09d767a)507dc7e)1a1e862)clone. variables (8b804a3)702a161)53acf25)f47c891)3c49400)c5c0ac5)8ef3fcb)8dadd70)b862fc5)25a7726)
</details>ein tool hours -s was split into -f|--file-stats and -l|line-stats. That way more information is generated at increasingly high costs.
ein tool hours -s was split into -f|--file-stats and -l|line-stats.
That way more information is generated at increasingly high costs.ein tool hours --stat to collect additional statistics per author.
Note that these are expensive and unconditionally use threads to speed
up these computations.ein tool hours -b ignores bots.
For now it only considers bots with names containing [bot].<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
11851f3)4720666)2237495)f4d8198)ref-map sub-command. (94c2b78)gix commands will now load the git installation configuration (23d2dec)7abc0a3)gix credential (642e21f)26489d1)cf7182e)ein tool hours -b ignores bots. (5d0332f)3773b92)gix index from-tree (2fbd3df)535e967)5c05198)bc64b96)56ba481)791dd66)
</details>3 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
4 commits contributed to the release over the course of 27 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6428edc)155ff6d)9402adc)f7d4f33)
</details>reduce smallvec dep from git-date
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
10c58bb)344ef84)34095ad)df23312)0234460)ab2fee1)2cb17b2)e10d5f6)3675a8d)4c77f81)adb8328)
</details>4 commits contributed to the release over the course of 2 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
53f880c)4d5ba23)2c3a08e)gix-error (2e2a126)
</details>9 commits contributed to the release over the course of 32 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
f9fbcba)a1ad31b)63b8419)0396152)444a92b)package.include patterns more specific so they don't match ignored files (c2c917f)29c275e)b1102c2)98bae84)
</details>4 commits contributed to the release.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c389a2c)6183fd0)6bdb331)f7277f3)
</details>gix remote refs to list all remote references of a suitable remote. This takes into account either a named remote, or the remote associated with the c
<csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/>
-c/--config in gixgix remote refs to list all remote references of a suitable remote.
This takes into account either a named remote, or the remote associated
with the current branch, or the default remote it could deduce or obtain
from the configuration.gix free remote ref-list in favor of gix remote refs
The functionality is the same, but the latter is built on top of a
repository which is slightly less flexible, but preferable over
maintaining a non-repo version.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
gix config. (19c1746)gix free remote ref-list in favor of gix remote refs (dda9957)-c/--config in gix (45a30f0)e0be6e9)df3cf18)gix remote refs to list all remote references of a suitable remote. (5d6d5ca)db4df25)gix remote refs without any implementation. (f8f1249)39d585d)bb6813a)e2ee3de)31c2351)b1c40b0)f7f136d)bd5f3e8)
</details><csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ecf90fc)9327b73)
</details>Invert behaviour to open::Options::strict_config(), with lenient being the default. This means API users will get libgit2 behaviour but commands like
open::Options::strict_config(), with lenient being the default.
This means API users will get libgit2 behaviour but commands like gix can
change options to emulate git behaviour.--cat-file flag for gix rev parse to cat instead of resolving.gix rev previous-branches subcommandein tools to ein tool for as it's more intuitivegix rev resolve --explain<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
dbaff13)gix-config can be lenient. (6a9c58f)open::Options::strict_config(), with lenient being the default. (0235111)c4bf958)805f432)ein tools to ein tool for as it's more intuitive (edf73dd)a938986)a6d79e3)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)47724c0)4e7b343)e9fcb70)
</details>parse() now supports 'now', 'today' and 'yesterday'.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d66ac10)a4b5ae5)parse() now supports 'now', 'today' and 'yesterday'. (fdca563)fca0fc5)8bceefb)7ce3c55)e8612b5)gix-error (a304f13)f7d0975)
</details>Adjustments due to breaking changes in git_path (`4420ae9`)
gix config with section and sub-section filtering.gix config lists all entries of all configuration files git considers.
Filters allow to narrow down the output.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 3 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
0c597fe)--show-ignore-patterns to gix repo exclude query (09f904b)exclude query (9cb8385)7d98b21)cb56f12)3ff991d)gix repo exclude query (a331314)50ff7aa)gix restructuring (59b95c9)gix config with section and sub-section filtering. (eda39ec)gix config lists all entries of all configuration files git considers. (d99453e)a437abe)8e5b796)5cf08ce)0ed65da)38a8350)72876f1)ac7d99a)c9c78e8)8967fcd)f99c3b2)83585bd)1cdecbc)141c5f1)f4e1810)faaf791)git_path (4420ae9)afecb63)48b3f4a)085e76b)0700b09)89ea12b)0e9df36)229dc91)41ea8ba)05eb340)7cb1972)251b6df)98da8ba)056e8d2)fdec111)4086335)e90d3fd)
</details>gix-error in gix-date
This will make for easier introspection for users of these errors.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
562e684)ae23762)exn to most pressing needs of gitoxide (abedade)gix-error in gix-date (5ab19a7)c663b3f)
</details>4 commits contributed to the release over the course of 5 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
7be8f90)d914d95)4edc5dd)211b4fb)
</details>preserve validation classifications after error conversion
ValidationError marker from reference, tag, submodule,gix::Error, including optional reference lookups.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.
gix repo commit describe
It supports typical but basic flags mostly similar to the ones in git.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
TimeBuf
It's a breaking change as the std::io::Write implementation was removed
from TimeBuf, which is only usable in Time::to_str() now.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
TimeBuf (f9051e7)115e208)76376ef)ef32312)d6c5b9d)
</details>Add comprehensive data parsing support Now it should be mostly en-par with Git.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
21fecdf)3cf78c3)fad8219)7dfb2da)
</details>Adapt to changes in gix-features which change Send + Sync to Send + Clone. This happens to allow non-sync implementations (i.e. thread-local), along w
<csr-id-4d2d433e7e98ac42db858688edac06e68ee4d10d/>
Adapt to changes in gix-features which change Send + Sync to Send + Clone. This happens to allow non-sync implementations (i.e. thread-local), along with Sync ones
which usually are Clone too as they are passed by immutable reference (which is Clone + Copy).
Option<impl Progress> in favor of impl ProgressArc around should_interrupt flagindex::verify::Mode::* variants
The hash is repository defined and not hard-codedgix mailmap verify commandein find --debug to learn why it is slow<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
6e0cd6d)bcde935)89428b2)c4c5678)d2bea27)Option<impl Progress> in favor of impl Progress (bf04644)Arc around should_interrupt flag (d851bed)index::verify::Mode::* variants (c2679a0)d04dc01)1ac2c21)34ea001)9277cf8)239e7b2)8bf585d)3fc1622)a8fa53a)07e9081)8cbe85d)89b628a)6c10e09)21c2dd5)e6a3d43)613483b)73a7393)29fb0c8)0e55fbb)a39d476)5388d80)5494fb3)f23b8d2)e90c123)25da30f)0090961)7cf3545)652a0ac)90c6c5a)ein find --debug to learn why it is slow (70109be)aa51e05)ad3c803)025f157)866530a)d6a72e7)338521b)7d2e20c)b0f7328)
</details>Time::to_zoned() to unleash the power of jiff::Zoned.Time::format_or_raw() to Time::format_or_unix()
As it turns out, raw could also panic, but unix cannot.Time::to_zoned() fallible and add Time::format_or_raw().
After all, the timezone can be invalid, which makes the conversion (and formatting) fail.
The format_or_raw() method brings back an infallible version.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
82ff92f)c400dd3)Time::format_or_raw() to Time::format_or_unix() (e61832e)3087b76)Time::to_zoned() fallible and add Time::format_or_raw(). (fda4e40)3e81366)Time::to_zoned() to unleash the power of jiff::Zoned. (2184037)fbf9c39)
</details>3 commits contributed to the release over the course of 1 calendar day.
<csr-id-6f469a6fea59c88e6c69a5f94b0bc8a5977cb75b/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
bdcce5f)doc_auto_cfg feature to fix docs.rs documentation. (6f469a6)3313233)
</details>7 commits contributed to the release over the course of 72 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
89fb308)4da2927)b188a7d)6cc8464)9365cc3)838ff95)651f9fa)
</details>add parse_raw() When parsing arbitrary date inputs from the user with gix_date::parse(), the non-strict gix_date::parse_header() would accept a variet
<csr-id-9c28f3363c648e0fed88f5d63b2fac3aa4a545cf/> add parse_raw() When parsing arbitrary date inputs from the user with gix_date::parse(), the non-strict gix_date::parse_header() would accept a variety of inputs that do not match any of the known/accepted formats, but would nonetheless be accepted as being "close enough" to a raw date as found in git commit headers.
The new parse_raw() function takes a stricter approach to parsing raw dates as found in commit headers, only accepting inputs that unambiguously match a valid raw date.
The gix_date::parse() function is updated to use the new parse_raw() function instead of the less-strict parse_header(). This has the effect of making gix_date::parse() avoid mis-parsing various inputs that would otherwise have been accepted by gix_date::parse_header(). For example "28 Jan 2005".
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
don't parse any number as timestamp in parse_header()
parse_header()<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5a919c4)65037b5)dab97f7)a9a8ea1)f8d7c0a)151e3a5)c3f06ae)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
safely split commands and ignore shebang options
safely split commands and ignore shebang options
Command preparation previously rejected every first word containing an equals
sign, so valid environment prefixes required a shell while executable names
such as tool=name could be misinterpreted as assignment-only commands. Its UTF-8
conversion also made the direct-versus-shell decision depend on encoding.
Git for Windows uses only the interpreter path from a shebang. Parsing the
suffix as shell words invented incompatible semantics and could let executable
contents supply additional interpreter options.
This provides two major fixes:
Reuse the parser in gix-diff and cover its full byte-input domain with focused
unit tests and a dedicated fuzz target.
Store the required command in Outcome::command, reserve Outcome::args for
actual arguments, and reject command lines that produce no executable. Command
preparation can now consume the parser result directly without another emptiness
check or first-element extraction.
The command-line parser is consumed primarily by process-launch code, yet it
returned byte strings that every caller had to convert before constructing
std::process::Command.
Return OsString for the required command and its arguments so callers can use
them directly while preserving arbitrary Unix bytes. Reject values that the host
cannot represent instead of risking a conversion panic; environment assignments
remain byte-oriented for parsing.
Manual argument splitting moved leading assignments into the process environment
and spawned the parsed program directly. On Windows, Rust's lookup can fall
outside the assigned PATH and cannot launch extensionless scripts through their
shebang.
Keep assignment-prefixed commands on the shell path on Windows while retaining
manual splitting for other commands and platforms.
invoke existing absolute paths directly
Shell detection treated metacharacters in every command as evidence that a
shell was needed. This caused resolved executable paths, notably Git for Windows
programs under Program Files, to be parsed as command text and split at spaces.
Recognize existing absolute files as already-resolved programs and bypass shell
detection for them.
Requiring an absolute path avoids promoting a relative path that happens to name
a file in the repository to a program and accidentally executing it.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e104545)5f7f805)631f07a)
</details>This release pins beta versions of clap to avoid it to automatically fetch the latest one during installation.
This release pins beta versions of clap to avoid it to automatically fetch the latest one
during installation.
This is made possible due to clap itself pinning its dependency
to the clap-derive crate.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
Time::sign field as it's not needed anymore to round-trip.
Round-tripping is now handled in the gix-actor crate using the SignatureRef
type.<csr-id-57366d3ebd622af8927bb0e199ab8a3c0eafee99/> turn SignatureRef::time field into &str.
We also add a gix_date::Time::to_str() method, along with related utilities,
to be able to turn a parsed time back into a raw buffer conveniently.
Further, remove Time::to_bstring() in favor of a Display implementation.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
db0b095)0bf84db)3b1bef7)c3c6504)6f009d7)Time::sign field as it's not needed anymore to round-trip. (d559fa7)gix-date and gix-actor (afdf1a5)SignatureRef::time field into &str. (57366d3)70097c0)37367d7)46227e6)06bf1e1)b5e9059)68e6b2e)420e730)
</details>10 commits contributed to the release.
<csr-id-3ae99a42f51cd2d6c55c6abbd1ead86bf8bf2e1f/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b41312b)38dff41)c8c42b4)generate_git_date_baseline archive (2dbd7ba)e5e2c6f)16a248b)8e96ed3)b310c16)3ae99a4)d22937f)
</details>add support for 'any' unit, when parsing ago. Similar to Git, any unit is allowed and will default to seconds, like 60 flurps ago will mean a minute i
<csr-id-34d2fce57e2836f758387b6cb54ee1f11bebd473/> add support for 'any' unit, when parsing <count> <unit> ago.
Similar to Git, any unit is allowed and will default to seconds, like 60 flurps ago
will mean a minute in the past.
<csr-id-c95135b0d0168393f4ccca9863ade7efac8b3379/> Parse relative months and years
This extends gix_date::parse::relative::span to recognize times
with "months" and "years", as in "3 months ago" and "2 years ago".
Those units are supported by Git.
The actual change here to the parsing code is very simple, because it is directly facilitated by #1474.
The units "seconds", "minutes", "hours", "days", and "weeks" continue to be recognized (as before). Relative times like "1 year, 2 months ago" remain unrecognized.
For background, see 43b6c06 (#498), c5c6bf6, https://github.com/GitoxideLabs/gitoxide/pull/1474#discussion_r1694769988, and https://github.com/GitoxideLabs/gitoxide/issues/1696#issuecomment-2495526654.
Note that this specific change does not itself fix issue #1696, which applies to the intepretation of "days" and "weeks", and now also applies in the same way to the interpretation of "months" and "years". (It continues not to apply to the interpretation of "seconds", "minutes", and "hours".)
The tests are updated to cover "months" and "years", as well as to exercise a wider range of relative times, including showing which units (e.g. "days") are affected by #1696. A few sub-cases, of those adjusted or added here, test strings from a related test in Git, to allow comparison. But most are not related to cases there.
As before, the tests pass on CI, or when the time zone is otherwise UTC, or with local time zones that never have DST adjustments.
The sub-cases are reordered to be monotone increasing in the
magnitude of the relative intervals tested (and thus monotone
decreasing in the associated absolute timestamps), and the original
input is kept zipped into the actual and expected arrays being
compared. This way, if the assertion fails (such as due to #1696),
it is clear and readable which sub-cases failed and exactly how, as
well as what all the sub-cases are and what each sub-case tests.
Reordering the sub-cases and preserving the inputs they parse in this way avoids the disadvantages of #1697 while keeping, and expanding on, its benefits.
Failure, where it occurs, now looks like:
--- STDERR: gix-date::date time::parse::relative::various ---
thread 'time::parse::relative::various' panicked at gix-date\tests\time\parse.rs:252:9:
assertion failed: (left == right): relative times differ
Diff < left / right > : [ ( "5 seconds ago", 2024-11-24T23:51:49Z, ), ( "5 minutes ago", 2024-11-24T23:46:54Z, ), ( "5 hours ago", 2024-11-24T18:51:54Z, ), ( "5 days ago", 2024-11-19T23:51:54Z, ), ( "3 weeks ago", 2024-11-03T23:51:54Z, ), ( "21 days ago", 2024-11-03T23:51:54Z, ), ( "504 hours ago", 2024-11-03T23:51:54Z, ), ( "30240 minutes ago", 2024-11-03T23:51:54Z, ), ( "2 months ago", < 2024-09-24T23:51:54Z,
2024-09-24T22:51:54Z,
), ( "1460 hours ago", 2024-09-25T03:51:54Z, ), ( "87600 minutes ago", 2024-09-25T03:51:54Z, ), ( "14 weeks ago", < 2024-08-18T23:51:54Z,
2024-08-18T22:51:54Z,
), ( "98 days ago", < 2024-08-18T23:51:54Z,
2024-08-18T22:51:54Z,
), ( "2352 hours ago", 2024-08-18T23:51:54Z, ), ( "141120 minutes ago", 2024-08-18T23:51:54Z, ), ( "5 months ago", < 2024-06-24T23:51:54Z,
2024-06-24T22:51:54Z,
), ( "3650 hours ago", 2024-06-25T21:51:54Z, ), ( "219000 minutes ago", 2024-06-25T21:51:54Z, ), ( "26 weeks ago", < 2024-05-26T23:51:54Z,
2024-05-26T22:51:54Z,
), ( "182 days ago", < 2024-05-26T23:51:54Z,
2024-05-26T22:51:54Z,
), ( "4368 hours ago", 2024-05-26T23:51:54Z, ), ( "262080 minutes ago", 2024-05-26T23:51:54Z, ), ( "8 months ago", < 2024-03-24T23:51:54Z,
2024-03-24T22:51:54Z,
), ( "5840 hours ago", 2024-03-26T15:51:54Z, ), ( "350400 minutes ago", 2024-03-26T15:51:54Z, ), ( "38 weeks ago", 2024-03-03T23:51:54Z, ), ( "266 days ago", 2024-03-03T23:51:54Z, ), ( "6384 hours ago", 2024-03-03T23:51:54Z, ), ( "383040 minutes ago", 2024-03-03T23:51:54Z, ), ( "11 months ago", 2023-12-24T23:51:54Z, ), ( "8030 hours ago", 2023-12-26T09:51:54Z, ), ( "481800 minutes ago", 2023-12-26T09:51:54Z, ), ( "14 months ago", < 2023-09-24T23:51:54Z,
2023-09-24T22:51:54Z,
), ( "21 months ago", 2023-02-24T23:51:54Z, ), ( "2 years ago", 2022-11-24T23:51:54Z, ), ( "20 years ago", 2004-11-24T23:51:54Z, ), ( "630720000 seconds ago", 2004-11-29T23:51:54Z, ), ]
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1ba571)7ea8582)b34d14e)<count> <unit> ago. (34d2fce)856b385)c95135b)e8b3b41)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8ce4912)bc9d994)438ee47)ac17b62)cargo fmt (5d51bd1)time::parse::relative::various fail more often (04c82ca)7a40648)0f0e4fe)db5c9cf)
</details>add CustomFormat::new() to allow construction.
<csr-id-64ff0a77062d35add1a2dd422bb61075647d1a36/>
CustomFormat::new() to allow construction.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3f7e8ee)bcdce6e)4910912)CustomFormat::new() to allow construction. (4b20bd1)795962b)64ff0a7)72daa46)cdac4a9)649f588)beba720)37ba461)2e0ce50)f992fb7)ec69c88)
</details>A first usable version of gix to make using gitoxide from your applications so much easier. It serves as a one-stop shop for application developers wi
A first usable version of gix to make using gitoxide from your applications so much easier. It serves as a one-stop shop for application developers without sacrificing performance by default while making common use-cases more convenient.
gix as hub crate for application development with focus on usability without sacrificing any knob to tune performance.async for gix-packetline, gix-transport and gix-protocol for fully async git clients, along with the light-async feature toggle to build a gix pack-receive with an async client instead of a blocking one.gix pack-create with the -s/--statistics flag to have data indicating the cost of the operation. Currently it's doing a lot of work that has to be avoided in order to be useable in production and the numbers underline that. Future iterations will cause key metrics to go down.gix-tempfile crategix-lock crategix-ref crate with complete loose-ref, packed-ref and transaction support.git.gix-object parsing is a few percent faster thanks a reworked error handling for objects. By default, error collection is disabled entirely making the error case zero-sized. If needed, verbose and stacked errors can be turned on using a feature toggle for applications who expect repositories with malformed objects and need detailed diagnostics.<csr-read-only-do-not-edit/>
<csr-id-28ac6572722f7ea31795dc0417521c70bcb6ec8f/> <csr-id-1b9c30dfb43373a76f3b65ae90a74dc99a892821/> <csr-id-5a88413a2d3acb5c4ba5e49e47a42f0182d9e9fb/>
This is a breaking release as the time is gone and it's API isn't available publicly anymore.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
d19af16)0f25841)3604a3b)12313f2)9d5d8a6)5871fb1)9fd1090)time to jiff (28ac657)1b9c30d)time a private dependency of gix-date (5a88413)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
c1d7c02)gix-mailmap (14c3396)1dfa90d)tar files (dcab79a)9fa1054)9c65d98)ea12fc2)68cbea8)
</details>assure writing invalid dates doesn't panic.
<csr-id-8d610ab8de7d3f62116632de6975f00c845dc842/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
b050327)52c3bbd)3e5c974)f8ce3d0)
</details>This is a maintenance release.
This is a maintenance release.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
45b4470)f2e111f)face359)ae86a6a)
</details>1 commit contributed to the release over the course of 8 calendar days.
<csr-read-only-do-not-edit/>
<csr-id-3bd09ef120945a9669321ea856db4079a5dab930/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
972241f)8c492d7)rust-version manifest field back to 1.65. (3bd09ef)
</details>1 commit contributed to the release over the course of 1 calendar day.
<csr-read-only-do-not-edit/>
<csr-id-aea89c3ad52f1a800abb620e9a4701bdf904ff7d/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
e1aae19)e78a92b)4454c9d)aea89c3)1691ba6)7549559)35439de)
</details>42 commits contributed to the release over the course of 95 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
55d386a)d3dcbe5)51c7abc)5a0d93e)bb3224c)d3fb537)unsigned_abs() for a variant that can't panic. (045dd9d)c0e72fb)b65a80b)
</details>use dyn trait where possible. This reduces compile time due to avoiding duplication.
dyn trait where possible.
This reduces compile time due to avoiding duplication.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
8bd0456)375db06)dynification (f658fcc)dyn trait where possible. (072ee32)b7560a2)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 1 time to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
3 commits contributed to the release over the course of 4 calendar days.
<csr-id-229bd4899213f749a7cc124aa2b82a1368fba40f/>
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
30b2761)f23ea88)229bd48)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
90ec770)4604f83)gix-submodule (f3c4311)6b4a303)ef8ccd9)time crate explicitly in Cargo.toml to latest version (e145a74)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
5cb3589)2fc66b5)9064ea3)
</details>32 commits contributed to the release over the course of 128 calendar days.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 3 times to make code idiomatic.
u64 which
is used in git to i64 which is used in libgit2.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
27e8c18)00f96fb)b407461)gix-date (fba45c6)09fbfd2)
</details>These are created to account for breaking changes within the dependency graph of gitoxide crates. Due to some blunders in the past the version on crat…
Maintenance release without any new features.
These are created to account for breaking changes within the dependency graph of
gitoxide crates. Due to some blunders in the past the version on crates.io
could not be installed anymore.
This was eventually fixed with new minor releases across the ecosystem.
Finally, yet another breaking change due to the introduction of the gix-hash
crate to break a dependency cycle between gix-object and gix-features caused
yet another maintenance release.
<csr-id-bcad5c22049d56a25ef69d6c7a3344e78f9a1d4d/>
<csr-id-4bc0ae1eb313ad83c793f397af9ca791b9b171e5/> Represent time as 64 bit integer. That way, dates beyond 2038 are supported.
Further, we rename Time::seconds_since_unix_epoch to seconds, and remove seconds()
as there now is a new type, SecondsSinceUnixEpoch. In the same vein, we rename
Time::offset_in_seconds to offset as it now has at type OffsetInSeconds.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
ea9f942)18b0a37)just fmt (871dd0b)aa16c8c)4f635fc)fe59956)clippy::redundant-closure-for-method-calls lint (bcad5c2)8d2e6a9)4bc0ae1)
</details>A maintenance release without user-facing changes.
A maintenance release without user-facing changes.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9a9fa96)8f15cec)3ef5c90)9375cd7)facaaf6)
</details>Maintenance release without any new features.
Maintenance release without any new features.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9cb09b2)5c7b52d)2571113)aacf0f0)ca5b801)
</details><csr-id-b83ee366a3c65c717beb587ad809268f1c54b8ad/> Rename serde1 cargo feature to serde and use the weak-deps cargo capability.
With it it's possible to not automatically declare all optional dependencies externally visible
features, and thus re-use feature names that oterwise are also a crate name.
Previously I thought that serde1 is for future-proofing and supporting multiple serde versions
at the same time. However, it's most definitely a burden I wouldn't want anyway, so using
serde seems to be the way to go into the future.
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
serde1 cargo feature to serde and use the weak-deps cargo capability. (b83ee36)8dbd0a6)7f06458)cdef398)19338d9)
</details>1 commit contributed to the release over the course of 1 calendar day.
<csr-read-only-do-not-edit/>
bstr v1.3, use *.as_bytes() instead of .as_ref().
as_ref() relies on a known target type which isn't always present. However, once
there is only one implementation, that's no problem, but when that changes compilation
fails due to ambiguity.<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
9604783)bstr v1.3, use *.as_bytes() instead of .as_ref(). (135d317)
</details>upgrade edition to 2021 in most crates. MSRV for this is 1.56, and we are now at 1.60 so should be compatible. This isn't more than a patch release as
<csr-id-41fc2bb20e6a926ffc3638c0fac21d733fdc2e3c/> <csr-id-f7f136dbe4f86e7dee1d54835c420ec07c96cd78/> <csr-id-533e887e80c5f7ede8392884562e1c5ba56fb9a8/>
<csr-id-3d8fa8fef9800b1576beab8a5bc39b821157a5ed/> upgrade edition to 2021 in most crates. MSRV for this is 1.56, and we are now at 1.60 so should be compatible. This isn't more than a patch release as it should break nobody who is adhering to the MSRV, but let's be careful and mark it breaking.
Note that git-features and git-pack are still on edition 2018
as they make use of a workaround to support (safe) mutable access
to non-overlapping entries in a slice which doesn't work anymore
in edition 2021.
bstr to 1.0.1parse(…, Option<time>) as parameter.<csr-id-fe04934d783e4c53a79fae2e0d3b0c5802ea1809/> Adds fuzzer for date parser
<csr-id-f5c9aa827e3b9ffb82a52ad7f840c58aa0d654ed/> return the time that failed to parse in the error
<csr-id-4066ac7367d8e870522746429513fb7a357a2cc6/> Support git default date format
This is the format output by default by git log or when using
--pretty=%ad.
The new git_date::time::format::GIT_DEFAULT format description may be used to output date strings in this format. It is also now used by git_date::parse() to accept date strings that may be in this format.
<csr-id-8094351fe547a0f6756b0ed29dc87a0e6b9ceec1/> Format git-style RFC 2822 date strings Git outputs the day-of-month field as a non-padded number whereas strict RFC 2822 date strings are supposed to use a zero-padded two-digit number.
The new git_date::time::format::GIT_RFC2822 format description allows Time to be formatted in git's RFC 2822 style. (Whereas the existing RFC2822 format description produces a strict RFC 2822 date string).
<csr-id-034c8dc4437c06dc8af702fbe9b86ec903c73a18/> bump version to 1.0 to prevent accidental inclusions downstream For some reason, cargo considers different patch releases breaking, so creating a new patch can break installation of gitoxide entirely.
<csr-id-b1c40b0364ef092cd52d03b34f491b254816b18d/> use docsrs feature in code to show what is feature-gated automatically on docs.rs
<csr-id-517677147f1c17304c62cf97a1dd09f232ebf5db/> pass --cfg docsrs when compiling for https://docs.rs
<csr-id-8f7f9ce2b06ec884220b8cd5010b3df04b1ff0bc/> Raw and Unix formats.
<csr-id-4b0c2198f9d5b28584c717123c7cfb1b27724605/> Add ISO-strict format
<csr-id-c76fde7de278b49ded13b655d5345e4eb8c1b134/> initialize Time from now_utc and now_local
Localtime support depends on some other factors now, but that
will only get better over time.
We might have to document unsound_local_time at some point.
<csr-id-aeda76ed500d2edba62747d667227f2664edd267/> Time::is_set() to see if the time is more than just the default.
<csr-id-cfb6a726ddb763f7c22688f8ef309e719c2dfce4/> Add Time type.
It was originally from the git-actor crate.
<csr-id-dff0aa0be600b9cd9518184fefa9b3c8fdb510f2/> <csr-id-39655f5f6fa39a55c4420f672e866c483f9b85ed/> <csr-id-f4ea59db0a429801ab40b1294da4bffd9e0f80b3/> <csr-id-be603f593055309b74685bc2aebb8e35e6de2d59/>
<csr-id-786f6dc5c1f765b9598cd55ca8fb1714ad177e46/> prevent panics from dates which cannot be represented by the time crate
<csr-id-3d6c81000559df91b17834ec5e9830b085277af8/> panic in parse_raw() (as found by fuzzer)
<csr-id-046af94f005a6e095f0d3616c0b57ef1f556f734/> Stricter raw date parsing The raw date parser (git_date::parse::function::parse_raw()) accepted some inputs that it should not have. Specifically, it would accept:
<csr-read-only-do-not-edit/>
<csr-read-only-do-not-edit/>
Clippy helped 4 times to make code idiomatic.
<csr-read-only-do-not-edit/>
<details><summary>view details</summary>
bstr to 1.0.1 (99905ba)caa7a1b)rust-version to 1.64 (55066ce)time crate (cb31cd1)time crate (786f6dc)6ccc88a)c9275b9)git-testtools to gix-testtools (b65c33d)git-pack to gix-pack (1ee81ad)git-odb to gix-odb (476e2ad)git-index to gix-index (86db5e0)git-diff to gix-diff (49a163e)git-commitgraph to gix-commitgraph (f1dd0a3)git-mailmap to gix-mailmap (2e28c56)git-discover to gix-discover (53adfe1)git-chunk to gix-chunk (59194e3)git-bitmap to gix-bitmap (75f2a07)git-protocol to gix-protocol (823795a)git-refspec to gix-refspec (c958802)git-revision to gix-revision (ee0ee84)git-transport to gix-transport (b2ccf71)git-credentials to gix-credentials (6b18abc)git-prompt to gix-prompt (6a4654e)git-command to gix-command (d26b8e0)git-packetline to gix-packetline (5cbd22c)git-worktree to gix-worktree (73a1282)git-worktree to gix-worktree (108bb1a)git-url to gix-url (b50817a)git-date to gix-date (9a79ff2)git-date to gix-date (2b0a966)git-attributes to gix-attributes (4a8b3b8)git-quote to gix-quote (648025b)git-config to gix-config (3a861c8)git-ref to gix-ref (1f5f695)git-lock to gix-lock (2028e78)git-tempfile to gix-tempfile (b6cc3eb)git-object to gix-object (fc86a1e)git-actor to gix-actor (4dc9b44)git-validate to gix-validate (5e40ad0)git-hash to gix-hash (4a9d025)git-features to gix-features (e2dd68a)git-glob to gix-glob (35b2a3a)git-sec to gix-sec (eabbb92)git-path to gix-path (d3bbcfc)git-config-value to gix-config-value (622b3e1)c196d20)7c846d2)1e544e8)39ed9ed)bac57dd)7bba270)56f5593)parse_raw() (as found by fuzzer) (3d6c810)96a56a9)a52c54e)fe04934)hex_to_id() (6fa950d)1fea18f)f5c9aa8)5b5b380)93bef97)b93f0c4)b34c9fe)0e3d0a5)d679f5b)time::format::GIT_DEFAULT -> *::DEFAULT and *::DEFAULT -> *::GITOXIDE. (41fc2bb)c65ce7e)046af94)a910d9e)26597b9)4066ac7)8094351)dff0aa0)e6b9906)7114bbb)c57bdde)083909b)6e40433)b649965)39655f5)git-testtools (4eb842c)f50b9f5)75d6e88)f4e8051)f4ea59d)9f95f7f)be0bbf5)be603f5)bcd9654)b2c301e)e4648f8)0e4462d)3d8fa8f)25a7726)29a043b)fd14489)83a3832)c5c6bf6)956613f)1026b7c)79d82d4)70fe59f)535e967)1f6e5ab)parse(…, Option<time>) as parameter. (c24ea67)75591fb)590fcc9)c585c9b)eb304ea)0e231eb)5793465)90008aa)bc64b96)1eac4de)parse is pure function. (9ad1a5f)cce7616)parse() returns Result. (206f392)5c3b733)parse returns Result. (67c8c6a)6c40ac1)b747a60)3e6e0f9)95b4902)43b6c06)cfa1440)9245083)1fb931a)23cb58f)034c8dc)4974eca)bd02b39)51cd9ce)e2ee3de)31c2351)b1c40b0)f7f136d)5176771)533e887)c82bbfa)2f9dc84)1b5fd86)8aa5389)c53e5a4)8f7f9ce)time formatting (b74eaf8)4b0c219)b1fea0f)090795b)bd5f3e8)c96473d)c06ae1c)c4bf958)git_date::parsea(str) to use a str (0f8680a)11a5fa2)8e6f4a9)99e12be)b139d70)bd64387)f84e8f5)556dd8c)5bbcbcd)git-date::Time with time::format_description. (d4243bc)2f506c7)ce885ad)9b9ea02)6da8250)7b61506)47724c0)4737b1e)3c50625)f144eaf)085e76b)89ea12b)41ea8ba)a417177)bb424f5)a2c8969)0eb2372)2bc2f76)
</details>Your coding agent can read these notes before it upgrades. Set up the MCP server →