Rebase fork onto latest upstream (russellbanks/Komac) main#25
Rebase fork onto latest upstream (russellbanks/Komac) main#25Tom Plant (pl4nty) wants to merge 75 commits into
Conversation
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: russellbanks <74878137+russellbanks@users.noreply.github.com>
* Update Rust crate quick-xml to 0.40.1 * Migrate to quick-xml 0.40 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Russell Banks <74878137+russellbanks@users.noreply.github.com>
Co-authored-by: russellbanks <74878137+russellbanks@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…#1770) * Update Rust crate windows-native-keyring-store to 1.1.0 * Disable `windows-native-keyring-store` default features --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Russell Banks <74878137+russellbanks@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Autofill `InstallLocation` for WiX installers * Ignore switch parse error --------- Co-authored-by: Russell Banks <74878137+russellbanks@users.noreply.github.com>
* Replace sync method with "Sync fork" API Use GitHub's merge-upstream REST endpoint instead of the GraphQL API for the sync command. This allows for better error messages in some cases. Add an error context to the actual sync invocation. Print the used "sync method" on success. Introduce the GitHubError::Rest variant to distinguish GraphQL from REST errors. Remove the old merge upstream implementation. Note that the --force flag is no longer supported. Signed-off-by: Tom Wieczorek <twieczorek@mirantis.com> * Compare against upstream head commit --------- Signed-off-by: Tom Wieczorek <twieczorek@mirantis.com> Co-authored-by: Russell Banks <74878137+russellbanks@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…tegies to file Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Signed-off-by: Tom Plant <tom.plant@devicie.com>
Workspace is set to use Rust v1.93 even though the module is 1.89 Signed-off-by: Tom Plant <tom.plant@devicie.com>
Inno Setup 6.2 introduced a new PrivilegesRequired setting 'requireadmin' (value 4), which requires administrative privileges and will refuse to run if they cannot be obtained, unlike 'admin' which will prompt for credentials. Previously, reading this value with TryFromBytes failed since the enum only contained values 0-3. The failure was silently swallowed by unwrap_or_default(), returning None instead of the actual value.
…flag In Inno Setup 6.4.x, the decrypt_dll was removed from the wizard section as encryption is now handled via the inline EncryptionHeader. However, the ENCRYPTION_USED flag can still be set in the header flags bitfield. Previously, when ENCRYPTION_USED was set, the parser tried to read decrypt_dll from the wizard section regardless of version, causing UnexpectedEof for Inno 6.4.x installers that do not store decrypt_dll. Also revert the error suppression that converted UnexpectedEof to NotInnoFile, which was masking the root cause.
The non-solid NSIS header detection checked for an exact byte value of 0x80 in the high byte of compressed_header_size (signature.get(3) == Some(&0x80)). This missed valid non-solid installers where the high byte has other bits set in addition to the IS_COMPRESSED_MASK bit (e.g. 0x8D for timi.exe). The correct check is to test the IS_COMPRESSED_MASK bit directly: (compressed_header_size & IS_COMPRESSED_MASK) != 0 Additionally, installers with the BI_EXTERNAL_FILE flag set store their data in an external file and cannot be analysed inline. These are now rejected early with NotNsisFile instead of failing later in header decompression. The map_err suppression on Header::decompress is also removed; genuine decompression errors are now propagated as-is.
The NSIS header's language_table_size field is unreliable for old installers: it can be 0 (typefaster.exe) or -1 (quickpar.exe) even when valid language tables are present in the LangTables block. Fix this by computing the size from the block data, matching the approach already used for sections: lang_table_size = lang_block_data.len() / num_tables This uses the actual block data size divided by the number of language table entries reported in the block header, which is always correct. Also removes the now-unnecessary header parameter from primary_language().
… values The FileOpen entry (type 55) stores a file creation disposition value that NSIS passes directly to CreateFile(). NSIS uses values like 0 and 700 that are not valid Win32 OPEN_EXISTING (3) / CREATE_ALWAYS (2) / OPEN_ALWAYS (4) values. Previously, the create_mode field used CreationDisposition which only accepts values 1-5 via TryFromBytes, causing FileOpen entries with non-standard modes to silently become Entry::Invalid. Fix by changing create_mode to I32<LE> (accepts any value) and comparing by integer in the execution logic.
Signed-off-by: Tom Plant <tom.plant@devicie.com>
The vendored `inno` and `msi` git submodules pointed at commits that no longer exist on their remotes, so `git submodule update --init` failed and broke CI checkout. Both crates are available on crates.io at the exact versions the manifest already declares (inno 0.4.2, msi 0.10.0), so the `[patch.crates-io]` overrides and submodules are removed in favour of the published crates. The healthy `winget-types` submodule is left untouched. Reconciling the lockfile to the published crates surfaced several pre-existing issues that the broken submodule checkout had been masking: - inno 0.4.2 has no `PrivilegeLevel::RequireAdmin` variant (that was a fork-only addition); drop the arm so it falls through as before. - msi analysis set the `Installer::switches` field twice (a botched merge of the upstream install-location switch and the custom-switch feature); merge both into a single `InstallerSwitches` builder. - `token.rs` matched a `keyring_core::Entry` as if it were an `Option`. - Remove unused NSIS header imports. - Add `hide_env_values` to the three `GITHUB_TOKEN` args that were missing it so the help-output secrecy test passes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XmPAQgcCW15dCnnmKSyWWc
|
Resolved the Cargo.lock / verification blocker noted above. The Reconciling the lockfile to the published crates exposed a few pre-existing issues the broken checkout had been masking, now fixed:
Verified locally on rust 1.95 (the crate's MSRV): Note: the only loss vs the fork is Generated by Claude Code |
With the submodule checkout fixed, CI's clippy job (which runs with `RUSTFLAGS=-D warnings`) could finally run and flagged seven pre-existing lints. None are behavioural changes: - `collapsible_if` in `prompts` and `html_page` -> let-chains (already used elsewhere in the crate; MSRV 1.95 supports them). - `redundant_closure` in `sourceforge` -> pass the fn directly. - `unnecessary_map_or` in `vanity_url` -> `Option::is_none_or`. - `ptr_arg` in `submit_option` -> take `&mut [_]` (callers coerce, and `Editor::new` already takes a slice). - `large_enum_variant` in `ExeType` -> box the 464-byte `InstallShield` variant. - `too_many_arguments` on `AutoUpdate::run_entry` -> `#[allow]`. Verified with `RUSTFLAGS=-D warnings cargo clippy` on rust 1.96 (matching CI) and `cargo check` on the 1.95 MSRV; both clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XmPAQgcCW15dCnnmKSyWWc
What
Rebases the devicie fork's 40 custom commits on top of the latest
upstream/main(russellbanks/Komac), bringing in 33 new upstream commits (merge-base was19403b74, new upstream tip18616f90"Update GitHub REST API to 2026-03-10").After the rebase the branch is 40 commits ahead of
upstream/main, 0 behind — all upstream changes are incorporated.Conflicts resolved
Cargo.toml(×2) — kept upstream's newer crate versions (tree-sitter-highlight0.26.9,sevenz-rust20.21.0) while preserving fork additions (tracing-subscriberenv-filterfeature,serini).src/github/rest/mod.rs— union of upstream's new modules (compare_commits,error,merge_upstream) and the fork'sreleasesmodule.src/analysis/installers/zip.rs— combined imports (bail+CustomType); both are used post-rebase.src/commands/submit.rs— kept upstream's newmanifest_versionreset block and itsOption-basedmaybe_versions(...)/get_versions(...).ok()API, layered on top of the fork'sprompt_asyncconcurrency change (ownedidentifier/versionclones). Verified against the actualadd_version#[builder],get_versions, andprompt_asyncsignatures.Cargo.lock / verification note
cargocould not be run in this environment because thevendor/innosubmodule (referenced commit ondevicie/inno) is not fetchable here, so the lockfile could not be regenerated and the build was not compile-verified.Cargo.lockwas set to the fork's pre-rebase, internally consistent lockfile (containsseriniand the vendored path crates). It is behind on a handful of upstream renovate version bumps (e.g.regex,uuid,zerocopy,nt-time); runcargo build/cargo updatein an environment with submodule access to finalize the lockfile before merging.🤖 Generated with Claude Code
Generated by Claude Code