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
|
# -*- coding: utf-8 mode: yaml -*- vim:sw=2:sts=2:et:ai:si:sta:fenc=utf-8
|
||||||
|
|
||||||
composer:
|
composer:
|
||||||
|
match_prefix:
|
||||||
|
match_prefix-dev:
|
||||||
profiles: [ dev, dist ]
|
profiles: [ dev, dist ]
|
||||||
dev:
|
dev:
|
||||||
link: true
|
link: true
|
||||||
|
require:
|
||||||
|
reqire-dev:
|
||||||
dist:
|
dist:
|
||||||
link: false
|
link: false
|
||||||
|
require:
|
||||||
|
reqire-dev:
|
||||||
EOF
|
EOF
|
||||||
"${EDITOR:-nano}" "$config"
|
"${EDITOR:-nano}" "$config"
|
||||||
[ -s "$config" ] || return 1
|
[ -s "$config" ] || return 1
|
||||||
|
@ -68,7 +68,7 @@ class SqliteStorage extends CapacitorStorage {
|
|||||||
if (!$this->channelExists($channel->getName())) {
|
if (!$this->channelExists($channel->getName())) {
|
||||||
# ne pas insérer si la ligne existe déjà, pour éviter d'avoir besoin d'un
|
# ne pas insérer si la ligne existe déjà, pour éviter d'avoir besoin d'un
|
||||||
# verrou en écriture
|
# verrou en écriture
|
||||||
$this->_addToChannelsSql($channel);
|
$db->exec($this->_addToChannelsSql($channel));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,6 +242,21 @@ class str {
|
|||||||
return true;
|
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
|
* ajouter $sep$prefix$text$suffix à $s si $text est non vide
|
||||||
*
|
*
|
||||||
|
@ -78,7 +78,7 @@ class ComposerFile {
|
|||||||
];
|
];
|
||||||
|
|
||||||
function selectProfile(string $profile, ComposerPmanFile $config): void {
|
function selectProfile(string $profile, ComposerPmanFile $config): void {
|
||||||
$config = $config->getProfileConfig($profile);
|
$config = $config->getProfileConfig($profile, $this->getRequires(), $this->getRequireDevs());
|
||||||
// corriger les liens
|
// corriger les liens
|
||||||
$deps = cl::merge(array_keys($config["require"]), array_keys($config["require-dev"]));
|
$deps = cl::merge(array_keys($config["require"]), array_keys($config["require-dev"]));
|
||||||
$paths = [];
|
$paths = [];
|
||||||
|
@ -4,6 +4,7 @@ namespace nulib\tools\pman;
|
|||||||
use nulib\A;
|
use nulib\A;
|
||||||
use nulib\ext\yaml;
|
use nulib\ext\yaml;
|
||||||
use nulib\os\path;
|
use nulib\os\path;
|
||||||
|
use nulib\str;
|
||||||
use nulib\ValueException;
|
use nulib\ValueException;
|
||||||
|
|
||||||
class ComposerPmanFile {
|
class ComposerPmanFile {
|
||||||
@ -49,6 +50,8 @@ class ComposerPmanFile {
|
|||||||
$composer =& $data["composer"];
|
$composer =& $data["composer"];
|
||||||
A::ensure_array($composer);
|
A::ensure_array($composer);
|
||||||
A::ensure_array($composer["profiles"]);
|
A::ensure_array($composer["profiles"]);
|
||||||
|
A::ensure_array($composer["match_require"]);
|
||||||
|
A::ensure_array($composer["match_require-dev"]);
|
||||||
foreach ($composer["profiles"] as $profileName) {
|
foreach ($composer["profiles"] as $profileName) {
|
||||||
$profile =& $composer[$profileName];
|
$profile =& $composer[$profileName];
|
||||||
A::ensure_array($profile);
|
A::ensure_array($profile);
|
||||||
@ -61,11 +64,43 @@ class ComposerPmanFile {
|
|||||||
return $this->data;
|
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;
|
$config = $this->data["composer"][$profile] ?? null;
|
||||||
if ($config === null) {
|
if ($config === null) {
|
||||||
throw new ValueException("$profile: profil invalide");
|
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;
|
return $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user