pman: ajout des clés match_require et match_require-dev

This commit is contained in:
Jephté Clain 2025-04-16 14:44:04 +04:00
parent 8ee13a85c0
commit 5e141b575e
5 changed files with 59 additions and 3 deletions

View File

@ -98,11 +98,17 @@ function _init_composer() {
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
composer:
match_prefix:
match_prefix-dev:
profiles: [ dev, dist ]
dev:
link: true
require:
reqire-dev:
dist:
link: false
require:
reqire-dev:
EOF
"${EDITOR:-nano}" "$config"
[ -s "$config" ] || return 1

View File

@ -68,7 +68,7 @@ class SqliteStorage extends CapacitorStorage {
if (!$this->channelExists($channel->getName())) {
# ne pas insérer si la ligne existe déjà, pour éviter d'avoir besoin d'un
# verrou en écriture
$this->_addToChannelsSql($channel);
$db->exec($this->_addToChannelsSql($channel));
}
}

View File

@ -242,6 +242,21 @@ class str {
return true;
}
/**
* vérifier si $s a le préfixe $prefix
* - si $prefix commence par /, c'est une expression régulière, et elle doit
* matcher $s
* - sinon $s doit commencer par la chaine $prefix
*/
static final function match_prefix(?string $s, ?string $prefix): bool {
if ($s === null || $prefix === null) return false;
if (substr($prefix, 0, 1) === "/") {
return preg_match($prefix, $s);
} else {
return self::_starts_with($prefix, $s);
}
}
/**
* ajouter $sep$prefix$text$suffix à $s si $text est non vide
*

View File

@ -78,7 +78,7 @@ class ComposerFile {
];
function selectProfile(string $profile, ComposerPmanFile $config): void {
$config = $config->getProfileConfig($profile);
$config = $config->getProfileConfig($profile, $this->getRequires(), $this->getRequireDevs());
// corriger les liens
$deps = cl::merge(array_keys($config["require"]), array_keys($config["require-dev"]));
$paths = [];

View File

@ -4,6 +4,7 @@ namespace nulib\tools\pman;
use nulib\A;
use nulib\ext\yaml;
use nulib\os\path;
use nulib\str;
use nulib\ValueException;
class ComposerPmanFile {
@ -49,6 +50,8 @@ class ComposerPmanFile {
$composer =& $data["composer"];
A::ensure_array($composer);
A::ensure_array($composer["profiles"]);
A::ensure_array($composer["match_require"]);
A::ensure_array($composer["match_require-dev"]);
foreach ($composer["profiles"] as $profileName) {
$profile =& $composer[$profileName];
A::ensure_array($profile);
@ -61,11 +64,43 @@ class ComposerPmanFile {
return $this->data;
}
function getProfileConfig(string $profile): array {
function getProfileConfig(string $profile, ?array $composerRequires=null, ?array $composerRequireDevs=null): array {
$config = $this->data["composer"][$profile] ?? null;
if ($config === null) {
throw new ValueException("$profile: profil invalide");
}
if ($composerRequires !== null) {
$matchRequires = $this->data["composer"]["match_require"];
foreach ($composerRequires as $dep => $version) {
$found = false;
foreach ($matchRequires as $matchRequire) {
if (str::match_prefix($dep, $matchRequire)) {
$found = true;
break;
}
}
$require = $config["require"][$dep] ?? null;
if ($found && $require === null) {
$config["require"][$dep] = $version;
}
}
}
if ($composerRequireDevs !== null) {
$matchRequireDevs = $this->data["composer"]["match_require-dev"];
foreach ($composerRequireDevs as $dep => $version) {
$found = false;
foreach ($matchRequireDevs as $matchRequireDev) {
if (str::match_prefix($dep, $matchRequireDev)) {
$found = true;
break;
}
}
$requireDev = $config["require-dev"][$dep] ?? null;
if ($found && $requireDev === null) {
$config["require"][$dep] = $version;
}
}
}
return $config;
}