dependabot-composer 0.107.13 → 0.107.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (901) 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 +3401 -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 +808 -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 +62 -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 +1061 -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 +166 -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 +74 -0
  82. data/helpers/vendor/composer/composer/src/Composer/Command/ConfigCommand.php +707 -0
  83. data/helpers/vendor/composer/composer/src/Composer/Command/CreateProjectCommand.php +385 -0
  84. data/helpers/vendor/composer/composer/src/Composer/Command/DependsCommand.php +57 -0
  85. data/helpers/vendor/composer/composer/src/Composer/Command/DiagnoseCommand.php +729 -0
  86. data/helpers/vendor/composer/composer/src/Composer/Command/DumpAutoloadCommand.php +88 -0
  87. data/helpers/vendor/composer/composer/src/Composer/Command/ExecCommand.php +97 -0
  88. data/helpers/vendor/composer/composer/src/Composer/Command/GlobalCommand.php +111 -0
  89. data/helpers/vendor/composer/composer/src/Composer/Command/HomeCommand.php +168 -0
  90. data/helpers/vendor/composer/composer/src/Composer/Command/InitCommand.php +808 -0
  91. data/helpers/vendor/composer/composer/src/Composer/Command/InstallCommand.php +124 -0
  92. data/helpers/vendor/composer/composer/src/Composer/Command/LicensesCommand.php +159 -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 +57 -0
  95. data/helpers/vendor/composer/composer/src/Composer/Command/RemoveCommand.php +163 -0
  96. data/helpers/vendor/composer/composer/src/Composer/Command/RequireCommand.php +258 -0
  97. data/helpers/vendor/composer/composer/src/Composer/Command/RunScriptCommand.php +141 -0
  98. data/helpers/vendor/composer/composer/src/Composer/Command/ScriptAliasCommand.php +66 -0
  99. data/helpers/vendor/composer/composer/src/Composer/Command/SearchCommand.php +83 -0
  100. data/helpers/vendor/composer/composer/src/Composer/Command/SelfUpdateCommand.php +405 -0
  101. data/helpers/vendor/composer/composer/src/Composer/Command/ShowCommand.php +1015 -0
  102. data/helpers/vendor/composer/composer/src/Composer/Command/StatusCommand.php +214 -0
  103. data/helpers/vendor/composer/composer/src/Composer/Command/SuggestsCommand.php +152 -0
  104. data/helpers/vendor/composer/composer/src/Composer/Command/UpdateCommand.php +228 -0
  105. data/helpers/vendor/composer/composer/src/Composer/Command/ValidateCommand.php +172 -0
  106. data/helpers/vendor/composer/composer/src/Composer/Compiler.php +284 -0
  107. data/helpers/vendor/composer/composer/src/Composer/Composer.php +283 -0
  108. data/helpers/vendor/composer/composer/src/Composer/Config.php +461 -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 +211 -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 +268 -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 +874 -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 +202 -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 +1798 -0
  174. data/helpers/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php +214 -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 +100 -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 +183 -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 +251 -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 +151 -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 +264 -0
  221. data/helpers/vendor/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php +493 -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 +829 -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 +97 -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 +342 -0
  266. data/helpers/vendor/composer/composer/src/Composer/Repository/RepositoryFactory.php +169 -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 +445 -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 +407 -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 +715 -0
  298. data/helpers/vendor/composer/composer/src/Composer/Util/Git.php +374 -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 +581 -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 +192 -0
  307. data/helpers/vendor/composer/composer/src/Composer/Util/RemoteFilesystem.php +1109 -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 +947 -0
  317. data/helpers/vendor/composer/semver/CHANGELOG.md +72 -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 +540 -0
  329. data/helpers/vendor/composer/spdx-licenses/.php_cs.dist +59 -0
  330. data/helpers/vendor/composer/spdx-licenses/CHANGELOG.md +89 -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 +56 -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 +1932 -0
  336. data/helpers/vendor/composer/spdx-licenses/src/SpdxLicenses.php +343 -0
  337. data/helpers/vendor/composer/xdebug-handler/CHANGELOG.md +55 -0
  338. data/helpers/vendor/composer/xdebug-handler/LICENSE +21 -0
  339. data/helpers/vendor/composer/xdebug-handler/README.md +288 -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 +565 -0
  345. data/helpers/vendor/justinrainbow/json-schema/.gitattributes +5 -0
  346. data/helpers/vendor/justinrainbow/json-schema/.php_cs.dist +30 -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 +76 -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 +121 -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 +81 -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 +40 -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 +349 -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 +1181 -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 +282 -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 +527 -0
  483. data/helpers/vendor/symfony/console/Helper/ProgressIndicator.php +269 -0
  484. data/helpers/vendor/symfony/console/Helper/QuestionHelper.php +447 -0
  485. data/helpers/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +96 -0
  486. data/helpers/vendor/symfony/console/Helper/Table.php +813 -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 +365 -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 +404 -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 +78 -0
  522. data/helpers/vendor/symfony/console/Tester/TesterTrait.php +177 -0
  523. data/helpers/vendor/symfony/console/Tests/ApplicationTest.php +1814 -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 +355 -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 +912 -0
  728. data/helpers/vendor/symfony/console/Tests/Helper/ProgressIndicatorTest.php +183 -0
  729. data/helpers/vendor/symfony/console/Tests/Helper/QuestionHelperTest.php +715 -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 +1199 -0
  733. data/helpers/vendor/symfony/console/Tests/Input/ArgvInputTest.php +466 -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/Question/ConfirmationQuestionTest.php +62 -0
  747. data/helpers/vendor/symfony/console/Tests/Style/SymfonyStyleTest.php +118 -0
  748. data/helpers/vendor/symfony/console/Tests/TerminalTest.php +59 -0
  749. data/helpers/vendor/symfony/console/Tests/Tester/ApplicationTesterTest.php +113 -0
  750. data/helpers/vendor/symfony/console/Tests/Tester/CommandTesterTest.php +235 -0
  751. data/helpers/vendor/symfony/console/composer.json +56 -0
  752. data/helpers/vendor/symfony/console/phpunit.xml.dist +41 -0
  753. data/helpers/vendor/symfony/contracts/.gitignore +3 -0
  754. data/helpers/vendor/symfony/contracts/CHANGELOG.md +12 -0
  755. data/helpers/vendor/symfony/contracts/Cache/CacheInterface.php +57 -0
  756. data/helpers/vendor/symfony/contracts/Cache/CacheTrait.php +71 -0
  757. data/helpers/vendor/symfony/contracts/Cache/CallbackInterface.php +30 -0
  758. data/helpers/vendor/symfony/contracts/Cache/ItemInterface.php +60 -0
  759. data/helpers/vendor/symfony/contracts/Cache/TagAwareCacheInterface.php +38 -0
  760. data/helpers/vendor/symfony/contracts/LICENSE +19 -0
  761. data/helpers/vendor/symfony/contracts/README.md +70 -0
  762. data/helpers/vendor/symfony/contracts/Service/ResetInterface.php +30 -0
  763. data/helpers/vendor/symfony/contracts/Service/ServiceLocatorTrait.php +97 -0
  764. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberInterface.php +53 -0
  765. data/helpers/vendor/symfony/contracts/Service/ServiceSubscriberTrait.php +61 -0
  766. data/helpers/vendor/symfony/contracts/Tests/Cache/CacheTraitTest.php +165 -0
  767. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceLocatorTest.php +94 -0
  768. data/helpers/vendor/symfony/contracts/Tests/Service/ServiceSubscriberTraitTest.php +65 -0
  769. data/helpers/vendor/symfony/contracts/Tests/Translation/TranslatorTest.php +353 -0
  770. data/helpers/vendor/symfony/contracts/Translation/LocaleAwareInterface.php +31 -0
  771. data/helpers/vendor/symfony/contracts/Translation/TranslatorInterface.php +65 -0
  772. data/helpers/vendor/symfony/contracts/Translation/TranslatorTrait.php +255 -0
  773. data/helpers/vendor/symfony/contracts/composer.json +44 -0
  774. data/helpers/vendor/symfony/contracts/phpunit.xml.dist +31 -0
  775. data/helpers/vendor/symfony/filesystem/.gitignore +3 -0
  776. data/helpers/vendor/symfony/filesystem/CHANGELOG.md +59 -0
  777. data/helpers/vendor/symfony/filesystem/Exception/ExceptionInterface.php +21 -0
  778. data/helpers/vendor/symfony/filesystem/Exception/FileNotFoundException.php +34 -0
  779. data/helpers/vendor/symfony/filesystem/Exception/IOException.php +39 -0
  780. data/helpers/vendor/symfony/filesystem/Exception/IOExceptionInterface.php +27 -0
  781. data/helpers/vendor/symfony/filesystem/Exception/InvalidArgumentException.php +19 -0
  782. data/helpers/vendor/symfony/filesystem/Filesystem.php +767 -0
  783. data/helpers/vendor/symfony/filesystem/LICENSE +19 -0
  784. data/helpers/vendor/symfony/filesystem/README.md +13 -0
  785. data/helpers/vendor/symfony/filesystem/Tests/ExceptionTest.php +47 -0
  786. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTest.php +1686 -0
  787. data/helpers/vendor/symfony/filesystem/Tests/FilesystemTestCase.php +166 -0
  788. data/helpers/vendor/symfony/filesystem/Tests/Fixtures/MockStream/MockStream.php +46 -0
  789. data/helpers/vendor/symfony/filesystem/composer.json +34 -0
  790. data/helpers/vendor/symfony/filesystem/phpunit.xml.dist +30 -0
  791. data/helpers/vendor/symfony/finder/.gitignore +3 -0
  792. data/helpers/vendor/symfony/finder/CHANGELOG.md +69 -0
  793. data/helpers/vendor/symfony/finder/Comparator/Comparator.php +98 -0
  794. data/helpers/vendor/symfony/finder/Comparator/DateComparator.php +51 -0
  795. data/helpers/vendor/symfony/finder/Comparator/NumberComparator.php +79 -0
  796. data/helpers/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
  797. data/helpers/vendor/symfony/finder/Finder.php +783 -0
  798. data/helpers/vendor/symfony/finder/Glob.php +116 -0
  799. data/helpers/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
  800. data/helpers/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
  801. data/helpers/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +45 -0
  802. data/helpers/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +84 -0
  803. data/helpers/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +53 -0
  804. data/helpers/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
  805. data/helpers/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +47 -0
  806. data/helpers/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +112 -0
  807. data/helpers/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
  808. data/helpers/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +140 -0
  809. data/helpers/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
  810. data/helpers/vendor/symfony/finder/Iterator/SortableIterator.php +99 -0
  811. data/helpers/vendor/symfony/finder/LICENSE +19 -0
  812. data/helpers/vendor/symfony/finder/README.md +14 -0
  813. data/helpers/vendor/symfony/finder/SplFileInfo.php +78 -0
  814. data/helpers/vendor/symfony/finder/Tests/Comparator/ComparatorTest.php +65 -0
  815. data/helpers/vendor/symfony/finder/Tests/Comparator/DateComparatorTest.php +64 -0
  816. data/helpers/vendor/symfony/finder/Tests/Comparator/NumberComparatorTest.php +108 -0
  817. data/helpers/vendor/symfony/finder/Tests/FinderTest.php +1384 -0
  818. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/a +0 -0
  819. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/c.neon +0 -0
  820. data/helpers/vendor/symfony/finder/Tests/Fixtures/.dot/b/d.neon +0 -0
  821. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/C/abc.dat +0 -0
  822. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/B/ab.dat +0 -0
  823. data/helpers/vendor/symfony/finder/Tests/Fixtures/A/a.dat +0 -0
  824. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/C/abc.dat.copy +0 -0
  825. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/B/ab.dat.copy +0 -0
  826. data/helpers/vendor/symfony/finder/Tests/Fixtures/copy/A/a.dat.copy +0 -0
  827. data/helpers/vendor/symfony/finder/Tests/Fixtures/dolor.txt +2 -0
  828. data/helpers/vendor/symfony/finder/Tests/Fixtures/ipsum.txt +2 -0
  829. data/helpers/vendor/symfony/finder/Tests/Fixtures/lorem.txt +2 -0
  830. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/.dot +1 -0
  831. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/a +0 -0
  832. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/c.neon +0 -0
  833. data/helpers/vendor/symfony/finder/Tests/Fixtures/one/b/d.neon +0 -0
  834. data/helpers/vendor/symfony/finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat +0 -0
  835. 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
  836. data/helpers/vendor/symfony/finder/Tests/GlobTest.php +95 -0
  837. data/helpers/vendor/symfony/finder/Tests/Iterator/CustomFilterIteratorTest.php +46 -0
  838. data/helpers/vendor/symfony/finder/Tests/Iterator/DateRangeFilterIteratorTest.php +92 -0
  839. data/helpers/vendor/symfony/finder/Tests/Iterator/DepthRangeFilterIteratorTest.php +103 -0
  840. data/helpers/vendor/symfony/finder/Tests/Iterator/ExcludeDirectoryFilterIteratorTest.php +107 -0
  841. data/helpers/vendor/symfony/finder/Tests/Iterator/FileTypeFilterIteratorTest.php +82 -0
  842. data/helpers/vendor/symfony/finder/Tests/Iterator/FilecontentFilterIteratorTest.php +86 -0
  843. data/helpers/vendor/symfony/finder/Tests/Iterator/FilenameFilterIteratorTest.php +54 -0
  844. data/helpers/vendor/symfony/finder/Tests/Iterator/Iterator.php +55 -0
  845. data/helpers/vendor/symfony/finder/Tests/Iterator/IteratorTestCase.php +100 -0
  846. data/helpers/vendor/symfony/finder/Tests/Iterator/MockFileListIterator.php +21 -0
  847. data/helpers/vendor/symfony/finder/Tests/Iterator/MockSplFileInfo.php +132 -0
  848. data/helpers/vendor/symfony/finder/Tests/Iterator/MultiplePcreFilterIteratorTest.php +71 -0
  849. data/helpers/vendor/symfony/finder/Tests/Iterator/PathFilterIteratorTest.php +82 -0
  850. data/helpers/vendor/symfony/finder/Tests/Iterator/RealIteratorTestCase.php +128 -0
  851. data/helpers/vendor/symfony/finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php +59 -0
  852. data/helpers/vendor/symfony/finder/Tests/Iterator/SizeRangeFilterIteratorTest.php +70 -0
  853. data/helpers/vendor/symfony/finder/Tests/Iterator/SortableIteratorTest.php +262 -0
  854. data/helpers/vendor/symfony/finder/composer.json +33 -0
  855. data/helpers/vendor/symfony/finder/phpunit.xml.dist +30 -0
  856. data/helpers/vendor/symfony/polyfill-ctype/Ctype.php +227 -0
  857. data/helpers/vendor/symfony/polyfill-ctype/LICENSE +19 -0
  858. data/helpers/vendor/symfony/polyfill-ctype/README.md +12 -0
  859. data/helpers/vendor/symfony/polyfill-ctype/bootstrap.php +26 -0
  860. data/helpers/vendor/symfony/polyfill-ctype/composer.json +34 -0
  861. data/helpers/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  862. data/helpers/vendor/symfony/polyfill-mbstring/Mbstring.php +800 -0
  863. data/helpers/vendor/symfony/polyfill-mbstring/README.md +13 -0
  864. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1096 -0
  865. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  866. data/helpers/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1104 -0
  867. data/helpers/vendor/symfony/polyfill-mbstring/bootstrap.php +58 -0
  868. data/helpers/vendor/symfony/polyfill-mbstring/composer.json +34 -0
  869. data/helpers/vendor/symfony/process/.gitignore +3 -0
  870. data/helpers/vendor/symfony/process/CHANGELOG.md +90 -0
  871. data/helpers/vendor/symfony/process/Exception/ExceptionInterface.php +21 -0
  872. data/helpers/vendor/symfony/process/Exception/InvalidArgumentException.php +21 -0
  873. data/helpers/vendor/symfony/process/Exception/LogicException.php +21 -0
  874. data/helpers/vendor/symfony/process/Exception/ProcessFailedException.php +54 -0
  875. data/helpers/vendor/symfony/process/Exception/ProcessSignaledException.php +41 -0
  876. data/helpers/vendor/symfony/process/Exception/ProcessTimedOutException.php +69 -0
  877. data/helpers/vendor/symfony/process/Exception/RuntimeException.php +21 -0
  878. data/helpers/vendor/symfony/process/ExecutableFinder.php +88 -0
  879. data/helpers/vendor/symfony/process/InputStream.php +90 -0
  880. data/helpers/vendor/symfony/process/LICENSE +19 -0
  881. data/helpers/vendor/symfony/process/PhpExecutableFinder.php +101 -0
  882. data/helpers/vendor/symfony/process/PhpProcess.php +75 -0
  883. data/helpers/vendor/symfony/process/Pipes/AbstractPipes.php +178 -0
  884. data/helpers/vendor/symfony/process/Pipes/PipesInterface.php +67 -0
  885. data/helpers/vendor/symfony/process/Pipes/UnixPipes.php +153 -0
  886. data/helpers/vendor/symfony/process/Pipes/WindowsPipes.php +191 -0
  887. data/helpers/vendor/symfony/process/Process.php +1652 -0
  888. data/helpers/vendor/symfony/process/ProcessUtils.php +69 -0
  889. data/helpers/vendor/symfony/process/README.md +13 -0
  890. data/helpers/vendor/symfony/process/Tests/ExecutableFinderTest.php +178 -0
  891. data/helpers/vendor/symfony/process/Tests/KillableProcessWithOutput.php +25 -0
  892. data/helpers/vendor/symfony/process/Tests/NonStopableProcess.php +47 -0
  893. data/helpers/vendor/symfony/process/Tests/PhpExecutableFinderTest.php +49 -0
  894. data/helpers/vendor/symfony/process/Tests/PhpProcessTest.php +63 -0
  895. data/helpers/vendor/symfony/process/Tests/PipeStdinInStdoutStdErrStreamSelect.php +72 -0
  896. data/helpers/vendor/symfony/process/Tests/ProcessFailedExceptionTest.php +137 -0
  897. data/helpers/vendor/symfony/process/Tests/ProcessTest.php +1537 -0
  898. data/helpers/vendor/symfony/process/Tests/SignalListener.php +21 -0
  899. data/helpers/vendor/symfony/process/composer.json +33 -0
  900. data/helpers/vendor/symfony/process/phpunit.xml.dist +30 -0
  901. metadata +902 -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 [
52
+ ['pipe', 'r'],
53
+ $nullstream,
54
+ $nullstream,
55
+ ];
56
+ }
57
+
58
+ if ($this->ttyMode) {
59
+ return [
60
+ ['file', '/dev/tty', 'r'],
61
+ ['file', '/dev/tty', 'w'],
62
+ ['file', '/dev/tty', 'w'],
63
+ ];
64
+ }
65
+
66
+ if ($this->ptyMode && Process::isPtySupported()) {
67
+ return [
68
+ ['pty'],
69
+ ['pty'],
70
+ ['pty'],
71
+ ];
72
+ }
73
+
74
+ return [
75
+ ['pipe', 'r'],
76
+ ['pipe', 'w'], // stdout
77
+ ['pipe', 'w'], // stderr
78
+ ];
79
+ }
80
+
81
+ /**
82
+ * {@inheritdoc}
83
+ */
84
+ public function getFiles()
85
+ {
86
+ return [];
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 = [];
98
+ $r = $this->pipes;
99
+ unset($r[0]);
100
+
101
+ // let's have a look if something changed in streams
102
+ set_error_handler([$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 = [];
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 = [];
30
+ private $fileHandles = [];
31
+ private $lockHandles = [];
32
+ private $readBytes = [
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 = [
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 [
102
+ ['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 [
112
+ ['pipe', 'r'],
113
+ ['file', 'NUL', 'w'],
114
+ ['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 = [];
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 = [];
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 = [];
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 = [
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([], $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 = []): 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 = [])
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 = [])
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([$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 = ['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] = ['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 = [];
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 = [])
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([$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', [['file', '/dev/tty', 'r'], ['file', '/dev/tty', 'w'], ['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', [['pty'], ['pty'], ['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 = [];
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), [2 => ['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 = [];
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(['!LF!', '"^!"', '"^%"', '"^^"', '""'], ["\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(['"', '^', '%', '!', "\n"], ['""', '"^^"', '"^%"', '"^!"', '!LF!'], $argument).'"';
1632
+ }
1633
+
1634
+ private function getDefaultEnv()
1635
+ {
1636
+ $env = [];
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
+ }