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"; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user