Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git: Always use OpenSSL on win32
Browse files Browse the repository at this point in the history
By default, libssh2 uses Windows Cryptography Next Generation when targeting
win32. The wincng backend does not support ED25519, which is a widely-used
algorithm among git hosting services, and in some cases may be the only option
on remotes in certain configurations.

This change necessitates Windows users building jj to install openssl via vcpkg
for the target triple x64-windows-static-md when building for MSVC, or otherwise
have OpenSSL available at build time. This should also generally work when
building for MinGW, though I did not try it.

Fixes jj-vcs#3322
HybridEidolon committed Apr 21, 2024
1 parent 77eaf67 commit 811bf5d
Showing 6 changed files with 17 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@ jobs:
toolchain: stable
target: ${{ matrix.target }}
- name: Build release binary
run: cargo build --target ${{ matrix.target }} --verbose --release --features packaging,vendored-openssl
run: cargo build --target ${{ matrix.target }} --verbose --release --features packaging,openssl-on-win32,vendored-openssl
- name: Build archive
shell: bash
run: |
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -15,6 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

* The default template alias `builtin_log_root(change_id: ChangeId, commit_id: CommitId)` was replaced by `format_root_commit(root: Commit)`.

* When targeting Windows, libssh2 will use OpenSSL rather than wincng. This fixes
interacting with Git+SSH hosts using ED25519 keys, but Windows developers will
need to provide OpenSSL at build time. This is enabled by Cargo feature
`openssl-on-win32`.

### New features

* The list of conflicted paths is printed whenever the working copy changes.
@@ -64,6 +69,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
literals. This means that `snapshot.max-new-file-size="1"` and
`snapshot.max-new-file-size=1` are now equivalent.

* ED25519 host keys are now supported correctly when connecting to Git+SSH hosts
on Windows.

## [0.16.0] - 2024-04-03

### Deprecations
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -60,6 +60,7 @@ indoc = "2.0.4"
insta = { version = "1.38.0", features = ["filters"] }
itertools = "0.12.1"
libc = { version = "0.2.153" }
libssh2-sys = { version = "0.3.0" }
maplit = "1.0.2"
minus = { version = "5.6.1", features = ["dynamic_output", "search"] }
num_cpus = "1.16.0"
2 changes: 2 additions & 0 deletions cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -64,6 +64,7 @@ hex = { workspace = true }
indexmap = { workspace = true }
itertools = { workspace = true }
jj-lib = { workspace = true }
libssh2-sys = { workspace = true }
maplit = { workspace = true }
minus = { workspace = true }
once_cell = { workspace = true }
@@ -104,6 +105,7 @@ jj-cli = { path = ".", features = ["test-fakes"], default-features = false }
[features]
default = ["watchman"]
bench = ["dep:criterion"]
openssl-on-win32 = ["libssh2-sys/openssl-on-win32", "jj-lib/openssl-on-win32"]
packaging = []
test-fakes = ["jj-lib/testing"]
vendored-openssl = ["git2/vendored-openssl", "jj-lib/vendored-openssl"]
4 changes: 3 additions & 1 deletion lib/Cargo.toml
Original file line number Diff line number Diff line change
@@ -49,6 +49,7 @@ hex = { workspace = true }
ignore = { workspace = true }
itertools = { workspace = true }
jj-lib-proc-macros = { workspace = true }
libssh2-sys = { workspace = true }
maplit = { workspace = true }
once_cell = { workspace = true }
pest = { workspace = true }
@@ -92,6 +93,7 @@ tokio = { workspace = true, features = ["full"] }

[features]
default = []
vendored-openssl = ["git2/vendored-openssl"]
openssl-on-win32 = ["libssh2-sys/openssl-on-win32"]
vendored-openssl = ["git2/vendored-openssl", "libssh2-sys/openssl-on-win32"]
watchman = ["dep:tokio", "dep:watchman_client"]
testing = []

0 comments on commit 811bf5d

Please sign in to comment.