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 1e92aac
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
71
76
before running the offline installation tests. Select wheels compatible with
72
77
the interpreter and platform; ordinary and free-threaded CPython use different
73
-
wheels. A local GixPython source build is no longer required.
78
+
wheels. On platforms without a published wheel, first build one from the
79
+
released source distribution and retain it in the wheelhouse.
74
80
75
81
## Conversion coverage
76
82
@@ -683,13 +689,13 @@ identify the historical fixture where needed.
683
689
| 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. |
684
690
| 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. |
685
691
| 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. |
686
-
| 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. |
692
+
| 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. |
687
693
| 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. |
688
694
689
695
Windows reproduction for GIX-14 uses CPython 3.12.13, Git
690
696
2.55.0.windows.3 and the released GixPython 0.1.0 source distribution with
691
697
the same pinned Gitoxide revision above. Both `105114db` and the CLI metadata
692
-
batching change reproduce the following existing failures:
698
+
batching change (`f6779dbb`) reproduce the following existing failures:
693
699
694
700
-`test_native_command_queries_match_cli` and
695
701
`test_native_worktree_inventory_includes_bare_main` return backslashes in
@@ -701,13 +707,30 @@ batching change reproduce the following existing failures:
701
707
`InvalidGitRepositoryError`. The binding must reject this input through its
702
708
normal native error contract so discovery can take the existing fallback.
703
709
704
-
These remain open compatibility bugs. The optional Windows selection also
705
-
has tests that fail before a native/Git comparison: newline-containing
706
-
filenames, a raw backslash gitfile operand, and a POSIX-specific symlink
707
-
canonicalization assertion. Its symbolic-alias blob assertion is not evidence
708
-
of a Gix mismatch on this Git version: direct Git controls in both object
709
-
formats also accept the alias update and leave the branch pointing to a blob.
710
-
This does not invalidate GIX-24's separate direct-branch validation comparison.
710
+
The adapters now format locations returned by `Repository.common_dir()`,
711
+
`workdir()` and `git_dir()` with the existing Windows-only path separator
712
+
conversion, including `Repo.common_dir` and gitfile worktree paths. Gix still
713
+
resolves every location. Ordinary, bare and linked repository metadata and
714
+
worktree-list queries compare exactly against Git without additional CLI
715
+
calls. POSIX filenames containing literal backslashes are unaffected.
716
+
717
+
Discovery catches only the binding's exact
718
+
`RuntimeError("native worker panicked")` and selects Git's existing validation
719
+
path. The malformed metadata regression then raises `InvalidGitRepositoryError`.
720
+
Unrelated runtime
721
+
errors still propagate. Both normal native write errors and worker panics
722
+
after a mutation begins are tested to ensure they never trigger a CLI retry.
723
+
GIX-14 remains open: these adapter changes do not fix the upstream panic or
724
+
the other discovery compatibility bugs.
725
+
726
+
The tests now pass gitfile operands in Git's Windows-compatible spelling and
727
+
compare symlink resolution against the current platform's Git output. Status
728
+
and ignore parity runs with a portable filename everywhere; only the extra
729
+
newline-filename variant is skipped on Windows. Blob-reference updates also
730
+
compare against Git: a direct branch rejects the blob, while a symbolic alias
731
+
outside `refs/heads/` accepts it on Git 2.55.0.windows.3, in both object
732
+
formats. That alias behavior is not evidence of a Gix mismatch and does not
733
+
invalidate GIX-24's separate direct-branch comparison.
711
734
712
735
For GIX-8, at fixture commit `44e0a8ec55c42559dfcdf5117710b26261a7c937`,
713
736
compare `git rev-list HEAD` with
@@ -754,7 +777,7 @@ probe and captured results are in
0 commit comments