You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ab6cdd3
Browse filesBrowse the repository at this point in the historyBrowse files
The Windows suite with `GixPython 0.1.0` had 17 failures that the CLI-only
package matrix did not exercise. Format paths returned by `Repository.common_dir()`,
`workdir()` and `git_dir()` with the existing Windows separator adapter,
including repository properties and worktree listings. Gix still resolves
the locations, and POSIX filenames retain their literal backslashes.
Recover from `RuntimeError("native worker panicked")` only during repository
discovery, letting Git validate malformed metadata and provide its normal
error. Propagate unrelated errors and errors after a native mutation starts.
Keep the upstream discovery bug open as `GIX-14` in `doc/gix-backend.md`.
Correct the gitfile and symlink controls to use the platform's Git behavior.
Exercise status with portable filenames on Windows while retaining POSIX
newline coverage. Compare direct-branch and symbolic-alias blob updates with
Git, which rejects the former and accepts the latter in the tested versions.
Add a Windows/Python 3.12 Gix job while preserving all 28 existing CLI jobs
and check names. Prepare Rust for the released `GixPython` source build,
cache `pip` wheels, verify backend selection and retain JUnit results plus
backend operation counts for every job.
Validation:
- Full Windows Gix suite: 1,760 passed, 40 subtests passed, 58 skipped,
nine expected failures and three unexpected passes in 2,242.66 seconds.
The baseline reproduced all 17 failures; the unexpected passes and the
path-deprecation warning also occurred there. Overlapping runs do not
establish a performance improvement for these compatibility fixes.
- Windows CLI regressions: 138 passed and 14 subtests passed.
- Ubuntu WSL Gix regressions: 43 passed and 14 subtests passed, including
both hash formats and POSIX newline filenames.
- `ruff`, `mypy`, `basedpyright` and pinned `pre-commit` checks passed. Matrix
expansion and existing GitHub check names were verified.
For another machine, populate that directory from PyPI or its package cache
69
74
before running the offline installation tests. Select wheels compatible with
70
75
the interpreter and platform; ordinary and free-threaded CPython use different
71
-
wheels. A local GixPython source build is no longer required.
76
+
wheels. On platforms without a published wheel, first build one from the
77
+
released source distribution and retain it in the wheelhouse.
72
78
73
79
## Conversion coverage
74
80
@@ -680,13 +686,13 @@ identify the historical fixture where needed.
680
686
| GIX-21 | Bug; missing API |`Repository.committer()` preserves a process identity of ` Name. ` / ` email@example.invalid ` while `git var GIT_COMMITTER_IDENT` returns `Name.` / `email@example.invalid`. Native snapshot overrides for name, email and date work, but modifying the retained snapshot would leak per-command identity across threads. GixPython 0.1.0 has no general independent repository clone: Python copying fails and internal `RepoHandle::clone()` shares its `Arc` state. | Expose Git-compatible identity cleanup and a cheap independent native clone with isolated config, including per-command removal semantics. Reopening isolates state but repeats setup; `with_object_memory()` changes object-write behavior and is not a general clone. Keep `_checked_signature` validation and CLI fallback for cleanup/overrides. Never clean identity fields in Python or mutate shared snapshots/process environment to handle a command. |
681
687
| GIX-22 | Missing API | The native Git directory is sufficient for the two fixed metadata leaves used here: `modules` and `COMMIT_EDITMSG`. Git's `path.c` applies no special relocation to either, including in linked worktrees. The adapter appends only these names to the canonical native Git directory. | No new binding is needed for these ordinary paths. Other `--git-path` names and symlinked metadata leaves retain CLI resolution; a general resolver must handle config/environment overrides, common/private storage and canonical targets. `Repository.modules_path()` means `.gitmodules`, not the `modules` storage directory. |
682
688
| GIX-23 | Missing API | No hook lookup or execution API is bound in GixPython 0.1.0. The removed absence fast path read config through Gix but used Python `os.stat()` to declare success. | Bind native hook lookup with configured/default path, linked-worktree, missing/nonexecutable-hook and diagnostic semantics, plus execution where needed. Until then all managed hook calls use Git, including `--ignore-missing` no-ops. A Python filesystem check is not a Gix implementation. |
683
-
| GIX-24 | Bug | In both object formats, `new_commit_as()` accepts a blob as the tree or a parent where `git commit-tree` rejects it. Tree-editor `upsert()`/`write()` accepts object IDs whose actual kinds disagree with blob/tree/gitlink modes; `git mktree --missing` rejects all three tested mismatches. `edit_references_as()` accepts a blob target under `refs/heads/`, rejected by `git update-ref`. | Provide checked commit/tree construction and reference edits, at least in Git-strict mode. Validate kinds and branch targets, including symbolic aliases, before writing and under the required ref locks. Existing `_commit_tree`, `_write_tree` and `_update_ref` guards query Gix headers and select CLI on invalid inputs; they do not replace Gix writes with Python. |
689
+
| GIX-24 | Bug | In both object formats, `new_commit_as()` accepts a blob as the tree or a parent where `git commit-tree` rejects it. Tree-editor `upsert()`/`write()` accepts object IDs whose actual kinds disagree with blob/tree/gitlink modes; `git mktree --missing` rejects all three tested mismatches. `edit_references_as()` accepts a blob target under `refs/heads/`, rejected by `git update-ref`. | Provide checked commit/tree construction and reference edits, at least in Git-strict mode. Match Git's kind and direct-branch target validation before writing and under the required ref locks, including its distinct handling of symbolic aliases. Existing `_commit_tree`, `_write_tree` and `_update_ref` guards query Gix headers and select CLI on invalid inputs; they do not replace Gix writes with Python. |
684
690
| GIX-25 | Bug; missing API | After `git symbolic-ref refs/heads/dangling refs/heads/missing`, `Repository.references().all()` enumerates the dangling name, while `git for-each-ref --format=%(refname)` omits it. Valid symbolic aliases must remain present. Both SHA-1 and SHA-256 probes reproduce this difference. | Expose Git-compatible enumeration with the same dangling-reference and diagnostic behavior, retaining the raw iterator for callers that need it. `_for_each_ref` forces Gix to resolve symbolic targets and falls back to Git on failure; keep that fallback until a compatible Gix API/mode is verified. |
685
691
686
692
Windows reproduction for GIX-14 uses CPython 3.12.13, Git
687
693
2.55.0.windows.3 and the released GixPython 0.1.0 source distribution with
688
694
the same pinned Gitoxide revision above. Both `105114db` and the CLI metadata
689
-
batching change reproduce the following existing failures:
695
+
batching change (`f6779dbb`) reproduce the following existing failures:
690
696
691
697
-`test_native_command_queries_match_cli` and
692
698
`test_native_worktree_inventory_includes_bare_main` return backslashes in
@@ -698,13 +704,30 @@ batching change reproduce the following existing failures:
698
704
`InvalidGitRepositoryError`. The binding must reject this input through its
699
705
normal native error contract so discovery can take the existing fallback.
700
706
701
-
These remain open compatibility bugs. The optional Windows selection also
702
-
has tests that fail before a native/Git comparison: newline-containing
703
-
filenames, a raw backslash gitfile operand, and a POSIX-specific symlink
704
-
canonicalization assertion. Its symbolic-alias blob assertion is not evidence
705
-
of a Gix mismatch on this Git version: direct Git controls in both object
706
-
formats also accept the alias update and leave the branch pointing to a blob.
707
-
This does not invalidate GIX-24's separate direct-branch validation comparison.
707
+
The adapters now format locations returned by `Repository.common_dir()`,
708
+
`workdir()` and `git_dir()` with the existing Windows-only path separator
709
+
conversion, including `Repo.common_dir` and gitfile worktree paths. Gix still
710
+
resolves every location. Ordinary, bare and linked repository metadata and
711
+
worktree-list queries compare exactly against Git without additional CLI
712
+
calls. POSIX filenames containing literal backslashes are unaffected.
713
+
714
+
Discovery catches only the binding's exact
715
+
`RuntimeError("native worker panicked")` and selects Git's existing validation
716
+
path. The malformed metadata regression then raises `InvalidGitRepositoryError`.
717
+
Unrelated runtime
718
+
errors still propagate. Both normal native write errors and worker panics
719
+
after a mutation begins are tested to ensure they never trigger a CLI retry.
720
+
GIX-14 remains open: these adapter changes do not fix the upstream panic or
721
+
the other discovery compatibility bugs.
722
+
723
+
The tests now pass gitfile operands in Git's Windows-compatible spelling and
724
+
compare symlink resolution against the current platform's Git output. Status
725
+
and ignore parity runs with a portable filename everywhere; only the extra
726
+
newline-filename variant is skipped on Windows. Blob-reference updates also
727
+
compare against Git: a direct branch rejects the blob, while a symbolic alias
728
+
outside `refs/heads/` accepts it on Git 2.55.0.windows.3, in both object
729
+
formats. That alias behavior is not evidence of a Gix mismatch and does not
730
+
invalidate GIX-24's separate direct-branch comparison.
708
731
709
732
For GIX-8, at fixture commit `44e0a8ec55c42559dfcdf5117710b26261a7c937`,
710
733
compare `git rev-list HEAD` with
@@ -751,7 +774,7 @@ probe and captured results are in
0 commit comments