Skip to content

Conversation

@weihanglo
Copy link
Member

@weihanglo weihanglo commented Jan 12, 2026

This adds an unstable-sha256 Cargo feature, as a follow-up of #1201.
Also adds some smoke tests for affected operations/types.

Part of #1090

Insta-stable

  • NEW Index::with_object_format to create with different format

Behind unstable-sha256

  • NEW ObjectFormat::Sha256 enum variant
  • NEW RepositoryInitOptions::object_format() method to set hash algo
  • NEW Remote::object_format method to get hash algo on a remote
  • CHANGED Diff::from_buffer to accept an extra object format argument
  • CHANGED Index::open to accept an extra object format argument
  • CHANGED Indexer::new to accept an extra object format argument
  • CHANGED Oid::from_str to accept an extra object format argument
  • CHANGED Oid::hash_{object,file} to accept an extra object format argument
  • REMOVED Index::new to avoid misuse.
  • REMOVED impl std::FromStr for Oid to avoid misuse

libgit2 1.9 compatibility changes

This PR also includes fixes for libgit2 1.9 breaking changes:

  • Renamed build macros (GIT_SHA1_COLLISIONDETECT -> GIT_SHA1_BUILTIN, HTTPS backend macros)
  • Added refdb_type field to git_repository_init_options
  • Updating sha256 bindings accordingly

See libgit2/libgit2#6994 and libgit2/libgit2#7102 for upstream changes.

These changes can be split out if needed.

* GIT_SHA1_COLLISIONDETECT -> GIT_SHA1_BUILTIN
* GIT_WINHTTP -> GIT_HTTPS_WINHTTP
* GIT_SECURE_TRANSPORT -> GIT_HTTPS_SECURETRANSPORT
* GIT_OPENSSL -> GIT_HTTPS_OPENSSL

See <libgit2/libgit2#6994>
@weihanglo weihanglo force-pushed the sha256-git2 branch 5 times, most recently from 3fc5ab5 to a0f7252 Compare January 13, 2026 03:52
* Add `GIT_REPOSITORY_INIT_RELATIVE_GITLINK`
  at libgit2/libgit2@bc737620d
* Remove `GIT_REPOSITORY_INIT_NO_DOTGIT_DIR`
  at libgit2/libgit2@ca2a241e4
* Remove `GIT_OBJECT_OFS_DELTA`
* Remove `GIT_OBJECT_REF_DELTA`

See libgit2/libgit2@23da3a8f3
libgit2 simplified SHA256 API to use `_ext` suffixes instead of
changing base function signatures. This avoids breaking changes
for users who don't need SHA256 support.

Updated bindings:

- git_oid_from_raw
- git_oid_from_prefix
- git_oid_from_string
- git_diff_from_buffer_ext
- git_index_new_ext
- git_index_open_ext
- git_odb_new_ext
- git_odb_open_ext
- git_repository_new_ext

See libgit2/libgit2@56e2a85643f (libgit2/libgit2#6975)
This adds an `unstable-sha256` Cargo feature,
as a follow-up of rust-lang#1201

Also adds some smoke tests for affected operations/types.

## Insta-stable

* **NEW** `Index::with_object_format` to create with different format

## Behind `unstable-sha256

* **NEW** `ObjectFormat` enum with variants `Sha1` and `Sha256`
* **NEW** `RepositoryInitOptions::object_format()` method to set hash algo
* **NEW** `Remote::object_format` method to get hash algo on a remote
* **CHANGED** `Diff::from_buffer` to accept a extra object format argument
* **CHANGED** `Index::open` to accept a extra object format argument
* **CHANGED** `Indexer::new` to accept a extra object format argument
* **CHANGED** `Oid::from_str` to accept a extra object format argument
* **CHANGED** `Oid::hash_{object,file}` to accept a extra object format argument
* **REMOVED** `Index::new` to avoid misuse.
* **REMOVED** `impl std::FromStr for Oid` to avoid misuse
This also run systest first,
so we can dicover bindding mismatch before
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