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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function git_statuses() {
|
||||||
|
local cwd="$(pwd)" dir
|
||||||
|
for dir in "$@"; do
|
||||||
|
cd "$dir" || die
|
||||||
|
git_status --porcelain
|
||||||
|
cd "$cwd"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
chdir=
|
chdir=
|
||||||
all=
|
all=
|
||||||
|
composer=
|
||||||
args=(
|
args=(
|
||||||
"afficher l'état du dépôt"
|
"afficher l'état du dépôt"
|
||||||
"[-d chdir] [-a patterns...]
|
"[-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"
|
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"
|
-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"
|
-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[@]}"
|
parse_args "$@"; set -- "${args[@]}"
|
||||||
|
|
||||||
@ -50,16 +61,23 @@ if [ -n "$all" ]; then
|
|||||||
dirs+=("${dir%/.git}")
|
dirs+=("${dir%/.git}")
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
setx cwd=pwd
|
git_statuses "${dirs[@]}"
|
||||||
for dir in "${dirs[@]}"; do
|
|
||||||
cd "$dir" || die
|
elif [ -n "$composer" ]; then
|
||||||
git_status --porcelain
|
# projets dépendants
|
||||||
cd "$cwd"
|
git_ensure_gitvcs
|
||||||
done
|
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
|
else
|
||||||
# répertoire courant uniquement
|
# répertoire courant uniquement
|
||||||
setx toplevel=git_get_toplevel
|
git_ensure_gitvcs
|
||||||
[ -n "$toplevel" ] && Cwd="$toplevel"
|
Cwd="$(git_get_toplevel)"
|
||||||
|
|
||||||
args=()
|
args=()
|
||||||
isatty || args+=(--porcelain)
|
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 {
|
function print(): void {
|
||||||
$contents = json::with($this->data, json::INDENT_TABS);
|
$contents = json::with($this->data, json::INDENT_TABS);
|
||||||
if ($contents) echo "$contents\n";
|
if ($contents) echo "$contents\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user