What's Changed
New Features
- Add
Domain\Value\Path\PathInterface::isAbsolute()
by @TravisCarden in #62 - Add an optional
$cwd
argument toInfrastructure\Value\Path\AbstractPath::__construct()
by @TravisCarden in #63 - Add
Domain\Value\Path\PathInterface::raw()
by @TravisCarden in #64 - Add
Domain\Service\Host\HostInterface
by @TravisCarden in #65 - Add an optional
$cwd
argument toInfrastructure\Factory\Path\PathFactoryInterface::create()
by @TravisCarden in #66 - Add the ability to
Domain\Service\Filesystem\FilesystemInterface
to distinguish between hard links and symlinks by @TravisCarden in #69 - Forbid symlinks pointing to a directory with
PhpFileSyncer
by @TravisCarden in #109 - Rename
PathInterface::resolve()
and::resolveRelativeTo()
by @TravisCarden in #114 - Explicitly mark the API surface by @TravisCarden in #115
- Make
Domain\Service\Host\HostInterface::isWindows()
static by @TravisCarden in #119 - Merge
Domain\Aggregate\PreconditionsTree\PreconditionsTreeInterface
intoDomain\Service\Precondition\PreconditionInterface
by @TravisCarden in #127 - Add
Infrastructure\Service\Filesystem\Filesystem::isDirEmpty()
by @TravisCarden in #155 - Make preconditions trees return the status message of the first unfulfilled child if there is one by @TravisCarden in #156
- Include "previous" exception details in thrown exception in
Filesystem::copy()
by @TravisCarden in #191 - Add precondition for host support for running independent PHP processes by @TravisCarden in #192
- Use an "exceptions" domain for all translatable exception messages by @TravisCarden in #196
- Make translation domains overridable via service by @TravisCarden in #201
- Add placeholder substitution to
TranslatableMessage::__toString()
by @TravisCarden in #203 - Eliminate dynamic properties for PHP 8.2 compatibility by @TravisCarden in #210
- Move most internal interfaces into the API by @TravisCarden in #211
- Hide Symfony Process component behind a facade by @TravisCarden in #216
- Introduce
API\Process\Value\OutputTypeEnum
for a saferAPI\Process\Service\OutputCallbackInterface
by @TravisCarden in #221 - Add
API\Process\Service\ProcessInterface::run()
by @TravisCarden in #222 - Add
API\Process\Service\ProcessInterface::setEnv()
and::getEnv()
by @TravisCarden in #224 - Make
API\Translation\Service\TranslatorInterface
an injectable service by @TravisCarden in #225 - Put Path\Value\PathList behind a factory by @TravisCarden in #239
- Rename
API\Path\Value\PathInterface::resolved()
and::resolvedRelativeTo()
to::absolute()
and::relative()
, respectively by @TravisCarden in #243 - Make
API\Path\Factory\PathFactoryInterface::create()
non-static by @TravisCarden in #249 - Add path canonicalization to
PathList
paths by @TravisCarden in #240 - Add support for Windows directory separators to
Internal\FileSyncer\Service\RsyncFileSyncer
by @TravisCarden in #250 - Merge
HostInterface
intoEnvironmentInterface
and move it into the API layer by @TravisCarden in #261 - Add
$timeout
argument to relevantAPI\Precondition\Service\PreconditionInterface
methods by @TravisCarden in #266 - Downgrade Symfony components to support Drupal 10.0.x. by @TravisCarden in #269
- Document and add tests for expanded Drupal core supported versions spread by @TravisCarden in #272
- Add
API\Process\Service\ProcessInterface::getErrorOutput()
by @TravisCarden in #273 - Inject
FileSyncerFactoryInterface
instead of depending onFileSyncerInterface
directly by @TravisCarden in #274 - Fix some untranslatable UI strings and add a PHPStan rule to prevent introducing any more by @TravisCarden in #285
- Add
API\Filesystem\Service\FilesystemInterface::filePerms()
by @TravisCarden in #304 - Stop trying to convert
fileperms()
result inInternal\Filesystem\Service\Filesystem::filePerms()
by @TravisCarden in #306 - Add
API\Filesystem\Service\FilesystemInterface::chmod()
by @TravisCarden in #303 - Replace
API\Filesystem\Service\FilesystemInterface::filePerms()
with::fileMode()
by @TravisCarden in #307 - Add
API\Filesystem\Service\FilesystemInterface::touch()
by @TravisCarden in #319 - Add
$env
argument toProcess
creation chain by @TravisCarden in #324 - Add
$cwd
argument toProcess
creation chain by @TravisCarden in #325 - Add
API\Path\Value\PathInterface::isRelative()
by @TravisCarden in #328 - Convert
PathHelper
into an injectable service by @TravisCarden in #329 - Remove
PhpFileSyncer
and addrsync
support for Windows by @TravisCarden in #334 - Add support for symlinks that point to a directory by @TravisCarden in #336
- Make sure active and staging directories are actually directories by @TravisCarden in #341
- Add
API\Precondition\Service\NoNestingOnWindowsInterface
by @TravisCarden in #342 - Make compatible with Symfony 7 by @TravisCarden in #351
- Add methods to
API\Process\Service\OutputCallbackInterface
and create an implementation by @TravisCarden in #355 - Make
ComposerIsAvailable
useComposerProcessRunner
instead ofProcessFactory
by @TravisCarden in #357 - Declare conflicts with vulnerable versions of
symfony/process
by @TravisCarden in #395
Other Changes
- Add Composer dependency on ext-json by @TravisCarden in #53
- Make Infrastructure\Service\Precondition\ComposerIsAvailable confirm that found Composer executable is actually valid by @TravisCarden in #54
- Fix spelling in phpstan.neon.dist by @alexpott in #55
- Infrastructure\Service\Finder\ExecutableFinder incorrectly caches exception backtraces by @TravisCarden in #70
- Resolve #58: Add support for select symlink types by @TravisCarden in #61
- Resolve #74: Increase minimum PHP version to 8.1 by @TravisCarden in #91
- Fix some link-related preconditions assuming all links are symlinks by @TravisCarden in #100
- Generalize AbstractLinkIteratingPrecondition as AbstractFileIteratingPrecondition by @TravisCarden in #102
- Make Infrastructure\Service\FileSyncer\RsyncFileSyncer::sync() respect $timeout by @TravisCarden in #104
- Add Domain\Service\Filesystem\FilesystemInterface::isDir() and isFile() methods by @TravisCarden in #108
- Filesystem::readLink() resolves links relative to the PHP process' CWD instead of the link directory by @TravisCarden in #110
- Normalize exception codes at default values by @TravisCarden in #111
- Resolve #103: Make Infrastructure\Value\PathList\PathList::add() variadic. by @TravisCarden in #116
- Resolve #76: Add Domain\Aggregate\PreconditionsTree\ActiveDirIsReadyInterface by @TravisCarden in #117
- Minor observations from review by @larowlan in #118
- Move core domain classes up a namespace level by @TravisCarden in #128
- Fold
PathList
package intoPath
by @TravisCarden in #146 - Resolve #123: Add support for string translation for names, descriptions, and messages by @TravisCarden in #141
- Rename
RecursiveFileFinderInterface
toFileFinderInterface
by @TravisCarden in #181 - Reorganize directories: flip packages and DDD categories by @TravisCarden in #184
- Rename "Domain" and "Infrastructure" layers to "API" and "Internal", respectively by @TravisCarden in #185
- Rearrange classes between API/Internal layers by @TravisCarden in #190
- Make translation locales overridable via service by @TravisCarden in #208
- Move
ProcessRunnerInterface::DEFAULT_TIMEOUT
toProcessInterface
by @TravisCarden in #218 - Add performance testing for preconditions and file syncers by @TravisCarden in #230
- Remove unused
API\Path\Value\PathInterface::raw()
by @TravisCarden in #244 - Fix #172: Replace custom path-handling with Symfony Filesystem by @TravisCarden in #246
- Make
$timeout
arguments non-nullable by @TravisCarden in #254 - Degrade gracefully when
set_time_limit()
is disabled by @TravisCarden in #256 - Add mutation testing by @TravisCarden in #277
- Add ComposerRequireChecker for transitive dependency detection by @TravisCarden in #278
- Add value deduplication to
Internal\Path\Value\PathList::getAll()
by @TravisCarden in #279 - Make
API\Filesystem\Service\FilesystemInterface::copy()
preserve file permissions by @TravisCarden in #308 - Rename
FilesystemInterface::exists()
to::fileExists()
by @TravisCarden in #314 - Remove
API\Filesystem\Service\FilesystemInterface::isDirEmpty()
by @TravisCarden in #316 - Rename
Internal\Filesystem\Service\Filesystem::remove()
to::rm()
by @TravisCarden in #318 - Add tests for syncing permissions and empty directories by @TravisCarden in #337
- Add tests that the file syncer can copy a Git directory. by @TravisCarden in #338
- Remove now-unused methods on
API\Filesystem\Service\FilesystemInterface
by @TravisCarden in #339 - Make
API\Filesystem\Service\FilesystemInterface::isDir()
and::isFile()
resolve links like their PHP built-in counterparts by @TravisCarden in #340 - Wire new preconditions up to
CommonPreconditions
by @TravisCarden in #345 - Stop returning
self
fromAPI\Process\Service\ProcessInterface
methods by @TravisCarden in #347 - Update tests to include PHP 8.3 on GitHub Actions by @TravisCarden in #352
- Make
FileSyncer
skip files based on contents, not modification time and filesize by @TravisCarden in #365 - Fix process error output-capturing broken by upstream regression by @TravisCarden in #368
- Outright fork Symfony Process by @TravisCarden in #371
- Remove temporary Symfony Process fork by @TravisCarden in #374
- Add
SECURITY.md
by @TravisCarden in #85 - Add
GOVERNANCE.md
by @TravisCarden in #299 - Make
Internal\Precondition\Service\RsyncIsAvailable
more robust by @TravisCarden in #396 - Stop looking for a PHAR file version of Composer by @TravisCarden in #399
- Upgrade PHPUnit to 10.x by @TravisCarden in #400
- Remove uncommon dev dependencies by @TravisCarden in #401
- Add extra dev dependencies back as a separate "package" by @TravisCarden in #404
New Contributors
Full Changelog: v1.2.0...v2.0.0