Skip to main content

max / makenotwork

Bump git2 to 0.21, infer to 0.22, bzip2 to 0.6 in the server git2 0.21 is not the no-op the version jump suggests: Signature::name, TreeEntry::name and Reference::shorthand now return Result rather than Option, Blame::final_signature returns Option<Signature>, and the StringArray iterator yields Result<Option<&str>, Error>. Adjusted the four call sites in src/git accordingly; behaviour is unchanged. object stays at 0.37. authenticode 0.5 implements PeTrait for object 0.37's PeFile, so bumping object alone breaks Windows signature scanning. authenticode 0.6 requires object 0.39, which makes object part of the x509/authenticode cluster rather than a standalone bump. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-20 20:34 UTC
Commit: df1fdbaf79051428a8943e384277cc13fd1a6251
Parent: e264475
6 files changed, +21 insertions, -35 deletions
@@ -1573,13 +1573,13 @@ dependencies = [
1573 1573
1574 1574 [[package]]
1575 1575 name = "cfb"
1576 - version = "0.7.3"
1576 + version = "0.14.0"
1577 1577 source = "registry+https://github.com/rust-lang/crates.io-index"
1578 - checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
1578 + checksum = "a347dcabdae9c31b0825fd6a8bed285ec9c2acb89c47827126d52fa4f59cece3"
1579 1579 dependencies = [
1580 - "byteorder",
1581 1580 "fnv",
1582 1581 "uuid",
1582 + "web-time",
1583 1583 ]
1584 1584
1585 1585 [[package]]
@@ -3163,17 +3163,14 @@ dependencies = [
3163 3163
3164 3164 [[package]]
3165 3165 name = "git2"
3166 - version = "0.20.4"
3166 + version = "0.21.0"
3167 3167 source = "registry+https://github.com/rust-lang/crates.io-index"
3168 - checksum = "7b88256088d75a56f8ecfa070513a775dd9107f6530ef14919dac831af9cfe2b"
3168 + checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e"
3169 3169 dependencies = [
3170 3170 "bitflags 2.13.0",
3171 3171 "libc",
3172 3172 "libgit2-sys",
3173 3173 "log",
3174 - "openssl-probe 0.1.6",
3175 - "openssl-sys",
3176 - "url",
3177 3174 ]
3178 3175
3179 3176 [[package]]
@@ -3855,9 +3852,9 @@ dependencies = [
3855 3852
3856 3853 [[package]]
3857 3854 name = "infer"
3858 - version = "0.19.0"
3855 + version = "0.22.0"
3859 3856 source = "registry+https://github.com/rust-lang/crates.io-index"
3860 - checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7"
3857 + checksum = "f4200d433cbd5178df7797c9c2e75b348b728e39631cf14520d1e2fc424201f4"
3861 3858 dependencies = [
3862 3859 "cfb",
3863 3860 ]
@@ -4089,9 +4086,7 @@ checksum = "005d6ae6eac1912906073e069f7db60b1fa98e052a68227824afe3e3a1c59ca2"
4089 4086 dependencies = [
4090 4087 "cc",
4091 4088 "libc",
4092 - "libssh2-sys",
4093 4089 "libz-sys",
4094 - "openssl-sys",
4095 4090 "pkg-config",
4096 4091 ]
4097 4092
@@ -4124,20 +4119,6 @@ dependencies = [
4124 4119 ]
4125 4120
4126 4121 [[package]]
4127 - name = "libssh2-sys"
4128 - version = "0.3.2"
4129 - source = "registry+https://github.com/rust-lang/crates.io-index"
4130 - checksum = "c04141a07bb0c0bc461cb657808764de571702a59bc5c726c400ac9a7625e3ab"
4131 - dependencies = [
4132 - "cc",
4133 - "libc",
4134 - "libz-sys",
4135 - "openssl-sys",
4136 - "pkg-config",
4137 - "vcpkg",
4138 - ]
4139 -
4140 - [[package]]
4141 4122 name = "libz-sys"
4142 4123 version = "1.1.29"
4143 4124 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4339,7 +4320,7 @@ dependencies = [
4339 4320 "axum-extra",
4340 4321 "base64 0.22.1",
4341 4322 "bytes",
4342 - "bzip2 0.4.4",
4323 + "bzip2 0.6.1",
4343 4324 "chacha20poly1305",
4344 4325 "chrono",
4345 4326 "clap",
@@ -83,13 +83,13 @@ base64 = "0.22.1"
83 83 tempfile = "3"
84 84
85 85 # File scanning
86 - infer = "0.19"
86 + infer = "0.22"
87 87 goblin = "0.10"
88 88 zip = "8.2"
89 89 # Single-stream decompressors for archive-bomb detection (already in the tree
90 90 # transitively via `zip`; pinned to the resolved versions so no new build).
91 91 flate2 = "1"
92 - bzip2 = "0.4"
92 + bzip2 = "0.6"
93 93 xz2 = "0.1"
94 94 zstd = "0.13"
95 95 yara-x = "1.16"
@@ -127,7 +127,7 @@ tagtree = { path = "../shared/tagtree" }
127 127 makeover = "1.0.0"
128 128
129 129 # Git source browser
130 - git2 = { version = "0.20", features = ["vendored-libgit2"] }
130 + git2 = { version = "0.21", features = ["vendored-libgit2"] }
131 131 syntect = { version = "5", default-features = false, features = ["default-syntaxes", "default-themes", "html", "regex-fancy"] }
132 132 regex = "1"
133 133 semver = "1"
@@ -363,8 +363,13 @@ pub fn blame_file(
363 363 let short_oid = oid_str[..7.min(oid_str.len())].to_string();
364 364
365 365 let sig = hunk.final_signature();
366 - let author_name = sig.name().unwrap_or("Unknown").to_string();
367 - let time_formatted = chrono::DateTime::from_timestamp(sig.when().seconds(), 0)
366 + let author_name = sig
367 + .as_ref()
368 + .and_then(|s| s.name().ok())
369 + .unwrap_or("Unknown")
370 + .to_string();
371 + let when = sig.as_ref().map(|s| s.when().seconds()).unwrap_or_default();
372 + let time_formatted = chrono::DateTime::from_timestamp(when, 0)
368 373 .unwrap_or_default()
369 374 .format("%Y-%m-%d")
370 375 .to_string();
@@ -278,7 +278,7 @@ pub fn repo_info(repo: &Repository, name: &str) -> RepoInfo {
278 278 let default_branch = repo
279 279 .head()
280 280 .ok()
281 - .and_then(|r| r.shorthand().map(String::from))
281 + .and_then(|r| r.shorthand().ok().map(String::from))
282 282 .unwrap_or_else(|| "main".to_string());
283 283
284 284 RepoInfo {
@@ -31,7 +31,7 @@ pub fn list_tree(
31 31 let mut items: Vec<TreeItem> = target_tree
32 32 .iter()
33 33 .filter_map(|entry| {
34 - let name = entry.name()?.to_string();
34 + let name = entry.name().ok()?.to_string();
35 35 let kind = match entry.kind()? {
36 36 ObjectType::Tree => TreeItemKind::Dir,
37 37 ObjectType::Blob => TreeItemKind::File,
@@ -54,7 +54,7 @@ pub fn list_refs(repo: &Repository) -> Vec<RefInfo> {
54 54 }
55 55
56 56 if let Ok(tags) = repo.tag_names(None) {
57 - for tag in tags.iter().flatten() {
57 + for tag in tags.iter().flatten().flatten() {
58 58 refs.push(RefInfo {
59 59 name: tag.to_string(),
60 60 is_branch: false,