Repository navigation
Conversation
Move the EDL implementation into the package, retain the source launcher, and remove tool import symlinks. Make CLI entry points safe to import and callable without arguments. Restrict package discovery and add wheel/sdist installation checks for Windows and Unix. Refs: bkerler#830 (Python packaging stage)
Run source launchers in a dependency-only virtual environment and assert edlclient is not importable before execution. Keep wheel installation checks in a separate environment, and add the source root for qc_diag only during direct script execution.
Generate legacy requirements from pyproject.toml, declare required cryptography support, and separate assembly and QR image extras. Add independent dependency resolution and optional-feature checks on the upstream package layout. Refs: bkerler#830 (dependency management stage)
# Conflicts: # MANIFEST.in
Write a persistent move plan before publishing fresh source entries. Roll back failed moves and recover interrupted publication before validating the target or selecting Python. Keep a commit record through cleanup so a completed checkout is retained when only cleanup was interrupted. Validated with Windows Python 3.14 (20 tests), Linux act Python 3.10 (14 tests), and wheel/sdist/CLI checks (4 tests). Fault cases include failed moves, killed publisher processes, valid-looking partial checkouts and committed cleanup. Windows tests used a temporary wheelhouse after a transient PyPI timeout. Live WinGet 1.29.380 detected installed Zadig 2.9.788 with exit 0, including Test-Zadig with its PATH shortcut excluded. The same package's absent user scope returned -1978335212. Existing machine-scope Zadig was not uninstalled.
Hold a per-target kernel lock before recovering pending source state and keep it through environment setup and cleanup. Competing installers fail without modifying the active checkout. Windows uses an exclusive inheritable handle with DeleteOnClose; Unix uses flock or native Perl flock on an inherited fd. Keep and ignore the empty Unix lock file to avoid inode replacement races. Real subprocess tests cover normal completion, forced parent termination, continued protection while an orphaned native writer remains alive, and recovery after all writers exit. Both Unix flock backends retain the same lock inode. Validated with Windows Python 3.14 (21 tests), Linux act Python 3.10 (16 tests), and wheel/sdist/CLI checks (4 tests). Existing driver scripts are unchanged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Refactor the Windows and Unix installers to provide an isolated, user-level installation process without unnecessarily modifying the system environment.
The previous installers required elevated privileges, installed Python dependencies into the system environment, and modified system-wide configuration even when those changes were not needed.
This PR separates Python application setup from system-level prerequisites, adds installation recovery and concurrency protection, and preserves the existing USB driver setup workflows.
Changes
Isolated Python installation
.venvfor EDL and its dependencies.edl/edl.batlaunchers, avoiding system-widePATHmodifications.asmandqrcodeextras.Source checkout and Loader management
Installation recovery and concurrency
USB driver setup
Documentation and tests
Testing
The following checks passed locally:
The tests cover:
USB driver operations were tested through mocks and control-flow checks; actual driver installation and physical device communication were not tested.
Related to #830.