pman: ajout des clés match_require et match_require-dev
This commit is contained in:
parent
8ee13a85c0
commit
5e141b575e
6
bin/pman
6
bin/pman
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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 = [];
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user