Skip to content

various improvements - #2905

Merged
Sebastian Thiel (Byron) merged 21 commits into
mainfrom
various-improvements
Aug 19, 2026
Merged

various improvements#2905
Sebastian Thiel (Byron) merged 21 commits into
mainfrom
various-improvements

Conversation

@Byron

@Byron Sebastian Thiel (Byron) commented Aug 12, 2026

Copy link
Copy Markdown
Member

Cherry-picked commits from various longer-lived branches to get them merged sooner, individually.

Tasks

  • refackiew
  • signatures for tags and API cleanup
  • CI green

Contains commits from #2853 .

@Byron
Sebastian Thiel (Byron) force-pushed the various-improvements branch 25 times, most recently from dabd33c to 6a1e3ad Compare August 17, 2026 18:48
I won't get used to the alternative.

- module
   - mod.rs
   - siblings

vs

- module
   - siblings
- module.rs

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Package OpenPGP, SSH, and X.509 signing identities for tests that need
to exercise Git-compatible signing and verification. Add helpers that
install each identity into an isolated Git configuration and expose the
matching verification material.

Generate the fixtures from a documented script so their passwords,
principals, and validity periods remain reproducible. Ignore transient
GnuPG state created beside the packaged fixture files.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
@Byron
Sebastian Thiel (Byron) force-pushed the various-improvements branch 3 times, most recently from 3257b6e to 20b7141 Compare August 18, 2026 19:00
Sebastian Thiel (Byron) and others added 14 commits August 18, 2026 21:20
Note that I did only skim through `git.rs`,
considering the details of the implementation secondary to the outcome.

`gix.rs` was refactored quite a bit, helping to provide more utilities
in other plumbing crates to help with this 'gix' avoidance.

<!-- agent -->
Add deterministic repository snapshots covering HEAD, references, reachable
commits, every index stage, conflict-free index trees, and exact worktree
contents. Provide a portable form which omits platform-specific filesystem modes
for stable cross-platform assertions.

Add writable Git-version-aware fixture APIs for copy and execute creation modes.
Require archived fixtures when the selected Git is incompatible, without running
unsupported scripts or post-processing.

Use the Git executable selected by gix-path consistently for version checks,
helper commands, and fixture scripts, including PATH selection for scripts.
Harden signing fixtures with command-compatible paths, isolated homes, and
complete SSH key pairs.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
gix-testtools now depends on gix-path for Git executable discovery, so gix-path
cannot retain the reverse development dependency.

Replace its environment and current-directory guards with local test utilities,
use tempfile directly, and create local-config repositories with the Git
executable selected by exe_invocation(). Remove the obsolete scripted fixture
and archive.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Teach commit parsing and signature extraction about the gpgsig-sha256
header used by Git when signing SHA-256 commits. Treat it like gpgsig
when locating the embedded signature while preserving the actual header
name when reconstructing the signed payload.

Cover both full commit parsing and token iteration so callers observe
the signature consistently through either API.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Replace the command-specific GPG invocation with gix::Commit::verify_signature
so the CLI and library share one implementation and one interpretation of
repository configuration.

This extends the command from hard-coded OpenPGP verification to the OpenPGP,
X.509, and SSH formats supported by Git, including configured programs and trust
policy. Preserve verifier diagnostics on stderr and fail when a signature is
invalid or insufficiently trusted.

Enable the gix command feature in gitoxide-core to make the shared verification
API available.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Treat configured external diff commands as shell command lines instead of
executable paths that require manual argument splitting.

Git diff drivers may contain a program followed by arguments. Passing such
values through the shell-aware gix-command preparation path preserves that
configuration while still appending Git diff arguments and environment variables
in the established platform code.

Add coverage for a configured command containing an argument so custom diff
drivers and text-conversion commands are launched as configured.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Represent change IDs as object hashes while formatting and parsing them with
Jujutsu's reverse-hex alphabet. Preserve the underlying hash bytes so conversion
from an ObjectId produces exactly the identifier that JJ displays for the same
byte sequence.

Extend hash prefixes with symmetric reverse-hex parsing and formatting,
including odd-nibble prefixes, so callers can resolve abbreviated change IDs
through the existing binary prefix comparison machinery.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Add `Repository::editor()`` to resolve the interactive editor with Git's
precedence rules. Honor GIT_EDITOR ahead of trusted core.editor, consider VISUAL
only for capable terminals, fall back through EDITOR to vi, and report no editor
for an unconfigured dumb terminal.

Route GIT_EDITOR through the configuration environment-override framework
so isolated repositories and environment permissions remain effective. Cover
precedence, dumb terminals, the no-op editor, and isolation.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
…gnedData::verify()`

<!-- agent -->
Add feature-gated plumbing for verifying OpenPGP, X.509, and SSH commit
signatures with fully resolved programs, arguments, environments, trust
thresholds, and SSH policy inputs. Keep repository configuration out of
the object crate while exposing Git-compatible status, identity, key, and
fingerprint results.

Stream signed commit data directly to OpenPGP and SSH verifiers without
reconstructing it. Use a temporary payload only where gpgsm requires a
file, and cover Git status parsing plus unsupported and mismatched formats.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
…:verify()`

**Breaking** because it also adds `config::tree::Key::default_value()`, which gives `Any`
a `default_value` field.

<!-- agent -->
Expose repository-aware verification on commits while delegating verifier
execution and result parsing to gix-object plumbing. Resolve supported
signature formats, configured programs, trust thresholds, SSH allowed
signers and revocations, repository-relative paths, and commit verification
time according to Git configuration.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Add plumbing for signing commits through external OpenPGP, X.509, and SSH
programs under the shared signature feature. Accept fully resolved signer
options so callers control the program, key, environment, and arguments
without introducing repository configuration into the object crate.

Replace an existing signature using the hash-appropriate commit header,
normalize signer output, and report process and malformed-output failures
with context. Cover every supported format, SHA-256 headers, replacement,
literal SSH keys, and verify generated signatures through the sibling
plumbing verifier as well as the external reference programs.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
<!-- agent -->
Expose repository-aware commit signing while delegating signature creation
to gix-object plumbing. Resolve gpg.format, per-format programs, signing
keys, committer identity fallback, and gpg.ssh.defaultKeyCommand from Git
configuration, including trusted paths and shell commands.

Add commit_signing_options_if_enabled() so porcelain callers honor
commit.gpgSign without resolving signer configuration while signing is
disabled. Preserve caller control over resolved program arguments and
environment, including non-interactive GPG operation.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
@Byron
Sebastian Thiel (Byron) force-pushed the various-improvements branch 2 times, most recently from 827adb1 to 11dd239 Compare August 18, 2026 19:42
@Byron
Sebastian Thiel (Byron) marked this pull request as ready for review August 18, 2026 19:43
@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

Breaking as it renames `Tag::pgp_signature` to `signature`.

<!-- agent -->
Extend `gix-object` signature support from commits to annotated tags.

**Signature infrastructure**

- Move object-independent signing and verification machinery into the shared
  `gix_object::signature` module.
- Keep signature discovery available without the `signature` feature.
- Continue using the existing signing and verification options and
  shared verification outcome for all object types.

**Annotated tags**

- Add `Tag::sign()` and `TagRef::sign()`.
- Add signature accessors that report both the armor and detected format.
- Add raw extraction of a tag signature and its exact signed bytes.
- Recognize OpenPGP signature/message, X.509, and SSH armor markers.
- Match Git by selecting the last recognized marker at a line boundary.
- Support native SHA-1 and SHA-256 tags without compatibility headers or
  multiple signatures.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
asdf
<!-- agent -->
Validate the entire batch before changing references, reject branches checked
out in any worktree, and delete references and reflogs in one transaction
without requiring commit traversal.

Remove matching local branch configuration under lock and report when
configuration cleanup fails after reference deletion. Share checked-out branch
discovery with fetch updates and use restricted repository opening throughout
the affected tests.

Assisted-by: GPT 5.6
Co-authored-by: GPT 5.6 <codex@openai.com>
@Byron
Sebastian Thiel (Byron) marked this pull request as ready for review August 19, 2026 03:58
@chatgpt-codex-connector

Copy link
Copy Markdown
Contributor

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@Byron
Sebastian Thiel (Byron) merged commit f3bbfad into main Aug 19, 2026
32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant