dependabot-composer 0.95.49 → 0.95.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (900) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/vendor/autoload.php +7 -0
  3. data/helpers/vendor/bin/composer +1 -0
  4. data/helpers/vendor/bin/jsonlint +1 -0
  5. data/helpers/vendor/bin/validate-json +1 -0
  6. data/helpers/vendor/composer/ClassLoader.php +445 -0
  7. data/helpers/vendor/composer/LICENSE +21 -0
  8. data/helpers/vendor/composer/autoload_classmap.php +9 -0
  9. data/helpers/vendor/composer/autoload_files.php +11 -0
  10. data/helpers/vendor/composer/autoload_namespaces.php +9 -0
  11. data/helpers/vendor/composer/autoload_psr4.php +26 -0
  12. data/helpers/vendor/composer/autoload_real.php +70 -0
  13. data/helpers/vendor/composer/autoload_static.php +128 -0
  14. data/helpers/vendor/composer/ca-bundle/LICENSE +19 -0
  15. data/helpers/vendor/composer/ca-bundle/README.md +85 -0
  16. data/helpers/vendor/composer/ca-bundle/composer.json +54 -0
  17. data/helpers/vendor/composer/ca-bundle/res/cacert.pem +3240 -0
  18. data/helpers/vendor/composer/ca-bundle/src/CaBundle.php +308 -0
  19. data/helpers/vendor/composer/composer/.gitattributes +12 -0
  20. data/helpers/vendor/composer/composer/.github/CONTRIBUTING.md +59 -0
  21. data/helpers/vendor/composer/composer/.github/ISSUE_TEMPLATE.md +25 -0
  22. data/helpers/vendor/composer/composer/.gitignore +11 -0
  23. data/helpers/vendor/composer/composer/.php_cs +58 -0
  24. data/helpers/vendor/composer/composer/.travis.yml +76 -0
  25. data/helpers/vendor/composer/composer/CHANGELOG.md +767 -0
  26. data/helpers/vendor/composer/composer/LICENSE +19 -0
  27. data/helpers/vendor/composer/composer/PORTING_INFO +39 -0
  28. data/helpers/vendor/composer/composer/README.md +62 -0
  29. data/helpers/vendor/composer/composer/appveyor.yml +33 -0
  30. data/helpers/vendor/composer/composer/bin/compile +31 -0
  31. data/helpers/vendor/composer/composer/bin/composer +57 -0
  32. data/helpers/vendor/composer/composer/composer.json +81 -0
  33. data/helpers/vendor/composer/composer/composer.lock +1800 -0
  34. data/helpers/vendor/composer/composer/doc/00-intro.md +156 -0
  35. data/helpers/vendor/composer/composer/doc/01-basic-usage.md +266 -0
  36. data/helpers/vendor/composer/composer/doc/02-libraries.md +153 -0
  37. data/helpers/vendor/composer/composer/doc/03-cli.md +931 -0
  38. data/helpers/vendor/composer/composer/doc/04-schema.md +924 -0
  39. data/helpers/vendor/composer/composer/doc/05-repositories.md +713 -0
  40. data/helpers/vendor/composer/composer/doc/06-config.md +277 -0
  41. data/helpers/vendor/composer/composer/doc/07-community.md +35 -0
  42. data/helpers/vendor/composer/composer/doc/articles/aliases.md +105 -0
  43. data/helpers/vendor/composer/composer/doc/articles/autoloader-optimization.md +111 -0
  44. data/helpers/vendor/composer/composer/doc/articles/custom-installers.md +204 -0
  45. data/helpers/vendor/composer/composer/doc/articles/handling-private-packages-with-satis.md +343 -0
  46. data/helpers/vendor/composer/composer/doc/articles/http-basic-authentication.md +59 -0
  47. data/helpers/vendor/composer/composer/doc/articles/plugins.md +285 -0
  48. data/helpers/vendor/composer/composer/doc/articles/scripts.md +304 -0
  49. data/helpers/vendor/composer/composer/doc/articles/troubleshooting.md +309 -0
  50. data/helpers/vendor/composer/composer/doc/articles/vendor-binaries.md +110 -0
  51. data/helpers/vendor/composer/composer/doc/articles/versions.md +230 -0
  52. data/helpers/vendor/composer/composer/doc/dev/DefaultPolicy.md +55 -0
  53. data/helpers/vendor/composer/composer/doc/faqs/how-do-i-install-a-package-to-a-custom-path-for-my-framework.md +50 -0
  54. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-composer-programmatically.md +42 -0
  55. data/helpers/vendor/composer/composer/doc/faqs/how-to-install-untrusted-packages-safely.md +19 -0
  56. data/helpers/vendor/composer/composer/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md +32 -0
  57. data/helpers/vendor/composer/composer/doc/faqs/which-version-numbering-system-does-composer-itself-use.md +4 -0
  58. data/helpers/vendor/composer/composer/doc/faqs/why-are-unbound-version-constraints-a-bad-idea.md +21 -0
  59. data/helpers/vendor/composer/composer/doc/faqs/why-are-version-constraints-combining-comparisons-and-wildcards-a-bad-idea.md +21 -0
  60. data/helpers/vendor/composer/composer/doc/faqs/why-can't-composer-load-repositories-recursively.md +35 -0
  61. data/helpers/vendor/composer/composer/doc/fixtures/fixtures.md +22 -0
  62. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-plain/packages.json +158 -0
  63. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/bar/baz$923363b3c22e73abb2e3fd891c8156dd4d0821a97fd3e428bc910833e3e46dbe.json +50 -0
  64. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/foo/bar$4baabb3303afa3e34a4d3af18fb138e5f3b79029c1f8d9ab5b477ea15776ba0a.json +77 -0
  65. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/gar/nix$5d210670cb46c8364c8e3fb449967b9bea558b971e5b082f330ae4f1d484c321.json +50 -0
  66. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/provider-active$1893a061e579543822389ecd12d791c612db0c05e22d90e9286e233cacd86ed8.json +16 -0
  67. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/p/qux/quux$c142d1a07ca354be46b613f59f1d601923a5a00ccc5fcce50a77ecdd461eb72d.json +22 -0
  68. data/helpers/vendor/composer/composer/doc/fixtures/repo-composer-with-providers/packages.json +9 -0
  69. data/helpers/vendor/composer/composer/phpunit.xml.dist +35 -0
  70. data/helpers/vendor/composer/composer/res/composer-repository-schema.json +110 -0
  71. data/helpers/vendor/composer/composer/res/composer-schema.json +843 -0
  72. data/helpers/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php +1057 -0
  73. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php +445 -0
  74. data/helpers/vendor/composer/composer/src/Composer/Autoload/ClassMapGenerator.php +222 -0
  75. data/helpers/vendor/composer/composer/src/Composer/Cache.php +251 -0
  76. data/helpers/vendor/composer/composer/src/Composer/Command/AboutCommand.php +46 -0
  77. data/helpers/vendor/composer/composer/src/Composer/Command/ArchiveCommand.php +165 -0
  78. data/helpers/vendor/composer/composer/src/Composer/Command/BaseCommand.php +181 -0
  79. data/helpers/vendor/composer/composer/src/Composer/Command/BaseDependencyCommand.php +255 -0
  80. data/helpers/vendor/composer/composer/src/Composer/Command/CheckPlatformReqsCommand.php +156 -0
  81. data/helpers/vendor/composer/composer/src/Composer/Command/ClearCacheCommand.php +72 -0
  82. data/helpers/vendor/composer/composer/src/Composer/Command/ConfigCommand.php +704 -0
  83. data/helpers/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php +384 -0
  84. data/helpers/vendor/composer/composer/src/Composer/Command/DependsCommand.php +56 -0
  85. data/helpers/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php +728 -0
  86. data/helpers/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php +86 -0
  87. data/helpers/vendor/composer/composer/src/Composer/Command/ExecCommand.php +90 -0
  88. data/helpers/vendor/composer/composer/src/Composer/Command/GlobalCommand.php +110 -0
  89. data/helpers/vendor/composer/composer/src/Composer/Command/HomeCommand.php +166 -0
  90. data/helpers/vendor/composer/composer/src/Composer/Command/InitCommand.php +795 -0
  91. data/helpers/vendor/composer/composer/src/Composer/Command/InstallCommand.php +123 -0
  92. data/helpers/vendor/composer/composer/src/Composer/Command/LicensesCommand.php +158 -0
  93. data/helpers/vendor/composer/composer/src/Composer/Command/OutdatedCommand.php +95 -0
  94. data/helpers/vendor/composer/composer/src/Composer/Command/ProhibitsCommand.php +56 -0
  95. data/helpers/vendor/composer/composer/src/Composer/Command/RemoveCommand.php +162 -0
  96. data/helpers/vendor/composer/composer/src/Composer/Command/RequireCommand.php +243 -0
  97. data/helpers/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php +139 -0
  98. data/helpers/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php +64 -0
  99. data/helpers/vendor/composer/composer/src/Composer/Command/SearchCommand.php +82 -0
  100. data/helpers/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php +404 -0
  101. data/helpers/vendor/composer/composer/src/Composer/Command/ShowCommand.php +1014 -0
  102. data/helpers/vendor/composer/composer/src/Composer/Command/StatusCommand.php +213 -0
  103. data/helpers/vendor/composer/composer/src/Composer/Command/SuggestsCommand.php +151 -0
  104. data/helpers/vendor/composer/composer/src/Composer/Command/UpdateCommand.php +227 -0
  105. data/helpers/vendor/composer/composer/src/Composer/Command/ValidateCommand.php +171 -0
  106. data/helpers/vendor/composer/composer/src/Composer/Compiler.php +283 -0
  107. data/helpers/vendor/composer/composer/src/Composer/Composer.php +246 -0
  108. data/helpers/vendor/composer/composer/src/Composer/Config.php +455 -0
  109. data/helpers/vendor/composer/composer/src/Composer/Config/ConfigSourceInterface.php +91 -0
  110. data/helpers/vendor/composer/composer/src/Composer/Config/JsonConfigSource.php +267 -0
  111. data/helpers/vendor/composer/composer/src/Composer/Console/Application.php +481 -0
  112. data/helpers/vendor/composer/composer/src/Composer/Console/HtmlOutputFormatter.php +90 -0
  113. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Decisions.php +199 -0
  114. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php +285 -0
  115. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/GenericRule.php +91 -0
  116. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/InstallOperation.php +66 -0
  117. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php +67 -0
  118. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php +67 -0
  119. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/OperationInterface.php +42 -0
  120. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/SolverOperation.php +50 -0
  121. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UninstallOperation.php +66 -0
  122. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Operation/UpdateOperation.php +80 -0
  123. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/PolicyInterface.php +27 -0
  124. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Pool.php +378 -0
  125. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Problem.php +253 -0
  126. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Request.php +78 -0
  127. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule.php +263 -0
  128. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Rule2Literals.php +113 -0
  129. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSet.php +176 -0
  130. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php +372 -0
  131. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleSetIterator.php +94 -0
  132. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchChain.php +52 -0
  133. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php +144 -0
  134. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php +113 -0
  135. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Solver.php +868 -0
  136. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverBugException.php +27 -0
  137. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/SolverProblemsException.php +88 -0
  138. data/helpers/vendor/composer/composer/src/Composer/DependencyResolver/Transaction.php +244 -0
  139. data/helpers/vendor/composer/composer/src/Composer/Downloader/ArchiveDownloader.php +135 -0
  140. data/helpers/vendor/composer/composer/src/Composer/Downloader/ChangeReportInterface.php +32 -0
  141. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloadManager.php +325 -0
  142. data/helpers/vendor/composer/composer/src/Composer/Downloader/DownloaderInterface.php +64 -0
  143. data/helpers/vendor/composer/composer/src/Composer/Downloader/DvcsDownloaderInterface.php +32 -0
  144. data/helpers/vendor/composer/composer/src/Composer/Downloader/FileDownloader.php +322 -0
  145. data/helpers/vendor/composer/composer/src/Composer/Downloader/FilesystemException.php +26 -0
  146. data/helpers/vendor/composer/composer/src/Composer/Downloader/FossilDownloader.php +116 -0
  147. data/helpers/vendor/composer/composer/src/Composer/Downloader/GitDownloader.php +516 -0
  148. data/helpers/vendor/composer/composer/src/Composer/Downloader/GzipDownloader.php +84 -0
  149. data/helpers/vendor/composer/composer/src/Composer/Downloader/HgDownloader.php +100 -0
  150. data/helpers/vendor/composer/composer/src/Composer/Downloader/PathDownloader.php +175 -0
  151. data/helpers/vendor/composer/composer/src/Composer/Downloader/PearPackageExtractor.php +266 -0
  152. data/helpers/vendor/composer/composer/src/Composer/Downloader/PerforceDownloader.php +114 -0
  153. data/helpers/vendor/composer/composer/src/Composer/Downloader/PharDownloader.php +36 -0
  154. data/helpers/vendor/composer/composer/src/Composer/Downloader/RarDownloader.php +91 -0
  155. data/helpers/vendor/composer/composer/src/Composer/Downloader/SvnDownloader.php +225 -0
  156. data/helpers/vendor/composer/composer/src/Composer/Downloader/TarDownloader.php +31 -0
  157. data/helpers/vendor/composer/composer/src/Composer/Downloader/TransportException.php +53 -0
  158. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsCapableDownloaderInterface.php +32 -0
  159. data/helpers/vendor/composer/composer/src/Composer/Downloader/VcsDownloader.php +293 -0
  160. data/helpers/vendor/composer/composer/src/Composer/Downloader/XzDownloader.php +60 -0
  161. data/helpers/vendor/composer/composer/src/Composer/Downloader/ZipDownloader.php +230 -0
  162. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/Event.php +103 -0
  163. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php +536 -0
  164. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/EventSubscriberInterface.php +48 -0
  165. data/helpers/vendor/composer/composer/src/Composer/EventDispatcher/ScriptExecutionException.php +20 -0
  166. data/helpers/vendor/composer/composer/src/Composer/Exception/NoSslException.php +20 -0
  167. data/helpers/vendor/composer/composer/src/Composer/Factory.php +653 -0
  168. data/helpers/vendor/composer/composer/src/Composer/IO/BaseIO.php +255 -0
  169. data/helpers/vendor/composer/composer/src/Composer/IO/BufferIO.php +59 -0
  170. data/helpers/vendor/composer/composer/src/Composer/IO/ConsoleIO.php +322 -0
  171. data/helpers/vendor/composer/composer/src/Composer/IO/IOInterface.php +207 -0
  172. data/helpers/vendor/composer/composer/src/Composer/IO/NullIO.php +129 -0
  173. data/helpers/vendor/composer/composer/src/Composer/Installer.php +1793 -0
  174. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php +210 -0
  175. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryPresenceInterface.php +30 -0
  176. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallationManager.php +326 -0
  177. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvent.php +161 -0
  178. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerEvents.php +43 -0
  179. data/helpers/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php +79 -0
  180. data/helpers/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php +232 -0
  181. data/helpers/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php +81 -0
  182. data/helpers/vendor/composer/composer/src/Composer/Installer/NoopInstaller.php +88 -0
  183. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvent.php +65 -0
  184. data/helpers/vendor/composer/composer/src/Composer/Installer/PackageEvents.php +75 -0
  185. data/helpers/vendor/composer/composer/src/Composer/Installer/PearBinaryInstaller.php +144 -0
  186. data/helpers/vendor/composer/composer/src/Composer/Installer/PearInstaller.php +84 -0
  187. data/helpers/vendor/composer/composer/src/Composer/Installer/PluginInstaller.php +84 -0
  188. data/helpers/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php +99 -0
  189. data/helpers/vendor/composer/composer/src/Composer/Installer/SuggestedPackagesReporter.php +151 -0
  190. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFile.php +301 -0
  191. data/helpers/vendor/composer/composer/src/Composer/Json/JsonFormatter.php +134 -0
  192. data/helpers/vendor/composer/composer/src/Composer/Json/JsonManipulator.php +521 -0
  193. data/helpers/vendor/composer/composer/src/Composer/Json/JsonValidationException.php +34 -0
  194. data/helpers/vendor/composer/composer/src/Composer/Package/AliasPackage.php +404 -0
  195. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFilter.php +44 -0
  196. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php +105 -0
  197. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php +178 -0
  198. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ArchiverInterface.php +43 -0
  199. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php +148 -0
  200. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ComposerExcludeFilter.php +31 -0
  201. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/GitExcludeFilter.php +79 -0
  202. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/HgExcludeFilter.php +107 -0
  203. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/PharArchiver.php +97 -0
  204. data/helpers/vendor/composer/composer/src/Composer/Package/Archiver/ZipArchiver.php +74 -0
  205. data/helpers/vendor/composer/composer/src/Composer/Package/BasePackage.php +250 -0
  206. data/helpers/vendor/composer/composer/src/Composer/Package/Comparer/Comparer.php +129 -0
  207. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackage.php +199 -0
  208. data/helpers/vendor/composer/composer/src/Composer/Package/CompletePackageInterface.php +95 -0
  209. data/helpers/vendor/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php +145 -0
  210. data/helpers/vendor/composer/composer/src/Composer/Package/Link.php +128 -0
  211. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/EmptyConstraint.php +24 -0
  212. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php +24 -0
  213. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/MultiConstraint.php +24 -0
  214. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php +24 -0
  215. data/helpers/vendor/composer/composer/src/Composer/Package/LinkConstraint/VersionConstraint.php +24 -0
  216. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php +290 -0
  217. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/InvalidPackageException.php +46 -0
  218. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/JsonLoader.php +45 -0
  219. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/LoaderInterface.php +30 -0
  220. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php +241 -0
  221. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php +461 -0
  222. data/helpers/vendor/composer/composer/src/Composer/Package/Locker.php +438 -0
  223. data/helpers/vendor/composer/composer/src/Composer/Package/Package.php +612 -0
  224. data/helpers/vendor/composer/composer/src/Composer/Package/PackageInterface.php +361 -0
  225. data/helpers/vendor/composer/composer/src/Composer/Package/RootAliasPackage.php +173 -0
  226. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackage.php +136 -0
  227. data/helpers/vendor/composer/composer/src/Composer/Package/RootPackageInterface.php +142 -0
  228. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionGuesser.php +302 -0
  229. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionParser.php +81 -0
  230. data/helpers/vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php +176 -0
  231. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/Capability.php +23 -0
  232. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capability/CommandProvider.php +33 -0
  233. data/helpers/vendor/composer/composer/src/Composer/Plugin/Capable.php +43 -0
  234. data/helpers/vendor/composer/composer/src/Composer/Plugin/CommandEvent.php +88 -0
  235. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginEvents.php +61 -0
  236. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginInterface.php +39 -0
  237. data/helpers/vendor/composer/composer/src/Composer/Plugin/PluginManager.php +403 -0
  238. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreCommandRunEvent.php +68 -0
  239. data/helpers/vendor/composer/composer/src/Composer/Plugin/PreFileDownloadEvent.php +78 -0
  240. data/helpers/vendor/composer/composer/src/Composer/Question/StrictConfirmationQuestion.php +94 -0
  241. data/helpers/vendor/composer/composer/src/Composer/Repository/ArrayRepository.php +208 -0
  242. data/helpers/vendor/composer/composer/src/Composer/Repository/ArtifactRepository.php +167 -0
  243. data/helpers/vendor/composer/composer/src/Composer/Repository/BaseRepository.php +157 -0
  244. data/helpers/vendor/composer/composer/src/Composer/Repository/ComposerRepository.php +838 -0
  245. data/helpers/vendor/composer/composer/src/Composer/Repository/CompositeRepository.php +164 -0
  246. data/helpers/vendor/composer/composer/src/Composer/Repository/ConfigurableRepositoryInterface.php +23 -0
  247. data/helpers/vendor/composer/composer/src/Composer/Repository/FilesystemRepository.php +92 -0
  248. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledArrayRepository.php +24 -0
  249. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledFilesystemRepository.php +22 -0
  250. data/helpers/vendor/composer/composer/src/Composer/Repository/InstalledRepositoryInterface.php +24 -0
  251. data/helpers/vendor/composer/composer/src/Composer/Repository/InvalidRepositoryException.php +22 -0
  252. data/helpers/vendor/composer/composer/src/Composer/Repository/PackageRepository.php +61 -0
  253. data/helpers/vendor/composer/composer/src/Composer/Repository/PathRepository.php +190 -0
  254. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/BaseChannelReader.php +82 -0
  255. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelInfo.php +67 -0
  256. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelReader.php +101 -0
  257. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest10Reader.php +164 -0
  258. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ChannelRest11Reader.php +139 -0
  259. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyConstraint.php +60 -0
  260. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/DependencyInfo.php +50 -0
  261. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php +317 -0
  262. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/PackageInfo.php +94 -0
  263. data/helpers/vendor/composer/composer/src/Composer/Repository/Pear/ReleaseInfo.php +50 -0
  264. data/helpers/vendor/composer/composer/src/Composer/Repository/PearRepository.php +198 -0
  265. data/helpers/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php +315 -0
  266. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryFactory.php +166 -0
  267. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryInterface.php +74 -0
  268. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryManager.php +177 -0
  269. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositorySecurityException.php +22 -0
  270. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/BitbucketDriver.php +443 -0
  271. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/FossilDriver.php +238 -0
  272. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php +91 -0
  273. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitDriver.php +222 -0
  274. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php +472 -0
  275. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/GitLabDriver.php +511 -0
  276. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php +91 -0
  277. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/HgDriver.php +230 -0
  278. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php +181 -0
  279. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php +397 -0
  280. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php +175 -0
  281. data/helpers/vendor/composer/composer/src/Composer/Repository/Vcs/VcsDriverInterface.php +117 -0
  282. data/helpers/vendor/composer/composer/src/Composer/Repository/VcsRepository.php +377 -0
  283. data/helpers/vendor/composer/composer/src/Composer/Repository/VersionCacheInterface.php +23 -0
  284. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableArrayRepository.php +66 -0
  285. data/helpers/vendor/composer/composer/src/Composer/Repository/WritableRepositoryInterface.php +54 -0
  286. data/helpers/vendor/composer/composer/src/Composer/Script/CommandEvent.php +22 -0
  287. data/helpers/vendor/composer/composer/src/Composer/Script/Event.php +89 -0
  288. data/helpers/vendor/composer/composer/src/Composer/Script/PackageEvent.php +24 -0
  289. data/helpers/vendor/composer/composer/src/Composer/Script/ScriptEvents.php +193 -0
  290. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Keys.php +36 -0
  291. data/helpers/vendor/composer/composer/src/Composer/SelfUpdate/Versions.php +75 -0
  292. data/helpers/vendor/composer/composer/src/Composer/Util/AuthHelper.php +63 -0
  293. data/helpers/vendor/composer/composer/src/Composer/Util/Bitbucket.php +245 -0
  294. data/helpers/vendor/composer/composer/src/Composer/Util/ComposerMirror.php +57 -0
  295. data/helpers/vendor/composer/composer/src/Composer/Util/ConfigValidator.php +191 -0
  296. data/helpers/vendor/composer/composer/src/Composer/Util/ErrorHandler.php +79 -0
  297. data/helpers/vendor/composer/composer/src/Composer/Util/Filesystem.php +700 -0
  298. data/helpers/vendor/composer/composer/src/Composer/Util/Git.php +347 -0
  299. data/helpers/vendor/composer/composer/src/Composer/Util/GitHub.php +180 -0
  300. data/helpers/vendor/composer/composer/src/Composer/Util/GitLab.php +163 -0
  301. data/helpers/vendor/composer/composer/src/Composer/Util/Hg.php +94 -0
  302. data/helpers/vendor/composer/composer/src/Composer/Util/IniHelper.php +64 -0
  303. data/helpers/vendor/composer/composer/src/Composer/Util/NoProxyPattern.php +147 -0
  304. data/helpers/vendor/composer/composer/src/Composer/Util/Perforce.php +575 -0
  305. data/helpers/vendor/composer/composer/src/Composer/Util/Platform.php +92 -0
  306. data/helpers/vendor/composer/composer/src/Composer/Util/ProcessExecutor.php +186 -0
  307. data/helpers/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php +1093 -0
  308. data/helpers/vendor/composer/composer/src/Composer/Util/Silencer.php +78 -0
  309. data/helpers/vendor/composer/composer/src/Composer/Util/SpdxLicense.php +24 -0
  310. data/helpers/vendor/composer/composer/src/Composer/Util/StreamContextFactory.php +177 -0
  311. data/helpers/vendor/composer/composer/src/Composer/Util/Svn.php +381 -0
  312. data/helpers/vendor/composer/composer/src/Composer/Util/TlsHelper.php +204 -0
  313. data/helpers/vendor/composer/composer/src/Composer/Util/Url.php +55 -0
  314. data/helpers/vendor/composer/composer/src/Composer/XdebugHandler.php +31 -0
  315. data/helpers/vendor/composer/composer/src/bootstrap.php +24 -0
  316. data/helpers/vendor/composer/installed.json +945 -0
  317. data/helpers/vendor/composer/semver/CHANGELOG.md +66 -0
  318. data/helpers/vendor/composer/semver/LICENSE +19 -0
  319. data/helpers/vendor/composer/semver/README.md +70 -0
  320. data/helpers/vendor/composer/semver/composer.json +58 -0
  321. data/helpers/vendor/composer/semver/src/Comparator.php +111 -0
  322. data/helpers/vendor/composer/semver/src/Constraint/AbstractConstraint.php +63 -0
  323. data/helpers/vendor/composer/semver/src/Constraint/Constraint.php +219 -0
  324. data/helpers/vendor/composer/semver/src/Constraint/ConstraintInterface.php +32 -0
  325. data/helpers/vendor/composer/semver/src/Constraint/EmptyConstraint.php +59 -0
  326. data/helpers/vendor/composer/semver/src/Constraint/MultiConstraint.php +120 -0
  327. data/helpers/vendor/composer/semver/src/Semver.php +127 -0
  328. data/helpers/vendor/composer/semver/src/VersionParser.php +548 -0
  329. data/helpers/vendor/composer/spdx-licenses/.php_cs.dist +59 -0
  330. data/helpers/vendor/composer/spdx-licenses/CHANGELOG.md +84 -0
  331. data/helpers/vendor/composer/spdx-licenses/LICENSE +19 -0
  332. data/helpers/vendor/composer/spdx-licenses/README.md +69 -0
  333. data/helpers/vendor/composer/spdx-licenses/composer.json +57 -0
  334. data/helpers/vendor/composer/spdx-licenses/res/spdx-exceptions.json +101 -0
  335. data/helpers/vendor/composer/spdx-licenses/res/spdx-licenses.json +1907 -0
  336. data/helpers/vendor/composer/spdx-licenses/src/SpdxLicenses.php +343 -0
  337. data/helpers/vendor/composer/xdebug-handler/CHANGELOG.md +51 -0
  338. data/helpers/vendor/composer/xdebug-handler/LICENSE +21 -0
  339. data/helpers/vendor/composer/xdebug-handler/README.md +280 -0
  340. data/helpers/vendor/composer/xdebug-handler/composer.json +40 -0
  341. data/helpers/vendor/composer/xdebug-handler/src/PhpConfig.php +73 -0
  342. data/helpers/vendor/composer/xdebug-handler/src/Process.php +160 -0
  343. data/helpers/vendor/composer/xdebug-handler/src/Status.php +163 -0
  344. data/helpers/vendor/composer/xdebug-handler/src/XdebugHandler.php +540 -0
  345. data/helpers/vendor/justinrainbow/json-schema/.gitattributes +5 -0
  346. data/helpers/vendor/justinrainbow/json-schema/.php_cs.dist +33 -0
  347. data/helpers/vendor/justinrainbow/json-schema/LICENSE +21 -0
  348. data/helpers/vendor/justinrainbow/json-schema/README.md +206 -0
  349. data/helpers/vendor/justinrainbow/json-schema/bin/validate-json +251 -0
  350. data/helpers/vendor/justinrainbow/json-schema/composer.json +65 -0
  351. data/helpers/vendor/justinrainbow/json-schema/demo/README.md +14 -0
  352. data/helpers/vendor/justinrainbow/json-schema/demo/data.json +3 -0
  353. data/helpers/vendor/justinrainbow/json-schema/demo/demo.php +18 -0
  354. data/helpers/vendor/justinrainbow/json-schema/demo/schema.json +3 -0
  355. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-03.json +174 -0
  356. data/helpers/vendor/justinrainbow/json-schema/dist/schema/json-schema-draft-04.json +150 -0
  357. data/helpers/vendor/justinrainbow/json-schema/phpunit.xml.dist +26 -0
  358. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php +148 -0
  359. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php +147 -0
  360. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php +213 -0
  361. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php +65 -0
  362. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php +54 -0
  363. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php +220 -0
  364. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php +214 -0
  365. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php +86 -0
  366. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php +192 -0
  367. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php +94 -0
  368. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php +60 -0
  369. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php +68 -0
  370. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php +36 -0
  371. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php +18 -0
  372. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php +261 -0
  373. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php +413 -0
  374. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php +161 -0
  375. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php +7 -0
  376. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php +17 -0
  377. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php +17 -0
  378. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php +17 -0
  379. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php +17 -0
  380. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php +17 -0
  381. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php +40 -0
  382. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php +17 -0
  383. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php +17 -0
  384. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php +19 -0
  385. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php +17 -0
  386. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php +14 -0
  387. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php +149 -0
  388. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php +30 -0
  389. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php +169 -0
  390. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php +41 -0
  391. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php +34 -0
  392. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php +83 -0
  393. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php +93 -0
  394. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php +56 -0
  395. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php +36 -0
  396. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php +175 -0
  397. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php +330 -0
  398. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php +26 -0
  399. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php +26 -0
  400. data/helpers/vendor/justinrainbow/json-schema/src/JsonSchema/Validator.php +90 -0
  401. data/helpers/vendor/psr/log/.gitignore +1 -0
  402. data/helpers/vendor/psr/log/LICENSE +19 -0
  403. data/helpers/vendor/psr/log/Psr/Log/AbstractLogger.php +128 -0
  404. data/helpers/vendor/psr/log/Psr/Log/InvalidArgumentException.php +7 -0
  405. data/helpers/vendor/psr/log/Psr/Log/LogLevel.php +18 -0
  406. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +18 -0
  407. data/helpers/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +26 -0
  408. data/helpers/vendor/psr/log/Psr/Log/LoggerInterface.php +123 -0
  409. data/helpers/vendor/psr/log/Psr/Log/LoggerTrait.php +140 -0
  410. data/helpers/vendor/psr/log/Psr/Log/NullLogger.php +28 -0
  411. data/helpers/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php +144 -0
  412. data/helpers/vendor/psr/log/Psr/Log/Test/TestLogger.php +146 -0
  413. data/helpers/vendor/psr/log/README.md +52 -0
  414. data/helpers/vendor/psr/log/composer.json +26 -0
  415. data/helpers/vendor/seld/jsonlint/.gitignore +3 -0
  416. data/helpers/vendor/seld/jsonlint/.travis.yml +25 -0
  417. data/helpers/vendor/seld/jsonlint/CHANGELOG.md +66 -0
  418. data/helpers/vendor/seld/jsonlint/LICENSE +19 -0
  419. data/helpers/vendor/seld/jsonlint/README.md +89 -0
  420. data/helpers/vendor/seld/jsonlint/bin/jsonlint +117 -0
  421. data/helpers/vendor/seld/jsonlint/composer.json +24 -0
  422. data/helpers/vendor/seld/jsonlint/phpunit.xml.dist +25 -0
  423. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php +26 -0
  424. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php +502 -0
  425. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php +217 -0
  426. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php +28 -0
  427. data/helpers/vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php +16 -0
  428. data/helpers/vendor/seld/jsonlint/tests/JsonParserTest.php +230 -0
  429. data/helpers/vendor/seld/jsonlint/tests/bom.json +6 -0
  430. data/helpers/vendor/seld/jsonlint/tests/bootstrap.php +13 -0
  431. data/helpers/vendor/seld/phar-utils/.gitignore +1 -0
  432. data/helpers/vendor/seld/phar-utils/LICENSE +19 -0
  433. data/helpers/vendor/seld/phar-utils/README.md +39 -0
  434. data/helpers/vendor/seld/phar-utils/composer.json +26 -0
  435. data/helpers/vendor/seld/phar-utils/composer.lock +19 -0
  436. data/helpers/vendor/seld/phar-utils/src/Timestamps.php +192 -0
  437. data/helpers/vendor/symfony/console/.gitignore +3 -0
  438. data/helpers/vendor/symfony/console/Application.php +1174 -0
  439. data/helpers/vendor/symfony/console/CHANGELOG.md +140 -0
  440. data/helpers/vendor/symfony/console/Command/Command.php +654 -0
  441. data/helpers/vendor/symfony/console/Command/HelpCommand.php +81 -0
  442. data/helpers/vendor/symfony/console/Command/ListCommand.php +90 -0
  443. data/helpers/vendor/symfony/console/Command/LockableTrait.php +71 -0
  444. data/helpers/vendor/symfony/console/CommandLoader/CommandLoaderInterface.php +37 -0
  445. data/helpers/vendor/symfony/console/CommandLoader/ContainerCommandLoader.php +55 -0
  446. data/helpers/vendor/symfony/console/CommandLoader/FactoryCommandLoader.php +62 -0
  447. data/helpers/vendor/symfony/console/ConsoleEvents.php +47 -0
  448. data/helpers/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +98 -0
  449. data/helpers/vendor/symfony/console/Descriptor/ApplicationDescription.php +144 -0
  450. data/helpers/vendor/symfony/console/Descriptor/Descriptor.php +107 -0
  451. data/helpers/vendor/symfony/console/Descriptor/DescriptorInterface.php +31 -0
  452. data/helpers/vendor/symfony/console/Descriptor/JsonDescriptor.php +168 -0
  453. data/helpers/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +182 -0
  454. data/helpers/vendor/symfony/console/Descriptor/TextDescriptor.php +342 -0
  455. data/helpers/vendor/symfony/console/Descriptor/XmlDescriptor.php +245 -0
  456. data/helpers/vendor/symfony/console/Event/ConsoleCommandEvent.php +60 -0
  457. data/helpers/vendor/symfony/console/Event/ConsoleErrorEvent.php +58 -0
  458. data/helpers/vendor/symfony/console/Event/ConsoleEvent.php +67 -0
  459. data/helpers/vendor/symfony/console/Event/ConsoleTerminateEvent.php +53 -0
  460. data/helpers/vendor/symfony/console/EventListener/ErrorListener.php +91 -0
  461. data/helpers/vendor/symfony/console/Exception/CommandNotFoundException.php +43 -0
  462. data/helpers/vendor/symfony/console/Exception/ExceptionInterface.php +21 -0
  463. data/helpers/vendor/symfony/console/Exception/InvalidArgumentException.php +19 -0
  464. data/helpers/vendor/symfony/console/Exception/InvalidOptionException.php +21 -0
  465. data/helpers/vendor/symfony/console/Exception/LogicException.php +19 -0
  466. data/helpers/vendor/symfony/console/Exception/NamespaceNotFoundException.php +21 -0
  467. data/helpers/vendor/symfony/console/Exception/RuntimeException.php +19 -0
  468. data/helpers/vendor/symfony/console/Formatter/OutputFormatter.php +278 -0
  469. data/helpers/vendor/symfony/console/Formatter/OutputFormatterInterface.php +71 -0
  470. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyle.php +203 -0
  471. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +62 -0
  472. data/helpers/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php +110 -0
  473. data/helpers/vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php +25 -0
  474. data/helpers/vendor/symfony/console/Helper/DebugFormatterHelper.php +127 -0
  475. data/helpers/vendor/symfony/console/Helper/DescriptorHelper.php +94 -0
  476. data/helpers/vendor/symfony/console/Helper/FormatterHelper.php +106 -0
  477. data/helpers/vendor/symfony/console/Helper/Helper.php +138 -0
  478. data/helpers/vendor/symfony/console/Helper/HelperInterface.php +39 -0
  479. data/helpers/vendor/symfony/console/Helper/HelperSet.php +108 -0
  480. data/helpers/vendor/symfony/console/Helper/InputAwareHelper.php +33 -0
  481. data/helpers/vendor/symfony/console/Helper/ProcessHelper.php +156 -0
  482. data/helpers/vendor/symfony/console/Helper/ProgressBar.php +530 -0
  483. data/helpers/vendor/symfony/console/Helper/ProgressIndicator.php +269 -0
  484. data/helpers/vendor/symfony/console/Helper/QuestionHelper.php +434 -0
  485. data/helpers/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +96 -0
  486. data/helpers/vendor/symfony/console/Helper/Table.php +808 -0
  487. data/helpers/vendor/symfony/console/Helper/TableCell.php +68 -0
  488. data/helpers/vendor/symfony/console/Helper/TableRows.php +32 -0
  489. data/helpers/vendor/symfony/console/Helper/TableSeparator.php +25 -0
  490. data/helpers/vendor/symfony/console/Helper/TableStyle.php +458 -0
  491. data/helpers/vendor/symfony/console/Input/ArgvInput.php +346 -0
  492. data/helpers/vendor/symfony/console/Input/ArrayInput.php +206 -0
  493. data/helpers/vendor/symfony/console/Input/Input.php +203 -0
  494. data/helpers/vendor/symfony/console/Input/InputArgument.php +129 -0
  495. data/helpers/vendor/symfony/console/Input/InputAwareInterface.php +26 -0
  496. data/helpers/vendor/symfony/console/Input/InputDefinition.php +402 -0
  497. data/helpers/vendor/symfony/console/Input/InputInterface.php +163 -0
  498. data/helpers/vendor/symfony/console/Input/InputOption.php +208 -0
  499. data/helpers/vendor/symfony/console/Input/StreamableInputInterface.php +37 -0
  500. data/helpers/vendor/symfony/console/Input/StringInput.php +72 -0
  501. data/helpers/vendor/symfony/console/LICENSE +19 -0
  502. data/helpers/vendor/symfony/console/Logger/ConsoleLogger.php +124 -0
  503. data/helpers/vendor/symfony/console/Output/BufferedOutput.php +45 -0
  504. data/helpers/vendor/symfony/console/Output/ConsoleOutput.php +161 -0
  505. data/helpers/vendor/symfony/console/Output/ConsoleOutputInterface.php +32 -0
  506. data/helpers/vendor/symfony/console/Output/ConsoleSectionOutput.php +141 -0
  507. data/helpers/vendor/symfony/console/Output/NullOutput.php +123 -0
  508. data/helpers/vendor/symfony/console/Output/Output.php +177 -0
  509. data/helpers/vendor/symfony/console/Output/OutputInterface.php +114 -0
  510. data/helpers/vendor/symfony/console/Output/StreamOutput.php +124 -0
  511. data/helpers/vendor/symfony/console/Question/ChoiceQuestion.php +184 -0
  512. data/helpers/vendor/symfony/console/Question/ConfirmationQuestion.php +59 -0
  513. data/helpers/vendor/symfony/console/Question/Question.php +246 -0
  514. data/helpers/vendor/symfony/console/README.md +20 -0
  515. data/helpers/vendor/symfony/console/Resources/bin/hiddeninput.exe +0 -0
  516. data/helpers/vendor/symfony/console/Style/OutputStyle.php +155 -0
  517. data/helpers/vendor/symfony/console/Style/StyleInterface.php +154 -0
  518. data/helpers/vendor/symfony/console/Style/SymfonyStyle.php +438 -0
  519. data/helpers/vendor/symfony/console/Terminal.php +137 -0
  520. data/helpers/vendor/symfony/console/Tester/ApplicationTester.php +77 -0
  521. data/helpers/vendor/symfony/console/Tester/CommandTester.php +79 -0
  522. data/helpers/vendor/symfony/console/Tester/TesterTrait.php +173 -0
  523. data/helpers/vendor/symfony/console/Tests/ApplicationTest.php +1791 -0
  524. data/helpers/vendor/symfony/console/Tests/Command/CommandTest.php +436 -0
  525. data/helpers/vendor/symfony/console/Tests/Command/HelpCommandTest.php +71 -0
  526. data/helpers/vendor/symfony/console/Tests/Command/ListCommandTest.php +113 -0
  527. data/helpers/vendor/symfony/console/Tests/Command/LockableTraitTest.php +67 -0
  528. data/helpers/vendor/symfony/console/Tests/CommandLoader/ContainerCommandLoaderTest.php +61 -0
  529. data/helpers/vendor/symfony/console/Tests/CommandLoader/FactoryCommandLoaderTest.php +60 -0
  530. data/helpers/vendor/symfony/console/Tests/DependencyInjection/AddConsoleCommandPassTest.php +258 -0
  531. data/helpers/vendor/symfony/console/Tests/Descriptor/AbstractDescriptorTest.php +107 -0
  532. data/helpers/vendor/symfony/console/Tests/Descriptor/JsonDescriptorTest.php +35 -0
  533. data/helpers/vendor/symfony/console/Tests/Descriptor/MarkdownDescriptorTest.php +45 -0
  534. data/helpers/vendor/symfony/console/Tests/Descriptor/ObjectsProvider.php +82 -0
  535. data/helpers/vendor/symfony/console/Tests/Descriptor/TextDescriptorTest.php +53 -0
  536. data/helpers/vendor/symfony/console/Tests/Descriptor/XmlDescriptorTest.php +27 -0
  537. data/helpers/vendor/symfony/console/Tests/EventListener/ErrorListenerTest.php +156 -0
  538. data/helpers/vendor/symfony/console/Tests/Fixtures/BarBucCommand.php +11 -0
  539. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication1.php +18 -0
  540. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplication2.php +26 -0
  541. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorApplicationMbString.php +24 -0
  542. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand1.php +27 -0
  543. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand2.php +32 -0
  544. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand3.php +27 -0
  545. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommand4.php +25 -0
  546. data/helpers/vendor/symfony/console/Tests/Fixtures/DescriptorCommandMbString.php +32 -0
  547. data/helpers/vendor/symfony/console/Tests/Fixtures/DummyOutput.php +36 -0
  548. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo1Command.php +26 -0
  549. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo2Command.php +21 -0
  550. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo3Command.php +29 -0
  551. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo4Command.php +11 -0
  552. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo5Command.php +10 -0
  553. data/helpers/vendor/symfony/console/Tests/Fixtures/Foo6Command.php +11 -0
  554. data/helpers/vendor/symfony/console/Tests/Fixtures/FooCommand.php +33 -0
  555. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLock2Command.php +28 -0
  556. data/helpers/vendor/symfony/console/Tests/Fixtures/FooLockCommand.php +27 -0
  557. data/helpers/vendor/symfony/console/Tests/Fixtures/FooOptCommand.php +36 -0
  558. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseLowercaseCommand.php +11 -0
  559. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSameCaseUppercaseCommand.php +11 -0
  560. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced1Command.php +26 -0
  561. data/helpers/vendor/symfony/console/Tests/Fixtures/FooSubnamespaced2Command.php +26 -0
  562. data/helpers/vendor/symfony/console/Tests/Fixtures/FooWithoutAliasCommand.php +21 -0
  563. data/helpers/vendor/symfony/console/Tests/Fixtures/FoobarCommand.php +25 -0
  564. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_0.php +11 -0
  565. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_1.php +13 -0
  566. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_10.php +17 -0
  567. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_11.php +12 -0
  568. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_12.php +13 -0
  569. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_13.php +14 -0
  570. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_14.php +17 -0
  571. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_15.php +14 -0
  572. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_16.php +15 -0
  573. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_17.php +13 -0
  574. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_2.php +16 -0
  575. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_3.php +12 -0
  576. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4.php +34 -0
  577. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_4_with_iterators.php +34 -0
  578. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_5.php +37 -0
  579. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_6.php +16 -0
  580. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_7.php +15 -0
  581. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_8.php +26 -0
  582. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/command_9.php +11 -0
  583. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/command/interactive_command_1.php +19 -0
  584. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/interactive_output_1.txt +7 -0
  585. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_0.txt +3 -0
  586. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_1.txt +9 -0
  587. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_10.txt +7 -0
  588. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_11.txt +4 -0
  589. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_12.txt +6 -0
  590. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_13.txt +7 -0
  591. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_14.txt +6 -0
  592. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_15.txt +7 -0
  593. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_16.txt +8 -0
  594. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_17.txt +7 -0
  595. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_2.txt +13 -0
  596. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_3.txt +7 -0
  597. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4.txt +32 -0
  598. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_4_with_iterators.txt +32 -0
  599. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_5.txt +18 -0
  600. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_6.txt +6 -0
  601. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_7.txt +5 -0
  602. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_8.txt +9 -0
  603. data/helpers/vendor/symfony/console/Tests/Fixtures/Style/SymfonyStyle/output/output_9.txt +5 -0
  604. data/helpers/vendor/symfony/console/Tests/Fixtures/TestCommand.php +28 -0
  605. data/helpers/vendor/symfony/console/Tests/Fixtures/TestTiti.php +21 -0
  606. data/helpers/vendor/symfony/console/Tests/Fixtures/TestToto.php +22 -0
  607. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.json +156 -0
  608. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.md +172 -0
  609. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.txt +17 -0
  610. data/helpers/vendor/symfony/console/Tests/Fixtures/application_1.xml +104 -0
  611. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.json +509 -0
  612. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.md +431 -0
  613. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.txt +21 -0
  614. data/helpers/vendor/symfony/console/Tests/Fixtures/application_2.xml +254 -0
  615. data/helpers/vendor/symfony/console/Tests/Fixtures/application_filtered_namespace.txt +16 -0
  616. data/helpers/vendor/symfony/console/Tests/Fixtures/application_gethelp.txt +1 -0
  617. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.md +269 -0
  618. data/helpers/vendor/symfony/console/Tests/Fixtures/application_mbstring.txt +19 -0
  619. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception1.txt +5 -0
  620. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception2.txt +7 -0
  621. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3.txt +18 -0
  622. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception3decorated.txt +18 -0
  623. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception4.txt +6 -0
  624. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1.txt +8 -0
  625. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth1decorated.txt +8 -0
  626. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_doublewidth2.txt +9 -0
  627. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_escapeslines.txt +9 -0
  628. data/helpers/vendor/symfony/console/Tests/Fixtures/application_renderexception_linebreaks.txt +11 -0
  629. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run1.txt +17 -0
  630. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run2.txt +29 -0
  631. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run3.txt +29 -0
  632. data/helpers/vendor/symfony/console/Tests/Fixtures/application_run4.txt +1 -0
  633. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.json +15 -0
  634. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.md +12 -0
  635. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.txt +10 -0
  636. data/helpers/vendor/symfony/console/Tests/Fixtures/command_1.xml +12 -0
  637. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.json +33 -0
  638. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.md +29 -0
  639. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.txt +16 -0
  640. data/helpers/vendor/symfony/console/Tests/Fixtures/command_2.xml +21 -0
  641. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.md +29 -0
  642. data/helpers/vendor/symfony/console/Tests/Fixtures/command_mbstring.txt +16 -0
  643. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.json +7 -0
  644. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.md +5 -0
  645. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.txt +1 -0
  646. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_1.xml +5 -0
  647. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.json +7 -0
  648. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.md +7 -0
  649. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.txt +1 -0
  650. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_2.xml +5 -0
  651. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.json +7 -0
  652. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.md +7 -0
  653. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.txt +1 -0
  654. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_3.xml +7 -0
  655. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.json +7 -0
  656. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.md +8 -0
  657. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.txt +2 -0
  658. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_4.xml +6 -0
  659. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.json +7 -0
  660. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.md +7 -0
  661. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.txt +1 -0
  662. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_default_inf_value.xml +7 -0
  663. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.json +7 -0
  664. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.md +7 -0
  665. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.txt +1 -0
  666. data/helpers/vendor/symfony/console/Tests/Fixtures/input_argument_with_style.xml +7 -0
  667. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.json +4 -0
  668. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.md +0 -0
  669. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.txt +0 -0
  670. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_1.xml +5 -0
  671. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.json +12 -0
  672. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.md +7 -0
  673. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.txt +2 -0
  674. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_2.xml +10 -0
  675. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.json +14 -0
  676. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.md +8 -0
  677. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.txt +2 -0
  678. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_3.xml +9 -0
  679. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.json +22 -0
  680. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.md +16 -0
  681. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.txt +5 -0
  682. data/helpers/vendor/symfony/console/Tests/Fixtures/input_definition_4.xml +14 -0
  683. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.json +9 -0
  684. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.md +6 -0
  685. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.txt +1 -0
  686. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_1.xml +4 -0
  687. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.json +9 -0
  688. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.md +8 -0
  689. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.txt +1 -0
  690. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_2.xml +7 -0
  691. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.json +9 -0
  692. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.md +8 -0
  693. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.txt +1 -0
  694. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_3.xml +5 -0
  695. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.json +9 -0
  696. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.md +8 -0
  697. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.txt +1 -0
  698. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_4.xml +5 -0
  699. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.json +9 -0
  700. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.md +9 -0
  701. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.txt +2 -0
  702. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_5.xml +6 -0
  703. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.json +9 -0
  704. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.md +8 -0
  705. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.txt +1 -0
  706. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_6.xml +5 -0
  707. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.json +9 -0
  708. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.md +8 -0
  709. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.txt +1 -0
  710. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_default_inf_value.xml +7 -0
  711. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.json +9 -0
  712. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.md +8 -0
  713. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.txt +1 -0
  714. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style.xml +7 -0
  715. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.json +12 -0
  716. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.md +8 -0
  717. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.txt +1 -0
  718. data/helpers/vendor/symfony/console/Tests/Fixtures/input_option_with_style_array.xml +8 -0
  719. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleStackTest.php +71 -0
  720. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterStyleTest.php +100 -0
  721. data/helpers/vendor/symfony/console/Tests/Formatter/OutputFormatterTest.php +352 -0
  722. data/helpers/vendor/symfony/console/Tests/Helper/AbstractQuestionHelperTest.php +34 -0
  723. data/helpers/vendor/symfony/console/Tests/Helper/FormatterHelperTest.php +129 -0
  724. data/helpers/vendor/symfony/console/Tests/Helper/HelperSetTest.php +127 -0
  725. data/helpers/vendor/symfony/console/Tests/Helper/HelperTest.php +55 -0
  726. data/helpers/vendor/symfony/console/Tests/Helper/ProcessHelperTest.php +133 -0
  727. data/helpers/vendor/symfony/console/Tests/Helper/ProgressBarTest.php +899 -0
  728. data/helpers/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php +183 -0
  729. data/helpers/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php +665 -0
  730. data/helpers/vendor/symfony/console/Tests/Helper/SymfonyQuestionHelperTest.php +168 -0
  731. data/helpers/vendor/symfony/console/Tests/Helper/TableStyleTest.php +28 -0
  732. data/helpers/vendor/symfony/console/Tests/Helper/TableTest.php +1127 -0
  733. data/helpers/vendor/symfony/console/Tests/Input/ArgvInputTest.php +458 -0
  734. data/helpers/vendor/symfony/console/Tests/Input/ArrayInputTest.php +177 -0
  735. data/helpers/vendor/symfony/console/Tests/Input/InputArgumentTest.php +103 -0
  736. data/helpers/vendor/symfony/console/Tests/Input/InputDefinitionTest.php +407 -0
  737. data/helpers/vendor/symfony/console/Tests/Input/InputOptionTest.php +196 -0
  738. data/helpers/vendor/symfony/console/Tests/Input/InputTest.php +149 -0
  739. data/helpers/vendor/symfony/console/Tests/Input/StringInputTest.php +87 -0
  740. data/helpers/vendor/symfony/console/Tests/Logger/ConsoleLoggerTest.php +215 -0
  741. data/helpers/vendor/symfony/console/Tests/Output/ConsoleOutputTest.php +42 -0
  742. data/helpers/vendor/symfony/console/Tests/Output/ConsoleSectionOutputTest.php +163 -0
  743. data/helpers/vendor/symfony/console/Tests/Output/NullOutputTest.php +88 -0
  744. data/helpers/vendor/symfony/console/Tests/Output/OutputTest.php +189 -0
  745. data/helpers/vendor/symfony/console/Tests/Output/StreamOutputTest.php +61 -0
  746. data/helpers/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php +116 -0
  747. data/helpers/vendor/symfony/console/Tests/TerminalTest.php +44 -0
  748. data/helpers/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php +113 -0
  749. data/helpers/vendor/symfony/console/Tests/Tester/CommandTesterTest.php +207 -0
  750. data/helpers/vendor/symfony/console/composer.json +53 -0
  751. data/helpers/vendor/symfony/console/phpunit.xml.dist +41 -0
  752. data/helpers/vendor/symfony/contracts/.gitignore +3 -0
  753. data/helpers/vendor/symfony/contracts/CHANGELOG.md +12 -0
  754. data/helpers/vendor/symfony/contracts/Cache/CacheInterface.php +57 -0
  755. data/helpers/vendor/symfony/contracts/Cache/CacheTrait.php +71 -0
  756. data/helpers/vendor/symfony/contracts/Cache/CallbackInterface.php +30 -0
  757. data/helpers/vendor/symfony/contracts/Cache/ItemInterface.php +60 -0
  758. data/helpers/vendor/symfony/contracts/Cache/TagAwareCacheInterface.php +38 -0
  759. data/helpers/vendor/symfony/contracts/LICENSE +19 -0
  760. data/helpers/vendor/symfony/contracts/README.md +70 -0
  761. data/helpers/vendor/symfony/contracts/Service/ResetInterface.php +30 -0
  762. data/helpers/vendor/symfony/contracts/Service/ServiceLocatorTrait.php +97 -0
  763. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberInterface.php +53 -0
  764. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberTrait.php +61 -0
  765. data/helpers/vendor/symfony/contracts/Tests/Cache/CacheTraitTest.php +165 -0
  766. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceLocatorTest.php +94 -0
  767. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceSubscriberTraitTest.php +65 -0
  768. data/helpers/vendor/symfony/contracts/Tests/Translation/TranslatorTest.php +353 -0
  769. data/helpers/vendor/symfony/contracts/Translation/LocaleAwareInterface.php +31 -0
  770. data/helpers/vendor/symfony/contracts/Translation/TranslatorInterface.php +65 -0
  771. data/helpers/vendor/symfony/contracts/Translation/TranslatorTrait.php +255 -0
  772. data/helpers/vendor/symfony/contracts/composer.json +44 -0
  773. data/helpers/vendor/symfony/contracts/phpunit.xml.dist +31 -0
  774. data/helpers/vendor/symfony/filesystem/.gitignore +3 -0
  775. data/helpers/vendor/symfony/filesystem/CHANGELOG.md +59 -0
  776. data/helpers/vendor/symfony/filesystem/Exception/ExceptionInterface.php +21 -0
  777. data/helpers/vendor/symfony/filesystem/Exception/FileNotFoundException.php +34 -0
  778. data/helpers/vendor/symfony/filesystem/Exception/IOException.php +39 -0
  779. data/helpers/vendor/symfony/filesystem/Exception/IOExceptionInterface.php +27 -0
  780. data/helpers/vendor/symfony/filesystem/Exception/InvalidArgumentException.php +19 -0
  781. data/helpers/vendor/symfony/filesystem/Filesystem.php +767 -0
  782. data/helpers/vendor/symfony/filesystem/LICENSE +19 -0
  783. data/helpers/vendor/symfony/filesystem/README.md +13 -0
  784. data/helpers/vendor/symfony/filesystem/Tests/ExceptionTest.php +47 -0
  785. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTest.php +1686 -0
  786. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTestCase.php +166 -0
  787. data/helpers/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php +46 -0
  788. data/helpers/vendor/symfony/filesystem/composer.json +34 -0
  789. data/helpers/vendor/symfony/filesystem/phpunit.xml.dist +30 -0
  790. data/helpers/vendor/symfony/finder/.gitignore +3 -0
  791. data/helpers/vendor/symfony/finder/CHANGELOG.md +69 -0
  792. data/helpers/vendor/symfony/finder/Comparator/Comparator.php +98 -0
  793. data/helpers/vendor/symfony/finder/Comparator/DateComparator.php +51 -0
  794. data/helpers/vendor/symfony/finder/Comparator/NumberComparator.php +79 -0
  795. data/helpers/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
  796. data/helpers/vendor/symfony/finder/Finder.php +780 -0
  797. data/helpers/vendor/symfony/finder/Glob.php +116 -0
  798. data/helpers/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
  799. data/helpers/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
  800. data/helpers/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +45 -0
  801. data/helpers/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +84 -0
  802. data/helpers/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +53 -0
  803. data/helpers/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
  804. data/helpers/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +47 -0
  805. data/helpers/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +112 -0
  806. data/helpers/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
  807. data/helpers/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +140 -0
  808. data/helpers/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
  809. data/helpers/vendor/symfony/finder/Iterator/SortableIterator.php +98 -0
  810. data/helpers/vendor/symfony/finder/LICENSE +19 -0
  811. data/helpers/vendor/symfony/finder/README.md +14 -0
  812. data/helpers/vendor/symfony/finder/SplFileInfo.php +78 -0
  813. data/helpers/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php +65 -0
  814. data/helpers/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php +64 -0
  815. data/helpers/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php +108 -0
  816. data/helpers/vendor/symfony/finder/Tests/FinderTest.php +1280 -0
  817. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/a +0 -0
  818. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon +0 -0
  819. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon +0 -0
  820. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat +0 -0
  821. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat +0 -0
  822. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/a.dat +0 -0
  823. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy +0 -0
  824. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy +0 -0
  825. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy +0 -0
  826. data/helpers/vendor/symfony/finder/Tests/Fixtures/dolor.txt +2 -0
  827. data/helpers/vendor/symfony/finder/Tests/Fixtures/ipsum.txt +2 -0
  828. data/helpers/vendor/symfony/finder/Tests/Fixtures/lorem.txt +2 -0
  829. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/.dot +1 -0
  830. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/a +0 -0
  831. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon +0 -0
  832. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon +0 -0
  833. data/helpers/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat +0 -0
  834. data/helpers/vendor/symfony/finder/Tests/Fixtures/with space/foo.txt b/data/helpers/vendor/symfony/finder/Tests/Fixtures/with → space/foo.txt +0 -0
  835. data/helpers/vendor/symfony/finder/Tests/GlobTest.php +95 -0
  836. data/helpers/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php +46 -0
  837. data/helpers/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php +92 -0
  838. data/helpers/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php +103 -0
  839. data/helpers/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php +107 -0
  840. data/helpers/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php +82 -0
  841. data/helpers/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php +86 -0
  842. data/helpers/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php +54 -0
  843. data/helpers/vendor/symfony/finder/Tests/Iterator/Iterator.php +55 -0
  844. data/helpers/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php +100 -0
  845. data/helpers/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php +21 -0
  846. data/helpers/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php +132 -0
  847. data/helpers/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php +71 -0
  848. data/helpers/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php +82 -0
  849. data/helpers/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php +128 -0
  850. data/helpers/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php +59 -0
  851. data/helpers/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php +70 -0
  852. data/helpers/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php +262 -0
  853. data/helpers/vendor/symfony/finder/composer.json +33 -0
  854. data/helpers/vendor/symfony/finder/phpunit.xml.dist +30 -0
  855. data/helpers/vendor/symfony/polyfill-ctype/Ctype.php +227 -0
  856. data/helpers/vendor/symfony/polyfill-ctype/LICENSE +19 -0
  857. data/helpers/vendor/symfony/polyfill-ctype/README.md +12 -0
  858. data/helpers/vendor/symfony/polyfill-ctype/bootstrap.php +26 -0
  859. data/helpers/vendor/symfony/polyfill-ctype/composer.json +34 -0
  860. data/helpers/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  861. data/helpers/vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
  862. data/helpers/vendor/symfony/polyfill-mbstring/README.md +13 -0
  863. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1096 -0
  864. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  865. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1104 -0
  866. data/helpers/vendor/symfony/polyfill-mbstring/bootstrap.php +58 -0
  867. data/helpers/vendor/symfony/polyfill-mbstring/composer.json +34 -0
  868. data/helpers/vendor/symfony/process/.gitignore +3 -0
  869. data/helpers/vendor/symfony/process/CHANGELOG.md +90 -0
  870. data/helpers/vendor/symfony/process/Exception/ExceptionInterface.php +21 -0
  871. data/helpers/vendor/symfony/process/Exception/InvalidArgumentException.php +21 -0
  872. data/helpers/vendor/symfony/process/Exception/LogicException.php +21 -0
  873. data/helpers/vendor/symfony/process/Exception/ProcessFailedException.php +54 -0
  874. data/helpers/vendor/symfony/process/Exception/ProcessSignaledException.php +41 -0
  875. data/helpers/vendor/symfony/process/Exception/ProcessTimedOutException.php +69 -0
  876. data/helpers/vendor/symfony/process/Exception/RuntimeException.php +21 -0
  877. data/helpers/vendor/symfony/process/ExecutableFinder.php +88 -0
  878. data/helpers/vendor/symfony/process/InputStream.php +90 -0
  879. data/helpers/vendor/symfony/process/LICENSE +19 -0
  880. data/helpers/vendor/symfony/process/PhpExecutableFinder.php +101 -0
  881. data/helpers/vendor/symfony/process/PhpProcess.php +76 -0
  882. data/helpers/vendor/symfony/process/Pipes/AbstractPipes.php +178 -0
  883. data/helpers/vendor/symfony/process/Pipes/PipesInterface.php +67 -0
  884. data/helpers/vendor/symfony/process/Pipes/UnixPipes.php +153 -0
  885. data/helpers/vendor/symfony/process/Pipes/WindowsPipes.php +191 -0
  886. data/helpers/vendor/symfony/process/Process.php +1652 -0
  887. data/helpers/vendor/symfony/process/ProcessUtils.php +69 -0
  888. data/helpers/vendor/symfony/process/README.md +13 -0
  889. data/helpers/vendor/symfony/process/Tests/ExecutableFinderTest.php +178 -0
  890. data/helpers/vendor/symfony/process/Tests/KillableProcessWithOutput.php +25 -0
  891. data/helpers/vendor/symfony/process/Tests/NonStopableProcess.php +47 -0
  892. data/helpers/vendor/symfony/process/Tests/PhpExecutableFinderTest.php +49 -0
  893. data/helpers/vendor/symfony/process/Tests/PhpProcessTest.php +48 -0
  894. data/helpers/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php +72 -0
  895. data/helpers/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php +137 -0
  896. data/helpers/vendor/symfony/process/Tests/ProcessTest.php +1533 -0
  897. data/helpers/vendor/symfony/process/Tests/SignalListener.php +21 -0
  898. data/helpers/vendor/symfony/process/composer.json +33 -0
  899. data/helpers/vendor/symfony/process/phpunit.xml.dist +30 -0
  900. metadata +901 -3
@@ -0,0 +1,67 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Process\Pipes;
13
+
14
+ /**
15
+ * PipesInterface manages descriptors and pipes for the use of proc_open.
16
+ *
17
+ * @author Romain Neutron <imprec@gmail.com>
18
+ *
19
+ * @internal
20
+ */
21
+ interface PipesInterface
22
+ {
23
+ const CHUNK_SIZE = 16384;
24
+
25
+ /**
26
+ * Returns an array of descriptors for the use of proc_open.
27
+ *
28
+ * @return array
29
+ */
30
+ public function getDescriptors();
31
+
32
+ /**
33
+ * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
34
+ *
35
+ * @return string[]
36
+ */
37
+ public function getFiles();
38
+
39
+ /**
40
+ * Reads data in file handles and pipes.
41
+ *
42
+ * @param bool $blocking Whether to use blocking calls or not
43
+ * @param bool $close Whether to close pipes if they've reached EOF
44
+ *
45
+ * @return string[] An array of read data indexed by their fd
46
+ */
47
+ public function readAndWrite($blocking, $close = false);
48
+
49
+ /**
50
+ * Returns if the current state has open file handles or pipes.
51
+ *
52
+ * @return bool
53
+ */
54
+ public function areOpen();
55
+
56
+ /**
57
+ * Returns if pipes are able to read output.
58
+ *
59
+ * @return bool
60
+ */
61
+ public function haveReadSupport();
62
+
63
+ /**
64
+ * Closes file handles and pipes.
65
+ */
66
+ public function close();
67
+ }
@@ -0,0 +1,153 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Process\Pipes;
13
+
14
+ use Symfony\Component\Process\Process;
15
+
16
+ /**
17
+ * UnixPipes implementation uses unix pipes as handles.
18
+ *
19
+ * @author Romain Neutron <imprec@gmail.com>
20
+ *
21
+ * @internal
22
+ */
23
+ class UnixPipes extends AbstractPipes
24
+ {
25
+ private $ttyMode;
26
+ private $ptyMode;
27
+ private $haveReadSupport;
28
+
29
+ public function __construct(?bool $ttyMode, bool $ptyMode, $input, bool $haveReadSupport)
30
+ {
31
+ $this->ttyMode = $ttyMode;
32
+ $this->ptyMode = $ptyMode;
33
+ $this->haveReadSupport = $haveReadSupport;
34
+
35
+ parent::__construct($input);
36
+ }
37
+
38
+ public function __destruct()
39
+ {
40
+ $this->close();
41
+ }
42
+
43
+ /**
44
+ * {@inheritdoc}
45
+ */
46
+ public function getDescriptors()
47
+ {
48
+ if (!$this->haveReadSupport) {
49
+ $nullstream = fopen('/dev/null', 'c');
50
+
51
+ return array(
52
+ array('pipe', 'r'),
53
+ $nullstream,
54
+ $nullstream,
55
+ );
56
+ }
57
+
58
+ if ($this->ttyMode) {
59
+ return array(
60
+ array('file', '/dev/tty', 'r'),
61
+ array('file', '/dev/tty', 'w'),
62
+ array('file', '/dev/tty', 'w'),
63
+ );
64
+ }
65
+
66
+ if ($this->ptyMode && Process::isPtySupported()) {
67
+ return array(
68
+ array('pty'),
69
+ array('pty'),
70
+ array('pty'),
71
+ );
72
+ }
73
+
74
+ return array(
75
+ array('pipe', 'r'),
76
+ array('pipe', 'w'), // stdout
77
+ array('pipe', 'w'), // stderr
78
+ );
79
+ }
80
+
81
+ /**
82
+ * {@inheritdoc}
83
+ */
84
+ public function getFiles()
85
+ {
86
+ return array();
87
+ }
88
+
89
+ /**
90
+ * {@inheritdoc}
91
+ */
92
+ public function readAndWrite($blocking, $close = false)
93
+ {
94
+ $this->unblock();
95
+ $w = $this->write();
96
+
97
+ $read = $e = array();
98
+ $r = $this->pipes;
99
+ unset($r[0]);
100
+
101
+ // let's have a look if something changed in streams
102
+ set_error_handler(array($this, 'handleError'));
103
+ if (($r || $w) && false === stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
104
+ restore_error_handler();
105
+ // if a system call has been interrupted, forget about it, let's try again
106
+ // otherwise, an error occurred, let's reset pipes
107
+ if (!$this->hasSystemCallBeenInterrupted()) {
108
+ $this->pipes = array();
109
+ }
110
+
111
+ return $read;
112
+ }
113
+ restore_error_handler();
114
+
115
+ foreach ($r as $pipe) {
116
+ // prior PHP 5.4 the array passed to stream_select is modified and
117
+ // lose key association, we have to find back the key
118
+ $read[$type = array_search($pipe, $this->pipes, true)] = '';
119
+
120
+ do {
121
+ $data = fread($pipe, self::CHUNK_SIZE);
122
+ $read[$type] .= $data;
123
+ } while (isset($data[0]) && ($close || isset($data[self::CHUNK_SIZE - 1])));
124
+
125
+ if (!isset($read[$type][0])) {
126
+ unset($read[$type]);
127
+ }
128
+
129
+ if ($close && feof($pipe)) {
130
+ fclose($pipe);
131
+ unset($this->pipes[$type]);
132
+ }
133
+ }
134
+
135
+ return $read;
136
+ }
137
+
138
+ /**
139
+ * {@inheritdoc}
140
+ */
141
+ public function haveReadSupport()
142
+ {
143
+ return $this->haveReadSupport;
144
+ }
145
+
146
+ /**
147
+ * {@inheritdoc}
148
+ */
149
+ public function areOpen()
150
+ {
151
+ return (bool) $this->pipes;
152
+ }
153
+ }
@@ -0,0 +1,191 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Process\Pipes;
13
+
14
+ use Symfony\Component\Process\Exception\RuntimeException;
15
+ use Symfony\Component\Process\Process;
16
+
17
+ /**
18
+ * WindowsPipes implementation uses temporary files as handles.
19
+ *
20
+ * @see https://bugs.php.net/bug.php?id=51800
21
+ * @see https://bugs.php.net/bug.php?id=65650
22
+ *
23
+ * @author Romain Neutron <imprec@gmail.com>
24
+ *
25
+ * @internal
26
+ */
27
+ class WindowsPipes extends AbstractPipes
28
+ {
29
+ private $files = array();
30
+ private $fileHandles = array();
31
+ private $lockHandles = array();
32
+ private $readBytes = array(
33
+ Process::STDOUT => 0,
34
+ Process::STDERR => 0,
35
+ );
36
+ private $haveReadSupport;
37
+
38
+ public function __construct($input, bool $haveReadSupport)
39
+ {
40
+ $this->haveReadSupport = $haveReadSupport;
41
+
42
+ if ($this->haveReadSupport) {
43
+ // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
44
+ // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
45
+ //
46
+ // @see https://bugs.php.net/bug.php?id=51800
47
+ $pipes = array(
48
+ Process::STDOUT => Process::OUT,
49
+ Process::STDERR => Process::ERR,
50
+ );
51
+ $tmpDir = sys_get_temp_dir();
52
+ $lastError = 'unknown reason';
53
+ set_error_handler(function ($type, $msg) use (&$lastError) { $lastError = $msg; });
54
+ for ($i = 0;; ++$i) {
55
+ foreach ($pipes as $pipe => $name) {
56
+ $file = sprintf('%s\\sf_proc_%02X.%s', $tmpDir, $i, $name);
57
+
58
+ if (!$h = fopen($file.'.lock', 'w')) {
59
+ restore_error_handler();
60
+ throw new RuntimeException(sprintf('A temporary file could not be opened to write the process output: %s', $lastError));
61
+ }
62
+ if (!flock($h, LOCK_EX | LOCK_NB)) {
63
+ continue 2;
64
+ }
65
+ if (isset($this->lockHandles[$pipe])) {
66
+ flock($this->lockHandles[$pipe], LOCK_UN);
67
+ fclose($this->lockHandles[$pipe]);
68
+ }
69
+ $this->lockHandles[$pipe] = $h;
70
+
71
+ if (!fclose(fopen($file, 'w')) || !$h = fopen($file, 'r')) {
72
+ flock($this->lockHandles[$pipe], LOCK_UN);
73
+ fclose($this->lockHandles[$pipe]);
74
+ unset($this->lockHandles[$pipe]);
75
+ continue 2;
76
+ }
77
+ $this->fileHandles[$pipe] = $h;
78
+ $this->files[$pipe] = $file;
79
+ }
80
+ break;
81
+ }
82
+ restore_error_handler();
83
+ }
84
+
85
+ parent::__construct($input);
86
+ }
87
+
88
+ public function __destruct()
89
+ {
90
+ $this->close();
91
+ }
92
+
93
+ /**
94
+ * {@inheritdoc}
95
+ */
96
+ public function getDescriptors()
97
+ {
98
+ if (!$this->haveReadSupport) {
99
+ $nullstream = fopen('NUL', 'c');
100
+
101
+ return array(
102
+ array('pipe', 'r'),
103
+ $nullstream,
104
+ $nullstream,
105
+ );
106
+ }
107
+
108
+ // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
109
+ // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
110
+ // So we redirect output within the commandline and pass the nul device to the process
111
+ return array(
112
+ array('pipe', 'r'),
113
+ array('file', 'NUL', 'w'),
114
+ array('file', 'NUL', 'w'),
115
+ );
116
+ }
117
+
118
+ /**
119
+ * {@inheritdoc}
120
+ */
121
+ public function getFiles()
122
+ {
123
+ return $this->files;
124
+ }
125
+
126
+ /**
127
+ * {@inheritdoc}
128
+ */
129
+ public function readAndWrite($blocking, $close = false)
130
+ {
131
+ $this->unblock();
132
+ $w = $this->write();
133
+ $read = $r = $e = array();
134
+
135
+ if ($blocking) {
136
+ if ($w) {
137
+ @stream_select($r, $w, $e, 0, Process::TIMEOUT_PRECISION * 1E6);
138
+ } elseif ($this->fileHandles) {
139
+ usleep(Process::TIMEOUT_PRECISION * 1E6);
140
+ }
141
+ }
142
+ foreach ($this->fileHandles as $type => $fileHandle) {
143
+ $data = stream_get_contents($fileHandle, -1, $this->readBytes[$type]);
144
+
145
+ if (isset($data[0])) {
146
+ $this->readBytes[$type] += \strlen($data);
147
+ $read[$type] = $data;
148
+ }
149
+ if ($close) {
150
+ ftruncate($fileHandle, 0);
151
+ fclose($fileHandle);
152
+ flock($this->lockHandles[$type], LOCK_UN);
153
+ fclose($this->lockHandles[$type]);
154
+ unset($this->fileHandles[$type], $this->lockHandles[$type]);
155
+ }
156
+ }
157
+
158
+ return $read;
159
+ }
160
+
161
+ /**
162
+ * {@inheritdoc}
163
+ */
164
+ public function haveReadSupport()
165
+ {
166
+ return $this->haveReadSupport;
167
+ }
168
+
169
+ /**
170
+ * {@inheritdoc}
171
+ */
172
+ public function areOpen()
173
+ {
174
+ return $this->pipes && $this->fileHandles;
175
+ }
176
+
177
+ /**
178
+ * {@inheritdoc}
179
+ */
180
+ public function close()
181
+ {
182
+ parent::close();
183
+ foreach ($this->fileHandles as $type => $handle) {
184
+ ftruncate($handle, 0);
185
+ fclose($handle);
186
+ flock($this->lockHandles[$type], LOCK_UN);
187
+ fclose($this->lockHandles[$type]);
188
+ }
189
+ $this->fileHandles = $this->lockHandles = array();
190
+ }
191
+ }
@@ -0,0 +1,1652 @@
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ namespace Symfony\Component\Process;
13
+
14
+ use Symfony\Component\Process\Exception\InvalidArgumentException;
15
+ use Symfony\Component\Process\Exception\LogicException;
16
+ use Symfony\Component\Process\Exception\ProcessFailedException;
17
+ use Symfony\Component\Process\Exception\ProcessSignaledException;
18
+ use Symfony\Component\Process\Exception\ProcessTimedOutException;
19
+ use Symfony\Component\Process\Exception\RuntimeException;
20
+ use Symfony\Component\Process\Pipes\PipesInterface;
21
+ use Symfony\Component\Process\Pipes\UnixPipes;
22
+ use Symfony\Component\Process\Pipes\WindowsPipes;
23
+
24
+ /**
25
+ * Process is a thin wrapper around proc_* functions to easily
26
+ * start independent PHP processes.
27
+ *
28
+ * @author Fabien Potencier <fabien@symfony.com>
29
+ * @author Romain Neutron <imprec@gmail.com>
30
+ */
31
+ class Process implements \IteratorAggregate
32
+ {
33
+ const ERR = 'err';
34
+ const OUT = 'out';
35
+
36
+ const STATUS_READY = 'ready';
37
+ const STATUS_STARTED = 'started';
38
+ const STATUS_TERMINATED = 'terminated';
39
+
40
+ const STDIN = 0;
41
+ const STDOUT = 1;
42
+ const STDERR = 2;
43
+
44
+ // Timeout Precision in seconds.
45
+ const TIMEOUT_PRECISION = 0.2;
46
+
47
+ const ITER_NON_BLOCKING = 1; // By default, iterating over outputs is a blocking call, use this flag to make it non-blocking
48
+ const ITER_KEEP_OUTPUT = 2; // By default, outputs are cleared while iterating, use this flag to keep them in memory
49
+ const ITER_SKIP_OUT = 4; // Use this flag to skip STDOUT while iterating
50
+ const ITER_SKIP_ERR = 8; // Use this flag to skip STDERR while iterating
51
+
52
+ private $callback;
53
+ private $hasCallback = false;
54
+ private $commandline;
55
+ private $cwd;
56
+ private $env;
57
+ private $input;
58
+ private $starttime;
59
+ private $lastOutputTime;
60
+ private $timeout;
61
+ private $idleTimeout;
62
+ private $exitcode;
63
+ private $fallbackStatus = array();
64
+ private $processInformation;
65
+ private $outputDisabled = false;
66
+ private $stdout;
67
+ private $stderr;
68
+ private $process;
69
+ private $status = self::STATUS_READY;
70
+ private $incrementalOutputOffset = 0;
71
+ private $incrementalErrorOutputOffset = 0;
72
+ private $tty;
73
+ private $pty;
74
+
75
+ private $useFileHandles = false;
76
+ /** @var PipesInterface */
77
+ private $processPipes;
78
+
79
+ private $latestSignal;
80
+
81
+ private static $sigchild;
82
+
83
+ /**
84
+ * Exit codes translation table.
85
+ *
86
+ * User-defined errors must use exit codes in the 64-113 range.
87
+ */
88
+ public static $exitCodes = array(
89
+ 0 => 'OK',
90
+ 1 => 'General error',
91
+ 2 => 'Misuse of shell builtins',
92
+
93
+ 126 => 'Invoked command cannot execute',
94
+ 127 => 'Command not found',
95
+ 128 => 'Invalid exit argument',
96
+
97
+ // signals
98
+ 129 => 'Hangup',
99
+ 130 => 'Interrupt',
100
+ 131 => 'Quit and dump core',
101
+ 132 => 'Illegal instruction',
102
+ 133 => 'Trace/breakpoint trap',
103
+ 134 => 'Process aborted',
104
+ 135 => 'Bus error: "access to undefined portion of memory object"',
105
+ 136 => 'Floating point exception: "erroneous arithmetic operation"',
106
+ 137 => 'Kill (terminate immediately)',
107
+ 138 => 'User-defined 1',
108
+ 139 => 'Segmentation violation',
109
+ 140 => 'User-defined 2',
110
+ 141 => 'Write to pipe with no one reading',
111
+ 142 => 'Signal raised by alarm',
112
+ 143 => 'Termination (request to terminate)',
113
+ // 144 - not defined
114
+ 145 => 'Child process terminated, stopped (or continued*)',
115
+ 146 => 'Continue if stopped',
116
+ 147 => 'Stop executing temporarily',
117
+ 148 => 'Terminal stop signal',
118
+ 149 => 'Background process attempting to read from tty ("in")',
119
+ 150 => 'Background process attempting to write to tty ("out")',
120
+ 151 => 'Urgent data available on socket',
121
+ 152 => 'CPU time limit exceeded',
122
+ 153 => 'File size limit exceeded',
123
+ 154 => 'Signal raised by timer counting virtual time: "virtual timer expired"',
124
+ 155 => 'Profiling timer expired',
125
+ // 156 - not defined
126
+ 157 => 'Pollable event',
127
+ // 158 - not defined
128
+ 159 => 'Bad syscall',
129
+ );
130
+
131
+ /**
132
+ * @param array $command The command to run and its arguments listed as separate entries
133
+ * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
134
+ * @param array|null $env The environment variables or null to use the same environment as the current PHP process
135
+ * @param mixed|null $input The input as stream resource, scalar or \Traversable, or null for no input
136
+ * @param int|float|null $timeout The timeout in seconds or null to disable
137
+ *
138
+ * @throws RuntimeException When proc_open is not installed
139
+ */
140
+ public function __construct($command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
141
+ {
142
+ if (!\function_exists('proc_open')) {
143
+ throw new LogicException('The Process class relies on proc_open, which is not available on your PHP installation.');
144
+ }
145
+
146
+ if (!\is_array($command)) {
147
+ @trigger_error(sprintf('Passing a command as string when creating a "%s" instance is deprecated since Symfony 4.2, pass it as an array of its arguments instead, or use the "Process::fromShellCommandline()" constructor if you need features provided by the shell.', __CLASS__), E_USER_DEPRECATED);
148
+ }
149
+
150
+ $this->commandline = $command;
151
+ $this->cwd = $cwd;
152
+
153
+ // on Windows, if the cwd changed via chdir(), proc_open defaults to the dir where PHP was started
154
+ // on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
155
+ // @see : https://bugs.php.net/bug.php?id=51800
156
+ // @see : https://bugs.php.net/bug.php?id=50524
157
+ if (null === $this->cwd && (\defined('ZEND_THREAD_SAFE') || '\\' === \DIRECTORY_SEPARATOR)) {
158
+ $this->cwd = getcwd();
159
+ }
160
+ if (null !== $env) {
161
+ $this->setEnv($env);
162
+ }
163
+
164
+ $this->setInput($input);
165
+ $this->setTimeout($timeout);
166
+ $this->useFileHandles = '\\' === \DIRECTORY_SEPARATOR;
167
+ $this->pty = false;
168
+ }
169
+
170
+ /**
171
+ * Creates a Process instance as a command-line to be run in a shell wrapper.
172
+ *
173
+ * Command-lines are parsed by the shell of your OS (/bin/sh on Unix-like, cmd.exe on Windows.)
174
+ * This allows using e.g. pipes or conditional execution. In this mode, signals are sent to the
175
+ * shell wrapper and not to your commands.
176
+ *
177
+ * In order to inject dynamic values into command-lines, we strongly recommend using placeholders.
178
+ * This will save escaping values, which is not portable nor secure anyway:
179
+ *
180
+ * $process = Process::fromShellCommandline('my_command "$MY_VAR"');
181
+ * $process->run(null, ['MY_VAR' => $theValue]);
182
+ *
183
+ * @param string $command The command line to pass to the shell of the OS
184
+ * @param string|null $cwd The working directory or null to use the working dir of the current PHP process
185
+ * @param array|null $env The environment variables or null to use the same environment as the current PHP process
186
+ * @param mixed|null $input The input as stream resource, scalar or \Traversable, or null for no input
187
+ * @param int|float|null $timeout The timeout in seconds or null to disable
188
+ *
189
+ * @throws RuntimeException When proc_open is not installed
190
+ */
191
+ public static function fromShellCommandline(string $command, string $cwd = null, array $env = null, $input = null, ?float $timeout = 60)
192
+ {
193
+ $process = new static(array(), $cwd, $env, $input, $timeout);
194
+ $process->commandline = $command;
195
+
196
+ return $process;
197
+ }
198
+
199
+ public function __destruct()
200
+ {
201
+ $this->stop(0);
202
+ }
203
+
204
+ public function __clone()
205
+ {
206
+ $this->resetProcessData();
207
+ }
208
+
209
+ /**
210
+ * Runs the process.
211
+ *
212
+ * The callback receives the type of output (out or err) and
213
+ * some bytes from the output in real-time. It allows to have feedback
214
+ * from the independent process during execution.
215
+ *
216
+ * The STDOUT and STDERR are also available after the process is finished
217
+ * via the getOutput() and getErrorOutput() methods.
218
+ *
219
+ * @param callable|null $callback A PHP callback to run whenever there is some
220
+ * output available on STDOUT or STDERR
221
+ * @param array $env An array of additional env vars to set when running the process
222
+ *
223
+ * @return int The exit status code
224
+ *
225
+ * @throws RuntimeException When process can't be launched
226
+ * @throws RuntimeException When process stopped after receiving signal
227
+ * @throws LogicException In case a callback is provided and output has been disabled
228
+ *
229
+ * @final
230
+ */
231
+ public function run(callable $callback = null, array $env = array()): int
232
+ {
233
+ $this->start($callback, $env);
234
+
235
+ return $this->wait();
236
+ }
237
+
238
+ /**
239
+ * Runs the process.
240
+ *
241
+ * This is identical to run() except that an exception is thrown if the process
242
+ * exits with a non-zero exit code.
243
+ *
244
+ * @param callable|null $callback
245
+ * @param array $env An array of additional env vars to set when running the process
246
+ *
247
+ * @return self
248
+ *
249
+ * @throws ProcessFailedException if the process didn't terminate successfully
250
+ *
251
+ * @final
252
+ */
253
+ public function mustRun(callable $callback = null, array $env = array())
254
+ {
255
+ if (0 !== $this->run($callback, $env)) {
256
+ throw new ProcessFailedException($this);
257
+ }
258
+
259
+ return $this;
260
+ }
261
+
262
+ /**
263
+ * Starts the process and returns after writing the input to STDIN.
264
+ *
265
+ * This method blocks until all STDIN data is sent to the process then it
266
+ * returns while the process runs in the background.
267
+ *
268
+ * The termination of the process can be awaited with wait().
269
+ *
270
+ * The callback receives the type of output (out or err) and some bytes from
271
+ * the output in real-time while writing the standard input to the process.
272
+ * It allows to have feedback from the independent process during execution.
273
+ *
274
+ * @param callable|null $callback A PHP callback to run whenever there is some
275
+ * output available on STDOUT or STDERR
276
+ * @param array $env An array of additional env vars to set when running the process
277
+ *
278
+ * @throws RuntimeException When process can't be launched
279
+ * @throws RuntimeException When process is already running
280
+ * @throws LogicException In case a callback is provided and output has been disabled
281
+ */
282
+ public function start(callable $callback = null, array $env = array())
283
+ {
284
+ if ($this->isRunning()) {
285
+ throw new RuntimeException('Process is already running');
286
+ }
287
+
288
+ $this->resetProcessData();
289
+ $this->starttime = $this->lastOutputTime = microtime(true);
290
+ $this->callback = $this->buildCallback($callback);
291
+ $this->hasCallback = null !== $callback;
292
+ $descriptors = $this->getDescriptors();
293
+
294
+ if (\is_array($commandline = $this->commandline)) {
295
+ $commandline = implode(' ', array_map(array($this, 'escapeArgument'), $commandline));
296
+
297
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
298
+ // exec is mandatory to deal with sending a signal to the process
299
+ $commandline = 'exec '.$commandline;
300
+ }
301
+ }
302
+
303
+ if ($this->env) {
304
+ $env += $this->env;
305
+ }
306
+ $env += $this->getDefaultEnv();
307
+
308
+ $options = array('suppress_errors' => true);
309
+
310
+ if ('\\' === \DIRECTORY_SEPARATOR) {
311
+ $options['bypass_shell'] = true;
312
+ $commandline = $this->prepareWindowsCommandLine($commandline, $env);
313
+ } elseif (!$this->useFileHandles && $this->isSigchildEnabled()) {
314
+ // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
315
+ $descriptors[3] = array('pipe', 'w');
316
+
317
+ // See https://unix.stackexchange.com/questions/71205/background-process-pipe-input
318
+ $commandline = '{ ('.$commandline.') <&3 3<&- 3>/dev/null & } 3<&0;';
319
+ $commandline .= 'pid=$!; echo $pid >&3; wait $pid; code=$?; echo $code >&3; exit $code';
320
+
321
+ // Workaround for the bug, when PTS functionality is enabled.
322
+ // @see : https://bugs.php.net/69442
323
+ $ptsWorkaround = fopen(__FILE__, 'r');
324
+ }
325
+
326
+ $envPairs = array();
327
+ foreach ($env as $k => $v) {
328
+ if (false !== $v) {
329
+ $envPairs[] = $k.'='.$v;
330
+ }
331
+ }
332
+
333
+ if (!is_dir($this->cwd)) {
334
+ throw new RuntimeException('The provided cwd does not exist.');
335
+ }
336
+
337
+ $this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $options);
338
+
339
+ if (!\is_resource($this->process)) {
340
+ throw new RuntimeException('Unable to launch a new process.');
341
+ }
342
+ $this->status = self::STATUS_STARTED;
343
+
344
+ if (isset($descriptors[3])) {
345
+ $this->fallbackStatus['pid'] = (int) fgets($this->processPipes->pipes[3]);
346
+ }
347
+
348
+ if ($this->tty) {
349
+ return;
350
+ }
351
+
352
+ $this->updateStatus(false);
353
+ $this->checkTimeout();
354
+ }
355
+
356
+ /**
357
+ * Restarts the process.
358
+ *
359
+ * Be warned that the process is cloned before being started.
360
+ *
361
+ * @param callable|null $callback A PHP callback to run whenever there is some
362
+ * output available on STDOUT or STDERR
363
+ * @param array $env An array of additional env vars to set when running the process
364
+ *
365
+ * @return $this
366
+ *
367
+ * @throws RuntimeException When process can't be launched
368
+ * @throws RuntimeException When process is already running
369
+ *
370
+ * @see start()
371
+ *
372
+ * @final
373
+ */
374
+ public function restart(callable $callback = null, array $env = array())
375
+ {
376
+ if ($this->isRunning()) {
377
+ throw new RuntimeException('Process is already running');
378
+ }
379
+
380
+ $process = clone $this;
381
+ $process->start($callback, $env);
382
+
383
+ return $process;
384
+ }
385
+
386
+ /**
387
+ * Waits for the process to terminate.
388
+ *
389
+ * The callback receives the type of output (out or err) and some bytes
390
+ * from the output in real-time while writing the standard input to the process.
391
+ * It allows to have feedback from the independent process during execution.
392
+ *
393
+ * @param callable|null $callback A valid PHP callback
394
+ *
395
+ * @return int The exitcode of the process
396
+ *
397
+ * @throws RuntimeException When process timed out
398
+ * @throws RuntimeException When process stopped after receiving signal
399
+ * @throws LogicException When process is not yet started
400
+ */
401
+ public function wait(callable $callback = null)
402
+ {
403
+ $this->requireProcessIsStarted(__FUNCTION__);
404
+
405
+ $this->updateStatus(false);
406
+
407
+ if (null !== $callback) {
408
+ if (!$this->processPipes->haveReadSupport()) {
409
+ $this->stop(0);
410
+ throw new \LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::wait"');
411
+ }
412
+ $this->callback = $this->buildCallback($callback);
413
+ }
414
+
415
+ do {
416
+ $this->checkTimeout();
417
+ $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
418
+ $this->readPipes($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
419
+ } while ($running);
420
+
421
+ while ($this->isRunning()) {
422
+ usleep(1000);
423
+ }
424
+
425
+ if ($this->processInformation['signaled'] && $this->processInformation['termsig'] !== $this->latestSignal) {
426
+ throw new ProcessSignaledException($this);
427
+ }
428
+
429
+ return $this->exitcode;
430
+ }
431
+
432
+ /**
433
+ * Waits until the callback returns true.
434
+ *
435
+ * The callback receives the type of output (out or err) and some bytes
436
+ * from the output in real-time while writing the standard input to the process.
437
+ * It allows to have feedback from the independent process during execution.
438
+ *
439
+ * @throws RuntimeException When process timed out
440
+ * @throws LogicException When process is not yet started
441
+ */
442
+ public function waitUntil(callable $callback): bool
443
+ {
444
+ $this->requireProcessIsStarted(__FUNCTION__);
445
+ $this->updateStatus(false);
446
+
447
+ if (!$this->processPipes->haveReadSupport()) {
448
+ $this->stop(0);
449
+ throw new \LogicException('Pass the callback to the "Process::start" method or call enableOutput to use a callback with "Process::waitUntil".');
450
+ }
451
+ $callback = $this->buildCallback($callback);
452
+
453
+ $ready = false;
454
+ while (true) {
455
+ $this->checkTimeout();
456
+ $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
457
+ $output = $this->processPipes->readAndWrite($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
458
+
459
+ foreach ($output as $type => $data) {
460
+ if (3 !== $type) {
461
+ $ready = $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data) || $ready;
462
+ } elseif (!isset($this->fallbackStatus['signaled'])) {
463
+ $this->fallbackStatus['exitcode'] = (int) $data;
464
+ }
465
+ }
466
+ if ($ready) {
467
+ return true;
468
+ }
469
+ if (!$running) {
470
+ return false;
471
+ }
472
+
473
+ usleep(1000);
474
+ }
475
+ }
476
+
477
+ /**
478
+ * Returns the Pid (process identifier), if applicable.
479
+ *
480
+ * @return int|null The process id if running, null otherwise
481
+ */
482
+ public function getPid()
483
+ {
484
+ return $this->isRunning() ? $this->processInformation['pid'] : null;
485
+ }
486
+
487
+ /**
488
+ * Sends a POSIX signal to the process.
489
+ *
490
+ * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
491
+ *
492
+ * @return $this
493
+ *
494
+ * @throws LogicException In case the process is not running
495
+ * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
496
+ * @throws RuntimeException In case of failure
497
+ */
498
+ public function signal($signal)
499
+ {
500
+ $this->doSignal($signal, true);
501
+
502
+ return $this;
503
+ }
504
+
505
+ /**
506
+ * Disables fetching output and error output from the underlying process.
507
+ *
508
+ * @return $this
509
+ *
510
+ * @throws RuntimeException In case the process is already running
511
+ * @throws LogicException if an idle timeout is set
512
+ */
513
+ public function disableOutput()
514
+ {
515
+ if ($this->isRunning()) {
516
+ throw new RuntimeException('Disabling output while the process is running is not possible.');
517
+ }
518
+ if (null !== $this->idleTimeout) {
519
+ throw new LogicException('Output can not be disabled while an idle timeout is set.');
520
+ }
521
+
522
+ $this->outputDisabled = true;
523
+
524
+ return $this;
525
+ }
526
+
527
+ /**
528
+ * Enables fetching output and error output from the underlying process.
529
+ *
530
+ * @return $this
531
+ *
532
+ * @throws RuntimeException In case the process is already running
533
+ */
534
+ public function enableOutput()
535
+ {
536
+ if ($this->isRunning()) {
537
+ throw new RuntimeException('Enabling output while the process is running is not possible.');
538
+ }
539
+
540
+ $this->outputDisabled = false;
541
+
542
+ return $this;
543
+ }
544
+
545
+ /**
546
+ * Returns true in case the output is disabled, false otherwise.
547
+ *
548
+ * @return bool
549
+ */
550
+ public function isOutputDisabled()
551
+ {
552
+ return $this->outputDisabled;
553
+ }
554
+
555
+ /**
556
+ * Returns the current output of the process (STDOUT).
557
+ *
558
+ * @return string The process output
559
+ *
560
+ * @throws LogicException in case the output has been disabled
561
+ * @throws LogicException In case the process is not started
562
+ */
563
+ public function getOutput()
564
+ {
565
+ $this->readPipesForOutput(__FUNCTION__);
566
+
567
+ if (false === $ret = stream_get_contents($this->stdout, -1, 0)) {
568
+ return '';
569
+ }
570
+
571
+ return $ret;
572
+ }
573
+
574
+ /**
575
+ * Returns the output incrementally.
576
+ *
577
+ * In comparison with the getOutput method which always return the whole
578
+ * output, this one returns the new output since the last call.
579
+ *
580
+ * @return string The process output since the last call
581
+ *
582
+ * @throws LogicException in case the output has been disabled
583
+ * @throws LogicException In case the process is not started
584
+ */
585
+ public function getIncrementalOutput()
586
+ {
587
+ $this->readPipesForOutput(__FUNCTION__);
588
+
589
+ $latest = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
590
+ $this->incrementalOutputOffset = ftell($this->stdout);
591
+
592
+ if (false === $latest) {
593
+ return '';
594
+ }
595
+
596
+ return $latest;
597
+ }
598
+
599
+ /**
600
+ * Returns an iterator to the output of the process, with the output type as keys (Process::OUT/ERR).
601
+ *
602
+ * @param int $flags A bit field of Process::ITER_* flags
603
+ *
604
+ * @throws LogicException in case the output has been disabled
605
+ * @throws LogicException In case the process is not started
606
+ *
607
+ * @return \Generator
608
+ */
609
+ public function getIterator($flags = 0)
610
+ {
611
+ $this->readPipesForOutput(__FUNCTION__, false);
612
+
613
+ $clearOutput = !(self::ITER_KEEP_OUTPUT & $flags);
614
+ $blocking = !(self::ITER_NON_BLOCKING & $flags);
615
+ $yieldOut = !(self::ITER_SKIP_OUT & $flags);
616
+ $yieldErr = !(self::ITER_SKIP_ERR & $flags);
617
+
618
+ while (null !== $this->callback || ($yieldOut && !feof($this->stdout)) || ($yieldErr && !feof($this->stderr))) {
619
+ if ($yieldOut) {
620
+ $out = stream_get_contents($this->stdout, -1, $this->incrementalOutputOffset);
621
+
622
+ if (isset($out[0])) {
623
+ if ($clearOutput) {
624
+ $this->clearOutput();
625
+ } else {
626
+ $this->incrementalOutputOffset = ftell($this->stdout);
627
+ }
628
+
629
+ yield self::OUT => $out;
630
+ }
631
+ }
632
+
633
+ if ($yieldErr) {
634
+ $err = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
635
+
636
+ if (isset($err[0])) {
637
+ if ($clearOutput) {
638
+ $this->clearErrorOutput();
639
+ } else {
640
+ $this->incrementalErrorOutputOffset = ftell($this->stderr);
641
+ }
642
+
643
+ yield self::ERR => $err;
644
+ }
645
+ }
646
+
647
+ if (!$blocking && !isset($out[0]) && !isset($err[0])) {
648
+ yield self::OUT => '';
649
+ }
650
+
651
+ $this->checkTimeout();
652
+ $this->readPipesForOutput(__FUNCTION__, $blocking);
653
+ }
654
+ }
655
+
656
+ /**
657
+ * Clears the process output.
658
+ *
659
+ * @return $this
660
+ */
661
+ public function clearOutput()
662
+ {
663
+ ftruncate($this->stdout, 0);
664
+ fseek($this->stdout, 0);
665
+ $this->incrementalOutputOffset = 0;
666
+
667
+ return $this;
668
+ }
669
+
670
+ /**
671
+ * Returns the current error output of the process (STDERR).
672
+ *
673
+ * @return string The process error output
674
+ *
675
+ * @throws LogicException in case the output has been disabled
676
+ * @throws LogicException In case the process is not started
677
+ */
678
+ public function getErrorOutput()
679
+ {
680
+ $this->readPipesForOutput(__FUNCTION__);
681
+
682
+ if (false === $ret = stream_get_contents($this->stderr, -1, 0)) {
683
+ return '';
684
+ }
685
+
686
+ return $ret;
687
+ }
688
+
689
+ /**
690
+ * Returns the errorOutput incrementally.
691
+ *
692
+ * In comparison with the getErrorOutput method which always return the
693
+ * whole error output, this one returns the new error output since the last
694
+ * call.
695
+ *
696
+ * @return string The process error output since the last call
697
+ *
698
+ * @throws LogicException in case the output has been disabled
699
+ * @throws LogicException In case the process is not started
700
+ */
701
+ public function getIncrementalErrorOutput()
702
+ {
703
+ $this->readPipesForOutput(__FUNCTION__);
704
+
705
+ $latest = stream_get_contents($this->stderr, -1, $this->incrementalErrorOutputOffset);
706
+ $this->incrementalErrorOutputOffset = ftell($this->stderr);
707
+
708
+ if (false === $latest) {
709
+ return '';
710
+ }
711
+
712
+ return $latest;
713
+ }
714
+
715
+ /**
716
+ * Clears the process output.
717
+ *
718
+ * @return $this
719
+ */
720
+ public function clearErrorOutput()
721
+ {
722
+ ftruncate($this->stderr, 0);
723
+ fseek($this->stderr, 0);
724
+ $this->incrementalErrorOutputOffset = 0;
725
+
726
+ return $this;
727
+ }
728
+
729
+ /**
730
+ * Returns the exit code returned by the process.
731
+ *
732
+ * @return int|null The exit status code, null if the Process is not terminated
733
+ */
734
+ public function getExitCode()
735
+ {
736
+ $this->updateStatus(false);
737
+
738
+ return $this->exitcode;
739
+ }
740
+
741
+ /**
742
+ * Returns a string representation for the exit code returned by the process.
743
+ *
744
+ * This method relies on the Unix exit code status standardization
745
+ * and might not be relevant for other operating systems.
746
+ *
747
+ * @return string|null A string representation for the exit status code, null if the Process is not terminated
748
+ *
749
+ * @see http://tldp.org/LDP/abs/html/exitcodes.html
750
+ * @see http://en.wikipedia.org/wiki/Unix_signal
751
+ */
752
+ public function getExitCodeText()
753
+ {
754
+ if (null === $exitcode = $this->getExitCode()) {
755
+ return;
756
+ }
757
+
758
+ return isset(self::$exitCodes[$exitcode]) ? self::$exitCodes[$exitcode] : 'Unknown error';
759
+ }
760
+
761
+ /**
762
+ * Checks if the process ended successfully.
763
+ *
764
+ * @return bool true if the process ended successfully, false otherwise
765
+ */
766
+ public function isSuccessful()
767
+ {
768
+ return 0 === $this->getExitCode();
769
+ }
770
+
771
+ /**
772
+ * Returns true if the child process has been terminated by an uncaught signal.
773
+ *
774
+ * It always returns false on Windows.
775
+ *
776
+ * @return bool
777
+ *
778
+ * @throws LogicException In case the process is not terminated
779
+ */
780
+ public function hasBeenSignaled()
781
+ {
782
+ $this->requireProcessIsTerminated(__FUNCTION__);
783
+
784
+ return $this->processInformation['signaled'];
785
+ }
786
+
787
+ /**
788
+ * Returns the number of the signal that caused the child process to terminate its execution.
789
+ *
790
+ * It is only meaningful if hasBeenSignaled() returns true.
791
+ *
792
+ * @return int
793
+ *
794
+ * @throws RuntimeException In case --enable-sigchild is activated
795
+ * @throws LogicException In case the process is not terminated
796
+ */
797
+ public function getTermSignal()
798
+ {
799
+ $this->requireProcessIsTerminated(__FUNCTION__);
800
+
801
+ if ($this->isSigchildEnabled() && -1 === $this->processInformation['termsig']) {
802
+ throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.');
803
+ }
804
+
805
+ return $this->processInformation['termsig'];
806
+ }
807
+
808
+ /**
809
+ * Returns true if the child process has been stopped by a signal.
810
+ *
811
+ * It always returns false on Windows.
812
+ *
813
+ * @return bool
814
+ *
815
+ * @throws LogicException In case the process is not terminated
816
+ */
817
+ public function hasBeenStopped()
818
+ {
819
+ $this->requireProcessIsTerminated(__FUNCTION__);
820
+
821
+ return $this->processInformation['stopped'];
822
+ }
823
+
824
+ /**
825
+ * Returns the number of the signal that caused the child process to stop its execution.
826
+ *
827
+ * It is only meaningful if hasBeenStopped() returns true.
828
+ *
829
+ * @return int
830
+ *
831
+ * @throws LogicException In case the process is not terminated
832
+ */
833
+ public function getStopSignal()
834
+ {
835
+ $this->requireProcessIsTerminated(__FUNCTION__);
836
+
837
+ return $this->processInformation['stopsig'];
838
+ }
839
+
840
+ /**
841
+ * Checks if the process is currently running.
842
+ *
843
+ * @return bool true if the process is currently running, false otherwise
844
+ */
845
+ public function isRunning()
846
+ {
847
+ if (self::STATUS_STARTED !== $this->status) {
848
+ return false;
849
+ }
850
+
851
+ $this->updateStatus(false);
852
+
853
+ return $this->processInformation['running'];
854
+ }
855
+
856
+ /**
857
+ * Checks if the process has been started with no regard to the current state.
858
+ *
859
+ * @return bool true if status is ready, false otherwise
860
+ */
861
+ public function isStarted()
862
+ {
863
+ return self::STATUS_READY != $this->status;
864
+ }
865
+
866
+ /**
867
+ * Checks if the process is terminated.
868
+ *
869
+ * @return bool true if process is terminated, false otherwise
870
+ */
871
+ public function isTerminated()
872
+ {
873
+ $this->updateStatus(false);
874
+
875
+ return self::STATUS_TERMINATED == $this->status;
876
+ }
877
+
878
+ /**
879
+ * Gets the process status.
880
+ *
881
+ * The status is one of: ready, started, terminated.
882
+ *
883
+ * @return string The current process status
884
+ */
885
+ public function getStatus()
886
+ {
887
+ $this->updateStatus(false);
888
+
889
+ return $this->status;
890
+ }
891
+
892
+ /**
893
+ * Stops the process.
894
+ *
895
+ * @param int|float $timeout The timeout in seconds
896
+ * @param int $signal A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL (9)
897
+ *
898
+ * @return int The exit-code of the process
899
+ */
900
+ public function stop($timeout = 10, $signal = null)
901
+ {
902
+ $timeoutMicro = microtime(true) + $timeout;
903
+ if ($this->isRunning()) {
904
+ // given SIGTERM may not be defined and that "proc_terminate" uses the constant value and not the constant itself, we use the same here
905
+ $this->doSignal(15, false);
906
+ do {
907
+ usleep(1000);
908
+ } while ($this->isRunning() && microtime(true) < $timeoutMicro);
909
+
910
+ if ($this->isRunning()) {
911
+ // Avoid exception here: process is supposed to be running, but it might have stopped just
912
+ // after this line. In any case, let's silently discard the error, we cannot do anything.
913
+ $this->doSignal($signal ?: 9, false);
914
+ }
915
+ }
916
+
917
+ if ($this->isRunning()) {
918
+ if (isset($this->fallbackStatus['pid'])) {
919
+ unset($this->fallbackStatus['pid']);
920
+
921
+ return $this->stop(0, $signal);
922
+ }
923
+ $this->close();
924
+ }
925
+
926
+ return $this->exitcode;
927
+ }
928
+
929
+ /**
930
+ * Adds a line to the STDOUT stream.
931
+ *
932
+ * @internal
933
+ */
934
+ public function addOutput(string $line)
935
+ {
936
+ $this->lastOutputTime = microtime(true);
937
+
938
+ fseek($this->stdout, 0, SEEK_END);
939
+ fwrite($this->stdout, $line);
940
+ fseek($this->stdout, $this->incrementalOutputOffset);
941
+ }
942
+
943
+ /**
944
+ * Adds a line to the STDERR stream.
945
+ *
946
+ * @internal
947
+ */
948
+ public function addErrorOutput(string $line)
949
+ {
950
+ $this->lastOutputTime = microtime(true);
951
+
952
+ fseek($this->stderr, 0, SEEK_END);
953
+ fwrite($this->stderr, $line);
954
+ fseek($this->stderr, $this->incrementalErrorOutputOffset);
955
+ }
956
+
957
+ /**
958
+ * Gets the command line to be executed.
959
+ *
960
+ * @return string The command to execute
961
+ */
962
+ public function getCommandLine()
963
+ {
964
+ return \is_array($this->commandline) ? implode(' ', array_map(array($this, 'escapeArgument'), $this->commandline)) : $this->commandline;
965
+ }
966
+
967
+ /**
968
+ * Sets the command line to be executed.
969
+ *
970
+ * @param string|array $commandline The command to execute
971
+ *
972
+ * @return self The current Process instance
973
+ *
974
+ * @deprecated since Symfony 4.2.
975
+ */
976
+ public function setCommandLine($commandline)
977
+ {
978
+ @trigger_error(sprintf('The "%s()" method is deprecated since Symfony 4.2.', __METHOD__), E_USER_DEPRECATED);
979
+
980
+ $this->commandline = $commandline;
981
+
982
+ return $this;
983
+ }
984
+
985
+ /**
986
+ * Gets the process timeout (max. runtime).
987
+ *
988
+ * @return float|null The timeout in seconds or null if it's disabled
989
+ */
990
+ public function getTimeout()
991
+ {
992
+ return $this->timeout;
993
+ }
994
+
995
+ /**
996
+ * Gets the process idle timeout (max. time since last output).
997
+ *
998
+ * @return float|null The timeout in seconds or null if it's disabled
999
+ */
1000
+ public function getIdleTimeout()
1001
+ {
1002
+ return $this->idleTimeout;
1003
+ }
1004
+
1005
+ /**
1006
+ * Sets the process timeout (max. runtime).
1007
+ *
1008
+ * To disable the timeout, set this value to null.
1009
+ *
1010
+ * @param int|float|null $timeout The timeout in seconds
1011
+ *
1012
+ * @return self The current Process instance
1013
+ *
1014
+ * @throws InvalidArgumentException if the timeout is negative
1015
+ */
1016
+ public function setTimeout($timeout)
1017
+ {
1018
+ $this->timeout = $this->validateTimeout($timeout);
1019
+
1020
+ return $this;
1021
+ }
1022
+
1023
+ /**
1024
+ * Sets the process idle timeout (max. time since last output).
1025
+ *
1026
+ * To disable the timeout, set this value to null.
1027
+ *
1028
+ * @param int|float|null $timeout The timeout in seconds
1029
+ *
1030
+ * @return self The current Process instance
1031
+ *
1032
+ * @throws LogicException if the output is disabled
1033
+ * @throws InvalidArgumentException if the timeout is negative
1034
+ */
1035
+ public function setIdleTimeout($timeout)
1036
+ {
1037
+ if (null !== $timeout && $this->outputDisabled) {
1038
+ throw new LogicException('Idle timeout can not be set while the output is disabled.');
1039
+ }
1040
+
1041
+ $this->idleTimeout = $this->validateTimeout($timeout);
1042
+
1043
+ return $this;
1044
+ }
1045
+
1046
+ /**
1047
+ * Enables or disables the TTY mode.
1048
+ *
1049
+ * @param bool $tty True to enabled and false to disable
1050
+ *
1051
+ * @return self The current Process instance
1052
+ *
1053
+ * @throws RuntimeException In case the TTY mode is not supported
1054
+ */
1055
+ public function setTty($tty)
1056
+ {
1057
+ if ('\\' === \DIRECTORY_SEPARATOR && $tty) {
1058
+ throw new RuntimeException('TTY mode is not supported on Windows platform.');
1059
+ }
1060
+
1061
+ if ($tty && !self::isTtySupported()) {
1062
+ throw new RuntimeException('TTY mode requires /dev/tty to be read/writable.');
1063
+ }
1064
+
1065
+ $this->tty = (bool) $tty;
1066
+
1067
+ return $this;
1068
+ }
1069
+
1070
+ /**
1071
+ * Checks if the TTY mode is enabled.
1072
+ *
1073
+ * @return bool true if the TTY mode is enabled, false otherwise
1074
+ */
1075
+ public function isTty()
1076
+ {
1077
+ return $this->tty;
1078
+ }
1079
+
1080
+ /**
1081
+ * Sets PTY mode.
1082
+ *
1083
+ * @param bool $bool
1084
+ *
1085
+ * @return self
1086
+ */
1087
+ public function setPty($bool)
1088
+ {
1089
+ $this->pty = (bool) $bool;
1090
+
1091
+ return $this;
1092
+ }
1093
+
1094
+ /**
1095
+ * Returns PTY state.
1096
+ *
1097
+ * @return bool
1098
+ */
1099
+ public function isPty()
1100
+ {
1101
+ return $this->pty;
1102
+ }
1103
+
1104
+ /**
1105
+ * Gets the working directory.
1106
+ *
1107
+ * @return string|null The current working directory or null on failure
1108
+ */
1109
+ public function getWorkingDirectory()
1110
+ {
1111
+ if (null === $this->cwd) {
1112
+ // getcwd() will return false if any one of the parent directories does not have
1113
+ // the readable or search mode set, even if the current directory does
1114
+ return getcwd() ?: null;
1115
+ }
1116
+
1117
+ return $this->cwd;
1118
+ }
1119
+
1120
+ /**
1121
+ * Sets the current working directory.
1122
+ *
1123
+ * @param string $cwd The new working directory
1124
+ *
1125
+ * @return self The current Process instance
1126
+ */
1127
+ public function setWorkingDirectory($cwd)
1128
+ {
1129
+ $this->cwd = $cwd;
1130
+
1131
+ return $this;
1132
+ }
1133
+
1134
+ /**
1135
+ * Gets the environment variables.
1136
+ *
1137
+ * @return array The current environment variables
1138
+ */
1139
+ public function getEnv()
1140
+ {
1141
+ return $this->env;
1142
+ }
1143
+
1144
+ /**
1145
+ * Sets the environment variables.
1146
+ *
1147
+ * Each environment variable value should be a string.
1148
+ * If it is an array, the variable is ignored.
1149
+ * If it is false or null, it will be removed when
1150
+ * env vars are otherwise inherited.
1151
+ *
1152
+ * That happens in PHP when 'argv' is registered into
1153
+ * the $_ENV array for instance.
1154
+ *
1155
+ * @param array $env The new environment variables
1156
+ *
1157
+ * @return self The current Process instance
1158
+ */
1159
+ public function setEnv(array $env)
1160
+ {
1161
+ // Process can not handle env values that are arrays
1162
+ $env = array_filter($env, function ($value) {
1163
+ return !\is_array($value);
1164
+ });
1165
+
1166
+ $this->env = $env;
1167
+
1168
+ return $this;
1169
+ }
1170
+
1171
+ /**
1172
+ * Gets the Process input.
1173
+ *
1174
+ * @return resource|string|\Iterator|null The Process input
1175
+ */
1176
+ public function getInput()
1177
+ {
1178
+ return $this->input;
1179
+ }
1180
+
1181
+ /**
1182
+ * Sets the input.
1183
+ *
1184
+ * This content will be passed to the underlying process standard input.
1185
+ *
1186
+ * @param string|int|float|bool|resource|\Traversable|null $input The content
1187
+ *
1188
+ * @return self The current Process instance
1189
+ *
1190
+ * @throws LogicException In case the process is running
1191
+ */
1192
+ public function setInput($input)
1193
+ {
1194
+ if ($this->isRunning()) {
1195
+ throw new LogicException('Input can not be set while the process is running.');
1196
+ }
1197
+
1198
+ $this->input = ProcessUtils::validateInput(__METHOD__, $input);
1199
+
1200
+ return $this;
1201
+ }
1202
+
1203
+ /**
1204
+ * Sets whether environment variables will be inherited or not.
1205
+ *
1206
+ * @param bool $inheritEnv
1207
+ *
1208
+ * @return self The current Process instance
1209
+ */
1210
+ public function inheritEnvironmentVariables($inheritEnv = true)
1211
+ {
1212
+ if (!$inheritEnv) {
1213
+ throw new InvalidArgumentException('Not inheriting environment variables is not supported.');
1214
+ }
1215
+
1216
+ return $this;
1217
+ }
1218
+
1219
+ /**
1220
+ * Performs a check between the timeout definition and the time the process started.
1221
+ *
1222
+ * In case you run a background process (with the start method), you should
1223
+ * trigger this method regularly to ensure the process timeout
1224
+ *
1225
+ * @throws ProcessTimedOutException In case the timeout was reached
1226
+ */
1227
+ public function checkTimeout()
1228
+ {
1229
+ if (self::STATUS_STARTED !== $this->status) {
1230
+ return;
1231
+ }
1232
+
1233
+ if (null !== $this->timeout && $this->timeout < microtime(true) - $this->starttime) {
1234
+ $this->stop(0);
1235
+
1236
+ throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
1237
+ }
1238
+
1239
+ if (null !== $this->idleTimeout && $this->idleTimeout < microtime(true) - $this->lastOutputTime) {
1240
+ $this->stop(0);
1241
+
1242
+ throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_IDLE);
1243
+ }
1244
+ }
1245
+
1246
+ /**
1247
+ * Returns whether TTY is supported on the current operating system.
1248
+ */
1249
+ public static function isTtySupported(): bool
1250
+ {
1251
+ static $isTtySupported;
1252
+
1253
+ if (null === $isTtySupported) {
1254
+ $isTtySupported = (bool) @proc_open('echo 1 >/dev/null', array(array('file', '/dev/tty', 'r'), array('file', '/dev/tty', 'w'), array('file', '/dev/tty', 'w')), $pipes);
1255
+ }
1256
+
1257
+ return $isTtySupported;
1258
+ }
1259
+
1260
+ /**
1261
+ * Returns whether PTY is supported on the current operating system.
1262
+ *
1263
+ * @return bool
1264
+ */
1265
+ public static function isPtySupported()
1266
+ {
1267
+ static $result;
1268
+
1269
+ if (null !== $result) {
1270
+ return $result;
1271
+ }
1272
+
1273
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1274
+ return $result = false;
1275
+ }
1276
+
1277
+ return $result = (bool) @proc_open('echo 1 >/dev/null', array(array('pty'), array('pty'), array('pty')), $pipes);
1278
+ }
1279
+
1280
+ /**
1281
+ * Creates the descriptors needed by the proc_open.
1282
+ */
1283
+ private function getDescriptors(): array
1284
+ {
1285
+ if ($this->input instanceof \Iterator) {
1286
+ $this->input->rewind();
1287
+ }
1288
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1289
+ $this->processPipes = new WindowsPipes($this->input, !$this->outputDisabled || $this->hasCallback);
1290
+ } else {
1291
+ $this->processPipes = new UnixPipes($this->isTty(), $this->isPty(), $this->input, !$this->outputDisabled || $this->hasCallback);
1292
+ }
1293
+
1294
+ return $this->processPipes->getDescriptors();
1295
+ }
1296
+
1297
+ /**
1298
+ * Builds up the callback used by wait().
1299
+ *
1300
+ * The callbacks adds all occurred output to the specific buffer and calls
1301
+ * the user callback (if present) with the received output.
1302
+ *
1303
+ * @param callable|null $callback The user defined PHP callback
1304
+ *
1305
+ * @return \Closure A PHP closure
1306
+ */
1307
+ protected function buildCallback(callable $callback = null)
1308
+ {
1309
+ if ($this->outputDisabled) {
1310
+ return function ($type, $data) use ($callback) {
1311
+ if (null !== $callback) {
1312
+ return $callback($type, $data);
1313
+ }
1314
+ };
1315
+ }
1316
+
1317
+ $out = self::OUT;
1318
+
1319
+ return function ($type, $data) use ($callback, $out) {
1320
+ if ($out == $type) {
1321
+ $this->addOutput($data);
1322
+ } else {
1323
+ $this->addErrorOutput($data);
1324
+ }
1325
+
1326
+ if (null !== $callback) {
1327
+ return $callback($type, $data);
1328
+ }
1329
+ };
1330
+ }
1331
+
1332
+ /**
1333
+ * Updates the status of the process, reads pipes.
1334
+ *
1335
+ * @param bool $blocking Whether to use a blocking read call
1336
+ */
1337
+ protected function updateStatus($blocking)
1338
+ {
1339
+ if (self::STATUS_STARTED !== $this->status) {
1340
+ return;
1341
+ }
1342
+
1343
+ $this->processInformation = proc_get_status($this->process);
1344
+ $running = $this->processInformation['running'];
1345
+
1346
+ $this->readPipes($running && $blocking, '\\' !== \DIRECTORY_SEPARATOR || !$running);
1347
+
1348
+ if ($this->fallbackStatus && $this->isSigchildEnabled()) {
1349
+ $this->processInformation = $this->fallbackStatus + $this->processInformation;
1350
+ }
1351
+
1352
+ if (!$running) {
1353
+ $this->close();
1354
+ }
1355
+ }
1356
+
1357
+ /**
1358
+ * Returns whether PHP has been compiled with the '--enable-sigchild' option or not.
1359
+ *
1360
+ * @return bool
1361
+ */
1362
+ protected function isSigchildEnabled()
1363
+ {
1364
+ if (null !== self::$sigchild) {
1365
+ return self::$sigchild;
1366
+ }
1367
+
1368
+ if (!\function_exists('phpinfo')) {
1369
+ return self::$sigchild = false;
1370
+ }
1371
+
1372
+ ob_start();
1373
+ phpinfo(INFO_GENERAL);
1374
+
1375
+ return self::$sigchild = false !== strpos(ob_get_clean(), '--enable-sigchild');
1376
+ }
1377
+
1378
+ /**
1379
+ * Reads pipes for the freshest output.
1380
+ *
1381
+ * @param string $caller The name of the method that needs fresh outputs
1382
+ * @param bool $blocking Whether to use blocking calls or not
1383
+ *
1384
+ * @throws LogicException in case output has been disabled or process is not started
1385
+ */
1386
+ private function readPipesForOutput(string $caller, bool $blocking = false)
1387
+ {
1388
+ if ($this->outputDisabled) {
1389
+ throw new LogicException('Output has been disabled.');
1390
+ }
1391
+
1392
+ $this->requireProcessIsStarted($caller);
1393
+
1394
+ $this->updateStatus($blocking);
1395
+ }
1396
+
1397
+ /**
1398
+ * Validates and returns the filtered timeout.
1399
+ *
1400
+ * @throws InvalidArgumentException if the given timeout is a negative number
1401
+ */
1402
+ private function validateTimeout(?float $timeout): ?float
1403
+ {
1404
+ $timeout = (float) $timeout;
1405
+
1406
+ if (0.0 === $timeout) {
1407
+ $timeout = null;
1408
+ } elseif ($timeout < 0) {
1409
+ throw new InvalidArgumentException('The timeout value must be a valid positive integer or float number.');
1410
+ }
1411
+
1412
+ return $timeout;
1413
+ }
1414
+
1415
+ /**
1416
+ * Reads pipes, executes callback.
1417
+ *
1418
+ * @param bool $blocking Whether to use blocking calls or not
1419
+ * @param bool $close Whether to close file handles or not
1420
+ */
1421
+ private function readPipes(bool $blocking, bool $close)
1422
+ {
1423
+ $result = $this->processPipes->readAndWrite($blocking, $close);
1424
+
1425
+ $callback = $this->callback;
1426
+ foreach ($result as $type => $data) {
1427
+ if (3 !== $type) {
1428
+ $callback(self::STDOUT === $type ? self::OUT : self::ERR, $data);
1429
+ } elseif (!isset($this->fallbackStatus['signaled'])) {
1430
+ $this->fallbackStatus['exitcode'] = (int) $data;
1431
+ }
1432
+ }
1433
+ }
1434
+
1435
+ /**
1436
+ * Closes process resource, closes file handles, sets the exitcode.
1437
+ *
1438
+ * @return int The exitcode
1439
+ */
1440
+ private function close(): int
1441
+ {
1442
+ $this->processPipes->close();
1443
+ if (\is_resource($this->process)) {
1444
+ proc_close($this->process);
1445
+ }
1446
+ $this->exitcode = $this->processInformation['exitcode'];
1447
+ $this->status = self::STATUS_TERMINATED;
1448
+
1449
+ if (-1 === $this->exitcode) {
1450
+ if ($this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) {
1451
+ // if process has been signaled, no exitcode but a valid termsig, apply Unix convention
1452
+ $this->exitcode = 128 + $this->processInformation['termsig'];
1453
+ } elseif ($this->isSigchildEnabled()) {
1454
+ $this->processInformation['signaled'] = true;
1455
+ $this->processInformation['termsig'] = -1;
1456
+ }
1457
+ }
1458
+
1459
+ // Free memory from self-reference callback created by buildCallback
1460
+ // Doing so in other contexts like __destruct or by garbage collector is ineffective
1461
+ // Now pipes are closed, so the callback is no longer necessary
1462
+ $this->callback = null;
1463
+
1464
+ return $this->exitcode;
1465
+ }
1466
+
1467
+ /**
1468
+ * Resets data related to the latest run of the process.
1469
+ */
1470
+ private function resetProcessData()
1471
+ {
1472
+ $this->starttime = null;
1473
+ $this->callback = null;
1474
+ $this->exitcode = null;
1475
+ $this->fallbackStatus = array();
1476
+ $this->processInformation = null;
1477
+ $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
1478
+ $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
1479
+ $this->process = null;
1480
+ $this->latestSignal = null;
1481
+ $this->status = self::STATUS_READY;
1482
+ $this->incrementalOutputOffset = 0;
1483
+ $this->incrementalErrorOutputOffset = 0;
1484
+ }
1485
+
1486
+ /**
1487
+ * Sends a POSIX signal to the process.
1488
+ *
1489
+ * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
1490
+ * @param bool $throwException Whether to throw exception in case signal failed
1491
+ *
1492
+ * @return bool True if the signal was sent successfully, false otherwise
1493
+ *
1494
+ * @throws LogicException In case the process is not running
1495
+ * @throws RuntimeException In case --enable-sigchild is activated and the process can't be killed
1496
+ * @throws RuntimeException In case of failure
1497
+ */
1498
+ private function doSignal(int $signal, bool $throwException): bool
1499
+ {
1500
+ if (null === $pid = $this->getPid()) {
1501
+ if ($throwException) {
1502
+ throw new LogicException('Can not send signal on a non running process.');
1503
+ }
1504
+
1505
+ return false;
1506
+ }
1507
+
1508
+ if ('\\' === \DIRECTORY_SEPARATOR) {
1509
+ exec(sprintf('taskkill /F /T /PID %d 2>&1', $pid), $output, $exitCode);
1510
+ if ($exitCode && $this->isRunning()) {
1511
+ if ($throwException) {
1512
+ throw new RuntimeException(sprintf('Unable to kill the process (%s).', implode(' ', $output)));
1513
+ }
1514
+
1515
+ return false;
1516
+ }
1517
+ } else {
1518
+ if (!$this->isSigchildEnabled()) {
1519
+ $ok = @proc_terminate($this->process, $signal);
1520
+ } elseif (\function_exists('posix_kill')) {
1521
+ $ok = @posix_kill($pid, $signal);
1522
+ } elseif ($ok = proc_open(sprintf('kill -%d %d', $signal, $pid), array(2 => array('pipe', 'w')), $pipes)) {
1523
+ $ok = false === fgets($pipes[2]);
1524
+ }
1525
+ if (!$ok) {
1526
+ if ($throwException) {
1527
+ throw new RuntimeException(sprintf('Error while sending signal "%s".', $signal));
1528
+ }
1529
+
1530
+ return false;
1531
+ }
1532
+ }
1533
+
1534
+ $this->latestSignal = $signal;
1535
+ $this->fallbackStatus['signaled'] = true;
1536
+ $this->fallbackStatus['exitcode'] = -1;
1537
+ $this->fallbackStatus['termsig'] = $this->latestSignal;
1538
+
1539
+ return true;
1540
+ }
1541
+
1542
+ private function prepareWindowsCommandLine(string $cmd, array &$env)
1543
+ {
1544
+ $uid = uniqid('', true);
1545
+ $varCount = 0;
1546
+ $varCache = array();
1547
+ $cmd = preg_replace_callback(
1548
+ '/"(?:(
1549
+ [^"%!^]*+
1550
+ (?:
1551
+ (?: !LF! | "(?:\^[%!^])?+" )
1552
+ [^"%!^]*+
1553
+ )++
1554
+ ) | [^"]*+ )"/x',
1555
+ function ($m) use (&$env, &$varCache, &$varCount, $uid) {
1556
+ if (!isset($m[1])) {
1557
+ return $m[0];
1558
+ }
1559
+ if (isset($varCache[$m[0]])) {
1560
+ return $varCache[$m[0]];
1561
+ }
1562
+ if (false !== strpos($value = $m[1], "\0")) {
1563
+ $value = str_replace("\0", '?', $value);
1564
+ }
1565
+ if (false === strpbrk($value, "\"%!\n")) {
1566
+ return '"'.$value.'"';
1567
+ }
1568
+
1569
+ $value = str_replace(array('!LF!', '"^!"', '"^%"', '"^^"', '""'), array("\n", '!', '%', '^', '"'), $value);
1570
+ $value = '"'.preg_replace('/(\\\\*)"/', '$1$1\\"', $value).'"';
1571
+ $var = $uid.++$varCount;
1572
+
1573
+ $env[$var] = $value;
1574
+
1575
+ return $varCache[$m[0]] = '!'.$var.'!';
1576
+ },
1577
+ $cmd
1578
+ );
1579
+
1580
+ $cmd = 'cmd /V:ON /E:ON /D /C ('.str_replace("\n", ' ', $cmd).')';
1581
+ foreach ($this->processPipes->getFiles() as $offset => $filename) {
1582
+ $cmd .= ' '.$offset.'>"'.$filename.'"';
1583
+ }
1584
+
1585
+ return $cmd;
1586
+ }
1587
+
1588
+ /**
1589
+ * Ensures the process is running or terminated, throws a LogicException if the process has a not started.
1590
+ *
1591
+ * @throws LogicException if the process has not run
1592
+ */
1593
+ private function requireProcessIsStarted(string $functionName)
1594
+ {
1595
+ if (!$this->isStarted()) {
1596
+ throw new LogicException(sprintf('Process must be started before calling %s.', $functionName));
1597
+ }
1598
+ }
1599
+
1600
+ /**
1601
+ * Ensures the process is terminated, throws a LogicException if the process has a status different than "terminated".
1602
+ *
1603
+ * @throws LogicException if the process is not yet terminated
1604
+ */
1605
+ private function requireProcessIsTerminated(string $functionName)
1606
+ {
1607
+ if (!$this->isTerminated()) {
1608
+ throw new LogicException(sprintf('Process must be terminated before calling %s.', $functionName));
1609
+ }
1610
+ }
1611
+
1612
+ /**
1613
+ * Escapes a string to be used as a shell argument.
1614
+ */
1615
+ private function escapeArgument(?string $argument): string
1616
+ {
1617
+ if ('' === $argument || null === $argument) {
1618
+ return '""';
1619
+ }
1620
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
1621
+ return "'".str_replace("'", "'\\''", $argument)."'";
1622
+ }
1623
+ if (false !== strpos($argument, "\0")) {
1624
+ $argument = str_replace("\0", '?', $argument);
1625
+ }
1626
+ if (!preg_match('/[\/()%!^"<>&|\s]/', $argument)) {
1627
+ return $argument;
1628
+ }
1629
+ $argument = preg_replace('/(\\\\+)$/', '$1$1', $argument);
1630
+
1631
+ return '"'.str_replace(array('"', '^', '%', '!', "\n"), array('""', '"^^"', '"^%"', '"^!"', '!LF!'), $argument).'"';
1632
+ }
1633
+
1634
+ private function getDefaultEnv()
1635
+ {
1636
+ $env = array();
1637
+
1638
+ foreach ($_SERVER as $k => $v) {
1639
+ if (\is_string($v) && false !== $v = getenv($k)) {
1640
+ $env[$k] = $v;
1641
+ }
1642
+ }
1643
+
1644
+ foreach ($_ENV as $k => $v) {
1645
+ if (\is_string($v)) {
1646
+ $env[$k] = $v;
1647
+ }
1648
+ }
1649
+
1650
+ return $env;
1651
+ }
1652
+ }