p: support des projets dépendants composer
This commit is contained in:
parent
01c65a6e6a
commit
9def939cf1
14
bin/_pman-composer_local_deps.php
Executable file
14
bin/_pman-composer_local_deps.php
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
require __DIR__ . "/../vendor/autoload.php";
|
||||
|
||||
use nulib\tools\pman\ComposerFile;
|
||||
use nulib\tools\pman\PmanYamlConfigFile;
|
||||
use nulib\ValueException;
|
||||
|
||||
$composer = new ComposerFile();
|
||||
|
||||
$deps = $composer->getLocalDeps();
|
||||
foreach ($deps as $dep => $path) {
|
||||
echo "$path\n";
|
||||
}
|
34
bin/p
34
bin/p
@ -20,8 +20,18 @@ function git_status() {
|
||||
fi
|
||||
}
|
||||
|
||||
function git_statuses() {
|
||||
local cwd="$(pwd)" dir
|
||||
for dir in "$@"; do
|
||||
cd "$dir" || die
|
||||
git_status --porcelain
|
||||
cd "$cwd"
|
||||
done
|
||||
}
|
||||
|
||||
chdir=
|
||||
all=
|
||||
composer=
|
||||
args=(
|
||||
"afficher l'état du dépôt"
|
||||
"[-d chdir] [-a patterns...]
|
||||
@ -29,6 +39,7 @@ args=(
|
||||
Si l'option -a est utilisée, ce script accepte comme arguments une liste de patterns permettant de filtrer les répertoires concernés"
|
||||
-d:,--chdir:BASEDIR chdir= "répertoire dans lequel se placer avant de lancer les opérations"
|
||||
-a,--all all=1 "faire l'opération sur tous les sous-répertoires de BASEDIR qui sont des dépôts git"
|
||||
-r,--composer composer=1 "faire l'opération sur tous les projets composer dépendants"
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
@ -50,16 +61,23 @@ if [ -n "$all" ]; then
|
||||
dirs+=("${dir%/.git}")
|
||||
done
|
||||
fi
|
||||
setx cwd=pwd
|
||||
for dir in "${dirs[@]}"; do
|
||||
cd "$dir" || die
|
||||
git_status --porcelain
|
||||
cd "$cwd"
|
||||
done
|
||||
git_statuses "${dirs[@]}"
|
||||
|
||||
elif [ -n "$composer" ]; then
|
||||
# projets dépendants
|
||||
git_ensure_gitvcs
|
||||
setx toplevel=git_get_toplevel
|
||||
cd "$toplevel" || die
|
||||
setx cwd=ppath2 . "$OrigCwd"
|
||||
[ -f composer.json ] || die "$cwd: ce n'est pas un projet composer"
|
||||
|
||||
setx -a dirs="$MYDIR/_pman-composer_local_deps.php"
|
||||
git_statuses "${dirs[@]}"
|
||||
|
||||
else
|
||||
# répertoire courant uniquement
|
||||
setx toplevel=git_get_toplevel
|
||||
[ -n "$toplevel" ] && Cwd="$toplevel"
|
||||
git_ensure_gitvcs
|
||||
Cwd="$(git_get_toplevel)"
|
||||
|
||||
args=()
|
||||
isatty || args+=(--porcelain)
|
||||
|
@ -138,6 +138,28 @@ class ComposerFile {
|
||||
}
|
||||
}
|
||||
|
||||
function getLocalDeps(): array {
|
||||
$deps = cl::merge(array_keys($this->getRequires()), array_keys($this->getRequireDevs()));
|
||||
$paths = [];
|
||||
foreach ($deps as $dep) {
|
||||
$path = cl::get(self::PATHS, $dep, $dep);
|
||||
$path = str_replace("/", "-", $path);
|
||||
$path = "../$path";
|
||||
$paths[$dep] = $path;
|
||||
}
|
||||
$repositories = $this->getRepositories();
|
||||
$localDeps = [];
|
||||
foreach ($deps as $dep) {
|
||||
foreach ($repositories as $key => $repository) {
|
||||
if ($repository["type"] === "path" && $repository["url"] === $paths[$dep]) {
|
||||
$localDeps[$dep] = $repository["url"];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $localDeps;
|
||||
}
|
||||
|
||||
function print(): void {
|
||||
$contents = json::with($this->data, json::INDENT_TABS);
|
||||
if ($contents) echo "$contents\n";
|
||||
|
Loading…
Reference in New Issue
Block a user