Skip to content

PackageManager: Support directly loading a sub-package via path-based getOrLoadPackage() #2977

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 14, 2025

Conversation

kinke
Copy link
Contributor

@kinke kinke commented Nov 5, 2024

To avoid a costly full packages scan to resolve the sub-package later.

Copy link

github-actions bot commented Nov 5, 2024

✅ PR OK, no changes in deprecations or warnings

Total deprecations: 0

Total warnings: 0

Build statistics:

 statistics (-before, +after)
-executable size=5105200 bin/dub
+executable size=5109296 bin/dub
 rough build time=60s
Full build output
DUB version 1.39.0, built on Mar 20 2025
LDC - the LLVM D compiler (1.40.1):
  based on DMD v2.110.0 and LLVM 19.1.7
  built with LDC - the LLVM D compiler (1.40.1)
  Default target: x86_64-unknown-linux-gnu
  Host CPU: znver3
  http://dlang.org - http://wiki.dlang.org/LDC


  Registered Targets:
    aarch64     - AArch64 (little endian)
    aarch64_32  - AArch64 (little endian ILP32)
    aarch64_be  - AArch64 (big endian)
    amdgcn      - AMD GCN GPUs
    arm         - ARM
    arm64       - ARM64 (little endian)
    arm64_32    - ARM64 (little endian ILP32)
    armeb       - ARM (big endian)
    avr         - Atmel AVR Microcontroller
    bpf         - BPF (host endian)
    bpfeb       - BPF (big endian)
    bpfel       - BPF (little endian)
    hexagon     - Hexagon
    lanai       - Lanai
    loongarch32 - 32-bit LoongArch
    loongarch64 - 64-bit LoongArch
    mips        - MIPS (32-bit big endian)
    mips64      - MIPS (64-bit big endian)
    mips64el    - MIPS (64-bit little endian)
    mipsel      - MIPS (32-bit little endian)
    msp430      - MSP430 [experimental]
    nvptx       - NVIDIA PTX 32-bit
    nvptx64     - NVIDIA PTX 64-bit
    ppc32       - PowerPC 32
    ppc32le     - PowerPC 32 LE
    ppc64       - PowerPC 64
    ppc64le     - PowerPC 64 LE
    r600        - AMD GPUs HD2XXX-HD6XXX
    riscv32     - 32-bit RISC-V
    riscv64     - 64-bit RISC-V
    sparc       - Sparc
    sparcel     - Sparc LE
    sparcv9     - Sparc V9
    spirv       - SPIR-V Logical
    spirv32     - SPIR-V 32-bit
    spirv64     - SPIR-V 64-bit
    systemz     - SystemZ
    thumb       - Thumb
    thumbeb     - Thumb (big endian)
    ve          - VE
    wasm32      - WebAssembly 32-bit
    wasm64      - WebAssembly 64-bit
    x86         - 32-bit X86: Pentium-Pro and above
    x86-64      - 64-bit X86: EM64T and AMD64
    xcore       - XCore
    xtensa      - Xtensa 32
   Upgrading project in /home/runner/work/dub/dub/
    Starting Performing "release" build using /opt/hostedtoolcache/dc/ldc2-1.40.1/x64/ldc2-1.40.1-linux-x86_64/bin/ldc2 for x86_64.
    Building dub 1.39.0-rc.1+commit.55.g1ad1bfa6: building configuration [application]
     Linking dub
STAT:statistics (-before, +after)
STAT:executable size=5109296 bin/dub
STAT:rough build time=60s

@@ -271,7 +271,8 @@ class PackageManager {
foreach (ovr; repo.overrides)
if (ovr.package_ == name.toString() && ovr.source.matches(ver)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the overrides should only apply to base packages as a whole, not on a sub-package basis. I.e., ovr.package_ == name.main.toString().

@kinke kinke marked this pull request as draft November 5, 2024 22:20
@kinke kinke force-pushed the path_based_subpackages branch 2 times, most recently from c6c8a6b to 8aec744 Compare November 6, 2024 14:26
@kinke kinke marked this pull request as ready for review November 6, 2024 15:30
mode = Whether to issue errors, warning, or ignore unknown keys in dub.json

Returns: The packages loaded from the given path
Throws: Throws an exception if no package can be loaded
*/
Package getOrLoadPackage(NativePath path, NativePath recipe_path = NativePath.init,
bool allow_sub_packages = false, StrictMode mode = StrictMode.Ignore)
PackageName name = PackageName.init, StrictMode mode = StrictMode.Ignore)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The breaking API change is in a separate 2nd commit, in case we cannot/don't want to break it.

@Geod24
Copy link
Member

Geod24 commented May 14, 2025

LGTM. Feel free to rebase + merge. I've been wanting to have a much more in-depth change to the PackageManager since forever (storing packages hierarchically in memory) but never finished it. I think that's a pretty good improvement, sorry for forgetting to review it for so long.

kinke added 2 commits May 15, 2025 00:53
… getOrLoadPackage()

To avoid a costly full packages scan to resolve the sub-package later.
@kinke kinke force-pushed the path_based_subpackages branch from 2cc1e07 to 07a6a5f Compare May 14, 2025 22:53
@dlang-bot dlang-bot merged commit 8d4060f into dlang:master May 14, 2025
32 checks passed
@kinke kinke deleted the path_based_subpackages branch May 14, 2025 23:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants