dlang / dub

Package and build management system for D
MIT License
661 stars 227 forks source link

Refactor filesystem abstraction to and use it in production #2944

Closed Geod24 closed 4 days ago

Geod24 commented 4 days ago

Extracted from #2941

The filesystem abstraction needs to be known to production to avoid
too much code duplication. So far we have used functions in
`PackageManager` that the `TestPackageManager overrides.

With this change, we can remove them, and instead just pass an interface.
On the long run, we should be able to do dependency injection simply
by passing a different object (or overriding) the `Dub` class.

An initial attempt made `FSEntry` inherit from the `Filesystem` interface,
however that attempt was doomed as it conflates two different abstractions:
`FSEntry` is a "node" in the filesystem, which we want to act on in one
of multiple ways: move to another node, or take an action. On the other hand,
`Filesystem` is a more generic interface and takes a path as most of its
function's argument. A `path` and an `FSEntry` have a lot of overlap
(they are a reference to a node in a tree) and the resulting interface
would have been very clunky.
github-actions[bot] commented 4 days ago

✅ PR OK, no changes in deprecations or warnings

Total deprecations: 0

Total warnings: 0

Build statistics:

 statistics (-before, +after)
-executable size=5263712 bin/dub
-rough build time=60s
+executable size=5289208 bin/dub
+rough build time=61s
Full build output ``` DUB version 1.37.0, built on May 11 2024 LDC - the LLVM D compiler (1.38.0): based on DMD v2.108.1 and LLVM 18.1.5 built with LDC - the LLVM D compiler (1.38.0) 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 Upgrading project in /home/runner/work/dub/dub/ Starting Performing "release" build using /opt/hostedtoolcache/dc/ldc2-1.38.0/x64/ldc2-1.38.0-linux-x86_64/bin/ldc2 for x86_64. Building dub 1.38.1-rc.1+commit.65.g8dfac23b: building configuration [application] Linking dub STAT:statistics (-before, +after) STAT:executable size=5289208 bin/dub STAT:rough build time=61s ```