Skip to content

gitoxide-core v0.60.0

Choose a tag to compare

@Byron Byron released this 23 Jul 13:24
842bc44

New Features

  • add explicit gix config show subcommand.

  • add gix config list for showing the git-configuration files.

  • add the gix config fmt subcommand
    Expose the gix-config whitespace formatter as
    gix config fmt [--in-place] [in-file] [out-file]: with no in-file it
    formats the repository-local configuration, and with no out-file it writes
    to stdout. The repository is only opened when the repository-local
    configuration is needed, so formatting an explicit file works outside a
    repository too.

  • add gix status --untracked flag
    This allows to control how untracked files are folded, but also
    can completely turn dirwalking off.

  • add gix free remote refs to list and write remote refs.
    Add gix free remote refs to perform an upload-pack handshake, discover
    the remote reference advertisement, and print the refs without negotiating
    or receiving a pack.

    The command can also write the advertised refs into a standalone ref store:

    gix free remote refs --refs-directory out-refs <url>

Bug Fixes

  • escape unsafe paths in gix index entries
    --- agent

    Human-readable index entry output wrote repository-controlled path bytes
    directly to stdout. Control characters could therefore alter terminal state,
    rewrite visible output, or split one path across multiple lines.

    Add a crate-private writer that reuses a scratch buffer and emits BStr's
    quoted debug representation only when its interior differs from the original
    bytes. This keeps ordinary UTF-8 output unchanged while escaping terminal
    controls, ambiguous syntax bytes, and invalid UTF-8 losslessly, without allocation.
    Apply it to both simple and rich index output,
    including complete submodule-prefixed paths.

    Git baseline: builtin/ls-files.c routes line-oriented names through
    write_name_quoted_relative(), which delegates to quote.c's C-style path
    quoting. This change follows the same behavioral rule that ordinary paths stay
    readable while terminal-active bytes are not emitted literally.

  • preserve multiple remote URLs
    Configured remotes can have multiple remote..url or remote..pushUrl
    values, but gix::Remote kept only one value because lookup used the singular
    config accessor. That meant the most recent config value won, while Git exposes
    every effective URL and uses the first one for the singular get-url form.

    Add ordered URL storage to gix::Remote and expose Remote::urls(Direction) for
    all effective URLs. Keep Remote::url(Direction) as the singular compatibility
    API, now returning the first effective URL. Fetch URLs used as push fallbacks
    try pushInsteadOf first and then insteadOf, matching Git behavior.

    The regression fixture records Git 2.50.1 behavior with git remote get-url:
    without --all it prints the first configured URL, and with --all it prints all
    configured URLs in order for both fetch and push.

  • pass through the allocation limit
    This is particularly important in untrusted repositories, which
    get a reduced allocation limit.

Changed (BREAKING)

  • replace maybe-async with bisync.
    Replace the globally feature-selected maybe-async dependency with bisync 0.3 and
    re-export the locally selected macro mode from gix-protocol.

    Also use it to deduplicate portions which previously couldn't be handled.

Bug Fixes (BREAKING)

  • make exclude queries index-aware

    gix exclude query reported ignore matches for tracked files and directories
    containing tracked entries, unlike git check-ignore. Positional arguments were
    also interpreted as pathspecs while stdin supplied paths.

    Treat positional and stdin input uniformly as paths, normalize them relative
    to the repository, and suppress ignore matches for indexed files or directories
    containing indexed entries. This changes positional arguments from pathspecs
    to paths.

    Add journey coverage for tracked and untracked paths below ignored directories,
    stdin from a nested working directory, ignore-pattern display, and positional
    output order.

Commit Statistics

  • 47 commits contributed to the release.
  • 31 days passed between releases.
  • 10 commits were understood as conventional.
  • 3 unique issues were worked on: #1534, #2562, #2696

Thanks Clippy

Clippy helped 1 time to make code idiomatic.

Commit Details

view details
  • #1534
    • Escape unsafe paths in gix index entries (caabb38)
  • #2562
    • Make exclude queries index-aware (b185147)
  • #2696
    • Preserve multiple remote URLs (5f244b3)
  • Uncategorized
    • Update changelogs prior to release (cb6ec7d)
    • Release gix-trace v0.1.21, gix-validate v0.11.3, gix-path v0.12.3, gix-utils v0.3.5, gix-config-value v0.19.0, gix-prompt v0.16.0, gix-sec v0.14.2, gix-url v0.37.0, gix-credentials v0.39.0, safety bump 18 crates (f0ec710)
    • Merge pull request #2737 from GitoxideLabs/encoding-fallback-pony (2315ede)
    • Adapt to changes in gix-filter (552402f)
    • Merge pull request #2735 from GitoxideLabs/better-exclude-handling (02cb162)
    • Use gix::Repository::normalize_path() everywhere. (6dcf76a)
    • Merge pull request #2734 from GitoxideLabs/url-parse-convenience (e7af50e)
    • Adapt to changes in gix-url (271454b)
    • Merge pull request #2731 from GitoxideLabs/control-chars-escape (da88f6f)
    • Merge pull request #2729 from GitoxideLabs/improvements (9949e9f)
    • Adapt to changes in gix (1dbf871)
    • Merge pull request #2728 from GitoxideLabs/try-bisync (adf4b7a)
    • Merge pull request #2636 from ameyypawar/gix-config-formatter (cfd3899)
    • Add explicit gix config show subcommand. (06a927c)
    • Add gix config list for showing the git-configuration files. (bd595de)
    • Review (1825e85)
    • Replace maybe-async with bisync. (c3f2244)
    • Add the gix config fmt subcommand (87a5e89)
    • Merge pull request #2721 from GitoxideLabs/remove-kstring (e70732a)
    • Adapt to changes in gix-attributes (e11d7a2)
    • Merge pull request #2722 from GitoxideLabs/reasons (c16b5a1)
    • Replace lint allowances with expectations (43ff87a)
    • Merge pull request #2667 from GitoxideLabs/lifetime-free-config-parser (55b5158)
    • Adapt to changes in gix-config (376e946)
    • Merge pull request #2715 from GitoxideLabs/fixup-credentials (299d16b)
    • Adapt the credential command to explicit context options in gix-credentials (f88cf10)
    • Merge pull request #2714 from GitoxideLabs/fix-credentials-parsing (cf3053a)
    • Release gix-path v0.12.2, gix-error v0.2.5, gix-utils v0.3.4, gix-date v0.15.6, gix-url v0.36.2, gix-credentials v0.38.2 (27aec47)
    • Merge pull request #2698 from GitoxideLabs/multi-remote-url (7056d62)
    • Add missing SHA256 archive (432e2b1)
    • Merge pull request #2695 from ameyypawar/fix/2024-compression-level (6e1c4a2)
    • Review (f1ac335)
    • Adapt to configurable zlib compression levels (846c7c1)
    • Merge pull request #2702 from ameyypawar/fix/2694-exn-source-chain (e9c973d)
    • Thanks clippy (d533f0c)
    • Merge pull request #2691 from GitoxideLabs/gix-pack-missing-cap (0052e42)
    • Pass through the allocation limit (0a5c62a)
    • Merge pull request #2547 from special-bread/windows-status-performance (3e43c42)
    • Add gix status --untracked flag (9316ff8)
    • Merge pull request #2684 from GitoxideLabs/dependabot/cargo/cargo-f4a9952650 (677795b)
    • Bump the cargo group with 8 updates (b4b9844)
    • Merge pull request #2659 from willstott101/fix-ref-transaction-toctou (43dd683)
    • Add gix free remote refs to list and write remote refs. (6767b30)
    • Merge pull request #2646 from GitoxideLabs/report (1b1541e)