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