wp-studio 1.7.8-beta2 → 1.7.8-beta4
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.
- package/README.md +54 -1
- package/assets/demo.gif +0 -0
- package/dist/cli/{_events-BRGCap7g.mjs → _events-C2dFSpKE.mjs} +2 -2
- package/dist/cli/{certificate-manager-Dd4zv2_k.mjs → certificate-manager-BMngpL-s.mjs} +12 -4
- package/dist/cli/{index-9Oz-0bqF.mjs → index-CkFXAp-n.mjs} +5 -5
- package/dist/cli/{index-CT4S2538.mjs → index-odShRBgM.mjs} +171 -117
- package/dist/cli/{login-D4E3GoXe.mjs → login-BeT1uKwW.mjs} +2 -2
- package/dist/cli/{logout-DE-RoshK.mjs → logout-BFQJBJD0.mjs} +2 -2
- package/dist/cli/main.mjs +3 -2
- package/dist/cli/proxy-daemon.mjs +1 -1
- package/dist/cli/{resume-DLoXmzNG.mjs → resume-D_K0QEl5.mjs} +1 -1
- package/dist/cli/{set-B8YYUENH.mjs → set-C5l116L7.mjs} +2 -2
- package/dist/cli/{set-B0L-QiXT.mjs → set-DzcR6sFr.mjs} +2 -2
- package/dist/cli/{status-DEOAA0yx.mjs → status-CbXnAskz.mjs} +1 -1
- package/dist/cli/{wp-CobSX6C6.mjs → wp-CUKyZNTP.mjs} +1 -1
- package/dist/cli/wp-files/latest/available-site-translations.json +1 -1
- package/dist/cli/wp-files/latest/languages/admin-de_DE.l10n.php +2 -2
- package/dist/cli/wp-files/latest/languages/admin-network-de_DE.l10n.php +1 -1
- package/dist/cli/wp-files/latest/languages/admin-pl_PL.l10n.php +2 -2
- package/dist/cli/wp-files/latest/languages/de_DE-0cc31205f20441b3df1d1b46100f6b8d.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-0ce75ad2f775d1cac9696967d484808c.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-0eebe503220d4a00341eb011b92769b4.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-17179a5f2930647c89151e365f843b6e.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1780a2033cf98d69ce13c2e5c8510004.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1a0cd6a7128913b15c1a10dd68951869.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1bba9045bb07c89671c88a3f328548e8.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1c4303f02ff93b290e9faad991eeb06f.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-1d17475f620f63a92e2c5d2681c51ee8.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2617ce121227a46077ede6c69aa9fcb5.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-270d72d1cff17227d37f3244759cbecb.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-28b3c3d595952907e08d98287077426c.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2b390f85a3048c5b4255fb45960b6514.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-2c5d274ea625dd91556554ad82901529.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-320f4ad9792aaa6dedb1e71cbdf85d57.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-440127dd25bde48a531ded36f33e927b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-49c6d4acf36cf3aca9f0b2a77617304f.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-4a38fe1c0c45989e44682ba6109d9f46.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-4bfa11da57ff2600004bb500368247f4.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-50278328b502f4eb3f2b8b7ab49324a1.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-5251f7623766a714c8207c7edb938628.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-529362903a5a05b34b06b5e793fb4cf8.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-569e85ef168299eb8c8f24d8ef8c8a78.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-6025add6bde16aaeb12787d250f9b414.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-60d06fac6f98e8e8f0ec5a945738b660.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-68f2cec7514bf8563c723a4d675fcfe6.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7233008897033de5ee0d14f86a42a65a.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7289286ed59e90a8f36ae797df62220b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7436b7ee9e4f11ac0d618d8cc886eb66.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-77fdfadaf2e1ca3a027d1956b910bc50.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7b74c8457eaa7fcc50db41b431f8a003.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7c90cd4398ee2d9d3628c387a87a70e5.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7d5ca435e60d92f024d46c9257aaa0f7.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-7f13c36c641b114bf18cd0bcc9ecc7e0.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-803bf1ce2131e13efc590c1bc47851fc.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-81c889563f09dd13de1701135dc62941.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-81d6f084cb273e02e15b01bd9ece87f7.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-8240df461220d1d3a028a9a4c5652a5b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-8860e58c20c6a2ab5876a0f07be43bd9.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-93882e8f9976382d7f724ac595ed7151.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-947c76bb5095da30e16668eec15406b2.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9b256ea9cd54df92095e04c76758ceb0.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9c3519f4870fac83dc0dbf18cb6bd4c4.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-9d47a87c240c1d10701cd6a02b28aa1b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a25d1cc7bf7ca0b4e114f6bea64943f4.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a2796e57f680e25d84c4b352ee6d7280.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-a9dc201dcd011fe71849743133052619.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-aabfce98c410957228848dc581e3c420.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-ac23eee47530ac63a1178c827db28087.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-bf0f094965d3d4a95b47babcb35fc136.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-bf23b24175490c2e46aaf92ff6a0c70f.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-c31d5f185753910c14afebc6deb2ce24.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-ca28138671823450e87dfd354f7afc6b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-daeb084aab42199d26393a56c3465bc0.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e2791ba830489d23043be8650a22a22b.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e2e4c4b80f3adf2c70b431bfdb1b4872.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-e53526243551a102928735ec9eed4edf.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f575f481034e90e21d832e415fd95fcf.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f70806bf0c7d62f2908bd5a1c3fe4efc.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE-f8f49d9fc4a9cf7d78ec99285417bd9c.json +1 -1
- package/dist/cli/wp-files/latest/languages/de_DE.l10n.php +27 -27
- package/dist/cli/wp-files/latest/languages/pl_PL-0cc31205f20441b3df1d1b46100f6b8d.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-0eebe503220d4a00341eb011b92769b4.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1c4303f02ff93b290e9faad991eeb06f.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-1d17475f620f63a92e2c5d2681c51ee8.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-2b390f85a3048c5b4255fb45960b6514.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-4a38fe1c0c45989e44682ba6109d9f46.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-4bfa11da57ff2600004bb500368247f4.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-50278328b502f4eb3f2b8b7ab49324a1.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-5251f7623766a714c8207c7edb938628.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-529362903a5a05b34b06b5e793fb4cf8.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-569e85ef168299eb8c8f24d8ef8c8a78.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-6025add6bde16aaeb12787d250f9b414.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7436b7ee9e4f11ac0d618d8cc886eb66.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-77fdfadaf2e1ca3a027d1956b910bc50.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7b74c8457eaa7fcc50db41b431f8a003.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-7d5ca435e60d92f024d46c9257aaa0f7.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-81d6f084cb273e02e15b01bd9ece87f7.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-8240df461220d1d3a028a9a4c5652a5b.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9b256ea9cd54df92095e04c76758ceb0.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9c3519f4870fac83dc0dbf18cb6bd4c4.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-9d47a87c240c1d10701cd6a02b28aa1b.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-a9dc201dcd011fe71849743133052619.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-aabfce98c410957228848dc581e3c420.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-ca28138671823450e87dfd354f7afc6b.json +1 -1
- package/dist/cli/wp-files/latest/languages/pl_PL-e2e4c4b80f3adf2c70b431bfdb1b4872.json +1 -1
- package/dist/cli/wp-files/sqlite-command/composer.json +4 -3
- package/dist/cli/wp-files/sqlite-command/composer.lock +132 -80
- package/dist/cli/wp-files/sqlite-command/vendor/autoload.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_classmap.php +58 -70
- package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_namespaces.php +1 -0
- package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_psr4.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_real.php +5 -5
- package/dist/cli/wp-files/sqlite-command/vendor/composer/autoload_static.php +78 -80
- package/dist/cli/wp-files/sqlite-command/vendor/composer/installed.json +104 -49
- package/dist/cli/wp-files/sqlite-command/vendor/composer/installed.php +29 -16
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/CHANGELOG.md +103 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/Comparator.php +62 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/DateComparator.php +50 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Comparator/NumberComparator.php +78 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Exception/AccessDeniedException.php +19 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Exception/DirectoryNotFoundException.php +19 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Finder.php +851 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Gitignore.php +91 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Glob.php +116 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/CustomFilterIterator.php +61 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +58 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +48 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php +110 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +51 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +58 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +45 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/LazyIterator.php +32 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +107 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/PathFilterIterator.php +56 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +134 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +57 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/SortableIterator.php +115 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +173 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/LICENSE +19 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/README.md +14 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/SplFileInfo.php +80 -0
- package/dist/cli/wp-files/sqlite-command/vendor/symfony/finder/composer.json +31 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/.gitattributes +8 -0
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache → wp-cli}/mustache/LICENSE +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/README.md +76 -0
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache → wp-cli}/mustache/composer.json +6 -16
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/mustache/src/Mustache/Autoloader.php +88 -0
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/AbstractCache.php +7 -15
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/FilesystemCache.php +15 -20
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache/NoopCache.php +4 -8
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Cache.php +7 -10
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Compiler.php +87 -144
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Context.php +19 -23
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Engine.php +134 -251
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/InvalidArgumentException.php +2 -6
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/LogicException.php +2 -6
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/RuntimeException.php +2 -6
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/SyntaxException.php +8 -7
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownFilterException.php +7 -7
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownHelperException.php +7 -7
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception/UnknownTemplateException.php +7 -7
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Exception.php +5 -4
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/HelperCollection.php +17 -22
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/LambdaHelper.php +8 -28
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/ArrayLoader.php +9 -12
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/CascadingLoader.php +15 -18
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/FilesystemLoader.php +18 -24
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/InlineLoader.php +13 -19
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/MutableLoader.php +7 -4
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/ProductionFilesystemLoader.php +16 -23
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader/StringLoader.php +4 -8
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Loader.php +7 -8
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger/AbstractLogger.php +26 -22
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger/StreamLogger.php +20 -25
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Logger.php +37 -13
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Parser.php +93 -100
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Source/FilesystemSource.php +7 -11
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Source.php +5 -4
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Template.php +32 -39
- package/dist/cli/wp-files/sqlite-command/vendor/{mustache/mustache/src → wp-cli/mustache/src/Mustache}/Tokenizer.php +29 -33
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.actrc +3 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.gitattributes +6 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.mailmap +234 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/README.md +4 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/VERSION +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/CHANGELOG.md +0 -65
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/README.md +1 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/certificates/cacert.pem +372 -315
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/certificates/cacert.pem.sha256 +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/composer.json +5 -7
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Iri.php +18 -20
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Requests.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Response/Headers.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Transport/Curl.php +1 -5
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Transport/Fsockopen.php +0 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Utility/CaseInsensitiveDictionary.php +0 -12
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/src/Utility/FilteredIterator.php +2 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/composer.json +13 -30
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/dependencies.yml +6 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/manifest.json +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Autoloader.php +2 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/AutoloaderStep.php +1 -10
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/CheckRoot.php +2 -20
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DefineProtectedCommands.php +3 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFrameworkAutoloader.php +4 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeRequestsAutoloader.php +3 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeContexts.php +0 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeLogger.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php +3 -6
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/{RegisterShutdownHandler.php → LoadDispatcher.php} +4 -6
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadRequiredCommand.php +5 -9
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadUtilityFunctions.php +0 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Completions.php +6 -149
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Configurator.php +49 -202
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Admin.php +21 -113
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Auto.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Cli.php +1 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Context/Frontend.php +1 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php +26 -63
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CompositeCommand.php +9 -19
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php +19 -284
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/DocParser.php +5 -17
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Exception/NonExistentKeyException.php +3 -6
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Extractor.php +54 -30
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Base.php +3 -7
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Comment.php +2 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Post.php +3 -8
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Signup.php +1 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/Site.php +4 -12
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Fetchers/User.php +1 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/FileCache.php +33 -135
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Formatter.php +57 -221
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Inflector.php +4 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/CSV.php +1 -6
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Query.php +1 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Table.php +1 -7
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Iterators/Transform.php +0 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Base.php +0 -15
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Quiet.php +3 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Loggers/Regular.php +3 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/NoOp.php +0 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Process.php +7 -40
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/RequestsLibrary.php +1 -4
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php +234 -795
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/SynopsisParser.php +26 -116
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/SynopsisValidator.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Traverser/RecursiveDataStructureTraverser.php +26 -69
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/UpgraderSkin.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/WpHttpCacheManager.php +5 -67
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/WpOrgApi.php +3 -3
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/boot-fs.php +2 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/bootstrap.php +2 -5
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/class-wp-cli.php +62 -311
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Alias_Command.php +60 -292
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Cache_Command.php +1 -1
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/CLI_Command.php +31 -191
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/commands/src/Help_Command.php +35 -177
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/config-spec.php +4 -28
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/utils-wp.php +47 -81
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/utils.php +200 -512
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/wp-cli.php +2 -2
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/wp-settings-cli.php +465 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/templates/man-params.mustache +4 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/templates/man.mustache +0 -8
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ArgValidationTest.php +74 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/CommandFactoryTest.php +420 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ConfiguratorTest.php +87 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/DocParserTest.php +213 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ExtractorTest.php +293 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/FileCacheTest.php +207 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/HelpTest.php +119 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/InflectorTest.php +37 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/LoggingTest.php +124 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/ProcessTest.php +30 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/SynopsisParserTest.php +194 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/UtilsTest.php +1092 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WPCLITest.php +16 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/Iterators/CSVTest.php +109 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/Traversers/RecursiveDataStructureTraverserTest.php +151 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WP_CLI/WpOrgApiTest.php +166 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/WpVersionCompareTest.php +78 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/bootstrap.php +17 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-class-win.php +70 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-class.php +70 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-function-win.php +19 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/commandfactory-doc_comment-function.php +19 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/bar.ab2 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.ab1 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.ac1 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/baz.efg2 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.ab1 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.ab2 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.efg1 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/data/expand_globs/foo.efg2 +0 -0
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/tests/mock-requests-transport.php +34 -0
- package/dist/cli/wp-files/sqlite-command/version +1 -1
- package/package.json +4 -3
- package/patches/archiver+7.0.1.patch +14 -0
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/.php-cs-fixer.php +0 -20
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/README.md +0 -94
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/RenderedString.php +0 -51
- package/dist/cli/wp-files/sqlite-command/vendor/mustache/mustache/src/compat.php +0 -282
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/.typos.toml +0 -14
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/AGENTS.md +0 -121
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/proxy.py +0 -5
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/start.sh +0 -19
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/bundle/rmccue/requests/scripts/proxy/stop.sh +0 -10
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Path.php +0 -260
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/ShutdownHandler.php +0 -329
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/schemas/wp-cli-config.json +0 -218
- package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/schemas/wp-cli.example.yml +0 -55
- /package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/{codecov.yml → tests/data/expand_globs/bar.ab1} +0 -0
package/dist/cli/wp-files/sqlite-command/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php
CHANGED
|
@@ -112,10 +112,10 @@ class Subcommand extends CompositeCommand {
|
|
|
112
112
|
* Wrapper for CLI Tools' prompt() method.
|
|
113
113
|
*
|
|
114
114
|
* @param string $question
|
|
115
|
-
* @param
|
|
115
|
+
* @param string $default
|
|
116
116
|
* @return string|false
|
|
117
117
|
*/
|
|
118
|
-
private function prompt( $question, $default
|
|
118
|
+
private function prompt( $question, $default ) {
|
|
119
119
|
|
|
120
120
|
$question .= ': ';
|
|
121
121
|
if ( function_exists( 'readline' ) ) {
|
|
@@ -124,49 +124,13 @@ class Subcommand extends CompositeCommand {
|
|
|
124
124
|
|
|
125
125
|
echo $question;
|
|
126
126
|
|
|
127
|
-
$ret =
|
|
127
|
+
$ret = stream_get_line( STDIN, 1024, "\n" );
|
|
128
128
|
if ( Utils\is_windows() && "\r" === substr( $ret, -1 ) ) {
|
|
129
129
|
$ret = substr( $ret, 0, -1 );
|
|
130
130
|
}
|
|
131
131
|
return $ret;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
/**
|
|
135
|
-
* Get the description for an argument from documentation.
|
|
136
|
-
*
|
|
137
|
-
* @param array $spec_arg Argument specification from SynopsisParser
|
|
138
|
-
* @param DocParser $docparser DocParser instance for retrieving descriptions
|
|
139
|
-
* @param string $longdesc Long description text for regex matching
|
|
140
|
-
* @return string Description text, or empty string if not found
|
|
141
|
-
*/
|
|
142
|
-
private function get_arg_description( $spec_arg, $docparser, $longdesc ) {
|
|
143
|
-
$description = '';
|
|
144
|
-
|
|
145
|
-
if ( 'positional' === $spec_arg['type'] ) {
|
|
146
|
-
$description = $docparser->get_arg_desc( $spec_arg['name'] );
|
|
147
|
-
// If get_arg_desc doesn't find it (e.g., for simple <arg> without modifiers),
|
|
148
|
-
// try a simpler pattern that matches <arg> followed by : description,
|
|
149
|
-
// using a pattern consistent with DocParser::get_arg_desc().
|
|
150
|
-
if ( empty( $description ) ) {
|
|
151
|
-
$arg_pattern = '/\[?<' . preg_quote( $spec_arg['name'], '/' ) . ">.+\n:\s*(.+?)(\n|$)/";
|
|
152
|
-
if ( preg_match( $arg_pattern, $longdesc, $matches ) ) {
|
|
153
|
-
$description = trim( $matches[1] );
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
} elseif ( 'assoc' === $spec_arg['type'] ) {
|
|
157
|
-
$description = $docparser->get_param_desc( $spec_arg['name'] );
|
|
158
|
-
} elseif ( 'flag' === $spec_arg['type'] ) {
|
|
159
|
-
// For flags, the pattern is [--flag] not [--flag=<value>]
|
|
160
|
-
// So we need a custom regex pattern in the longdesc
|
|
161
|
-
$flag_pattern = '/\[?--' . preg_quote( $spec_arg['name'], '/' ) . "\]\s*\n:\s*(.+?)(\n|$)/";
|
|
162
|
-
if ( preg_match( $flag_pattern, $longdesc, $matches ) ) {
|
|
163
|
-
$description = trim( $matches[1] );
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return $description;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
134
|
/**
|
|
171
135
|
* Interactively prompt the user for input
|
|
172
136
|
* based on defined synopsis and passed arguments.
|
|
@@ -183,9 +147,6 @@ class Subcommand extends CompositeCommand {
|
|
|
183
147
|
return [ $args, $assoc_args ];
|
|
184
148
|
}
|
|
185
149
|
|
|
186
|
-
// Create a docparser to get default values and descriptions
|
|
187
|
-
$docparser = $this->create_mock_docparser();
|
|
188
|
-
|
|
189
150
|
// To skip the already provided positional arguments, we need to count
|
|
190
151
|
// how many we had already received.
|
|
191
152
|
$arg_index = 0;
|
|
@@ -213,17 +174,11 @@ class Subcommand extends CompositeCommand {
|
|
|
213
174
|
|
|
214
175
|
$spec = array_values( $spec );
|
|
215
176
|
|
|
216
|
-
/**
|
|
217
|
-
* @var string|true $prompt_args
|
|
218
|
-
*/
|
|
219
177
|
$prompt_args = WP_CLI::get_config( 'prompt' );
|
|
220
178
|
if ( true !== $prompt_args ) {
|
|
221
179
|
$prompt_args = explode( ',', $prompt_args );
|
|
222
180
|
}
|
|
223
181
|
|
|
224
|
-
// Reuse the existing DocParser to retrieve argument descriptions.
|
|
225
|
-
$docparser = $this->docparser;
|
|
226
|
-
|
|
227
182
|
// 'positional' arguments are positional (aka zero-indexed)
|
|
228
183
|
// so $args needs to be reset before prompting for new arguments
|
|
229
184
|
$args = [];
|
|
@@ -242,6 +197,7 @@ class Subcommand extends CompositeCommand {
|
|
|
242
197
|
}
|
|
243
198
|
|
|
244
199
|
$current_prompt = ( $key + 1 ) . '/' . count( $spec ) . ' ';
|
|
200
|
+
$default = $spec_arg['optional'] ? '' : false;
|
|
245
201
|
|
|
246
202
|
// 'generic' permits arbitrary key=value (e.g. [--<field>=<value>] )
|
|
247
203
|
if ( 'generic' === $spec_arg['type'] ) {
|
|
@@ -256,7 +212,7 @@ class Subcommand extends CompositeCommand {
|
|
|
256
212
|
$key_prompt = str_repeat( ' ', strlen( $current_prompt ) ) . $key_token;
|
|
257
213
|
}
|
|
258
214
|
|
|
259
|
-
$key = $this->prompt( $key_prompt );
|
|
215
|
+
$key = $this->prompt( $key_prompt, $default );
|
|
260
216
|
if ( false === $key ) {
|
|
261
217
|
return [ $args, $assoc_args ];
|
|
262
218
|
}
|
|
@@ -265,7 +221,7 @@ class Subcommand extends CompositeCommand {
|
|
|
265
221
|
$key_prompt_count = strlen( $key_prompt ) - strlen( $value_token ) - 1;
|
|
266
222
|
$value_prompt = str_repeat( ' ', $key_prompt_count ) . '=' . $value_token;
|
|
267
223
|
|
|
268
|
-
$value = $this->prompt( $value_prompt );
|
|
224
|
+
$value = $this->prompt( $value_prompt, $default );
|
|
269
225
|
if ( false === $value ) {
|
|
270
226
|
return [ $args, $assoc_args ];
|
|
271
227
|
}
|
|
@@ -279,41 +235,17 @@ class Subcommand extends CompositeCommand {
|
|
|
279
235
|
} while ( $repeat );
|
|
280
236
|
|
|
281
237
|
} else {
|
|
282
|
-
$prompt
|
|
283
|
-
$default_val = null;
|
|
284
|
-
|
|
285
|
-
// Add description if available
|
|
286
|
-
$longdesc = $this->get_longdesc();
|
|
287
|
-
$description = $this->get_arg_description( $spec_arg, $docparser, $longdesc );
|
|
288
|
-
|
|
289
|
-
if ( ! empty( $description ) ) {
|
|
290
|
-
$prompt .= ' (' . $description . ')';
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// Get default value for the argument (not for flags)
|
|
238
|
+
$prompt = $current_prompt . $spec_arg['token'];
|
|
294
239
|
if ( 'flag' === $spec_arg['type'] ) {
|
|
295
240
|
$prompt .= ' (Y/n)';
|
|
296
|
-
} elseif ( 'positional' === $spec_arg['type'] || 'assoc' === $spec_arg['type'] ) {
|
|
297
|
-
$spec_args = ( 'positional' === $spec_arg['type'] )
|
|
298
|
-
? $docparser->get_arg_args( $spec_arg['name'] )
|
|
299
|
-
: $docparser->get_param_args( $spec_arg['name'] );
|
|
300
|
-
if ( null !== $spec_args && isset( $spec_args['default'] ) ) {
|
|
301
|
-
$default_val = $spec_args['default'];
|
|
302
|
-
$prompt .= ' [' . $default_val . ']';
|
|
303
|
-
}
|
|
304
241
|
}
|
|
305
242
|
|
|
306
|
-
$response = $this->prompt( $prompt );
|
|
243
|
+
$response = $this->prompt( $prompt, $default );
|
|
307
244
|
if ( false === $response ) {
|
|
308
245
|
return [ $args, $assoc_args ];
|
|
309
246
|
}
|
|
310
247
|
|
|
311
|
-
|
|
312
|
-
if ( '' === $response && null !== $default_val ) {
|
|
313
|
-
$response = $default_val;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
if ( '' !== $response ) {
|
|
248
|
+
if ( $response ) {
|
|
317
249
|
switch ( $spec_arg['type'] ) {
|
|
318
250
|
case 'positional':
|
|
319
251
|
if ( $spec_arg['repeating'] ) {
|
|
@@ -339,85 +271,6 @@ class Subcommand extends CompositeCommand {
|
|
|
339
271
|
return [ $args, $assoc_args ];
|
|
340
272
|
}
|
|
341
273
|
|
|
342
|
-
/**
|
|
343
|
-
* Create a DocParser instance from the command's description.
|
|
344
|
-
*
|
|
345
|
-
* This creates a mock DocParser from the command's short and long descriptions,
|
|
346
|
-
* used internally for getting argument metadata.
|
|
347
|
-
*
|
|
348
|
-
* @return DocParser
|
|
349
|
-
*/
|
|
350
|
-
private function create_mock_docparser() {
|
|
351
|
-
$mock_doc = [ $this->get_shortdesc(), '' ];
|
|
352
|
-
$mock_doc = array_merge( $mock_doc, explode( "\n", $this->get_longdesc() ) );
|
|
353
|
-
$mock_doc = '/**' . PHP_EOL . '* ' . implode( PHP_EOL . '* ', $mock_doc ) . PHP_EOL . '*/';
|
|
354
|
-
return new DocParser( $mock_doc );
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
/**
|
|
358
|
-
* Resolve argument aliases to their canonical names.
|
|
359
|
-
*
|
|
360
|
-
* Takes an associative array of arguments and replaces any aliases
|
|
361
|
-
* with their canonical parameter names. This allows commands to define
|
|
362
|
-
* shorter versions of arguments (e.g., -w for --with-dependencies).
|
|
363
|
-
*
|
|
364
|
-
* For repeating parameters, alias values are merged with any canonical
|
|
365
|
-
* values already provided rather than being discarded.
|
|
366
|
-
*
|
|
367
|
-
* @param array $assoc_args Arguments passed to command.
|
|
368
|
-
* @param array $aliases Map of alias => canonical_name.
|
|
369
|
-
* @param array $repeating_params Map of canonical_name => true for repeating params.
|
|
370
|
-
* @return array Arguments with aliases resolved to canonical names.
|
|
371
|
-
*/
|
|
372
|
-
private function resolve_arg_aliases( $assoc_args, $aliases, $repeating_params = [] ) {
|
|
373
|
-
if ( empty( $aliases ) ) {
|
|
374
|
-
return $assoc_args;
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
// First pass: copy all non-alias entries to $resolved_args.
|
|
378
|
-
$resolved_args = [];
|
|
379
|
-
foreach ( $assoc_args as $key => $value ) {
|
|
380
|
-
if ( ! isset( $aliases[ $key ] ) ) {
|
|
381
|
-
$resolved_args[ $key ] = $value;
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Second pass: resolve aliases.
|
|
386
|
-
foreach ( $assoc_args as $key => $value ) {
|
|
387
|
-
if ( ! isset( $aliases[ $key ] ) ) {
|
|
388
|
-
continue;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
$canonical_key = $aliases[ $key ];
|
|
392
|
-
WP_CLI::debug( "Alias resolved: --{$key} => --{$canonical_key}", 'bootstrap' );
|
|
393
|
-
|
|
394
|
-
if ( ! array_key_exists( $canonical_key, $resolved_args ) ) {
|
|
395
|
-
// Canonical name not yet present; use alias value.
|
|
396
|
-
$resolved_args[ $canonical_key ] = $value;
|
|
397
|
-
} elseif ( ! empty( $repeating_params[ $canonical_key ] ) ) {
|
|
398
|
-
// Canonical name present and parameter is repeating; merge values.
|
|
399
|
-
$existing = $resolved_args[ $canonical_key ];
|
|
400
|
-
if ( ! is_array( $existing ) ) {
|
|
401
|
-
$existing = [ $existing ];
|
|
402
|
-
}
|
|
403
|
-
$alias_values = is_array( $value ) ? $value : [ $value ];
|
|
404
|
-
$resolved_args[ $canonical_key ] = array_merge( $existing, $alias_values );
|
|
405
|
-
} else {
|
|
406
|
-
// Canonical name present and not repeating; canonical wins.
|
|
407
|
-
WP_CLI::debug(
|
|
408
|
-
sprintf(
|
|
409
|
-
'Ignoring alias --%s because --%s was already provided.',
|
|
410
|
-
$key,
|
|
411
|
-
$canonical_key
|
|
412
|
-
),
|
|
413
|
-
'bootstrap'
|
|
414
|
-
);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
return $resolved_args;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
274
|
/**
|
|
422
275
|
* Validate the supplied arguments to the command.
|
|
423
276
|
* Throws warnings or errors if arguments are missing
|
|
@@ -466,7 +319,10 @@ class Subcommand extends CompositeCommand {
|
|
|
466
319
|
'fatal' => [],
|
|
467
320
|
'warning' => [],
|
|
468
321
|
];
|
|
469
|
-
$
|
|
322
|
+
$mock_doc = [ $this->get_shortdesc(), '' ];
|
|
323
|
+
$mock_doc = array_merge( $mock_doc, explode( "\n", $this->get_longdesc() ) );
|
|
324
|
+
$mock_doc = '/**' . PHP_EOL . '* ' . implode( PHP_EOL . '* ', $mock_doc ) . PHP_EOL . '*/';
|
|
325
|
+
$docparser = new DocParser( $mock_doc );
|
|
470
326
|
foreach ( $synopsis_spec as $spec ) {
|
|
471
327
|
if ( 'positional' === $spec['type'] ) {
|
|
472
328
|
$spec_args = $docparser->get_arg_args( $spec['name'] );
|
|
@@ -491,41 +347,16 @@ class Subcommand extends CompositeCommand {
|
|
|
491
347
|
++$i;
|
|
492
348
|
} elseif ( 'assoc' === $spec['type'] ) {
|
|
493
349
|
$spec_args = $docparser->get_param_args( $spec['name'] );
|
|
494
|
-
|
|
495
|
-
// Handle repeating parameter (e.g., [--status=<status>...])
|
|
496
|
-
if ( isset( $assoc_args[ $spec['name'] ] ) && is_array( $assoc_args[ $spec['name'] ] ) ) {
|
|
497
|
-
// If repeating is not set, use only the last value
|
|
498
|
-
if ( empty( $spec['repeating'] ) ) {
|
|
499
|
-
$values = $assoc_args[ $spec['name'] ];
|
|
500
|
-
$values_count = count( $values );
|
|
501
|
-
if ( $values_count > 0 ) {
|
|
502
|
-
$assoc_args[ $spec['name'] ] = $values[ $values_count - 1 ];
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
|
|
507
350
|
if ( ! isset( $assoc_args[ $spec['name'] ] ) && ! isset( $extra_args[ $spec['name'] ] ) ) {
|
|
508
351
|
if ( isset( $spec_args['default'] ) ) {
|
|
509
352
|
$assoc_args[ $spec['name'] ] = $spec_args['default'];
|
|
510
353
|
}
|
|
511
354
|
}
|
|
512
355
|
if ( isset( $assoc_args[ $spec['name'] ] ) && isset( $spec_args['options'] ) ) {
|
|
513
|
-
/**
|
|
514
|
-
* @var string|string[] $value
|
|
515
|
-
*/
|
|
516
356
|
$value = $assoc_args[ $spec['name'] ];
|
|
517
357
|
$options = $spec_args['options'];
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
if ( is_array( $value ) ) {
|
|
521
|
-
foreach ( $value as $single_value ) {
|
|
522
|
-
// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict -- This is a loose comparison by design.
|
|
523
|
-
if ( ! in_array( $single_value, $options ) ) {
|
|
524
|
-
$errors['fatal'][ $spec['name'] ] = "Invalid value '{$single_value}' specified for '{$spec['name']}'";
|
|
525
|
-
break;
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
} elseif ( ! in_array( $value, $options ) ) { // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict -- This is a loose comparison by design.
|
|
358
|
+
// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict -- This is a loose comparison by design.
|
|
359
|
+
if ( ! in_array( $value, $options ) ) {
|
|
529
360
|
// Try whether it might be a comma-separated list of multiple values.
|
|
530
361
|
$values = array_map( 'trim', explode( ',', $value ) );
|
|
531
362
|
$count = count( $values );
|
|
@@ -549,9 +380,8 @@ class Subcommand extends CompositeCommand {
|
|
|
549
380
|
}
|
|
550
381
|
}
|
|
551
382
|
|
|
552
|
-
$config = \WP_CLI::get_config();
|
|
553
383
|
list( $returned_errors, $to_unset ) = $validator->validate_assoc(
|
|
554
|
-
array_merge(
|
|
384
|
+
array_merge( \WP_CLI::get_config(), $extra_args, $assoc_args )
|
|
555
385
|
);
|
|
556
386
|
foreach ( [ 'fatal', 'warning' ] as $error_type ) {
|
|
557
387
|
$errors[ $error_type ] = array_merge( $errors[ $error_type ], $returned_errors[ $error_type ] );
|
|
@@ -591,34 +421,6 @@ class Subcommand extends CompositeCommand {
|
|
|
591
421
|
return [ $to_unset, $args, $assoc_args, $extra_args ];
|
|
592
422
|
}
|
|
593
423
|
|
|
594
|
-
/**
|
|
595
|
-
* Get the list of sensitive argument names from the synopsis.
|
|
596
|
-
* These arguments will have their values masked in log output.
|
|
597
|
-
*
|
|
598
|
-
* @return array<string> Array of argument names that are marked as sensitive
|
|
599
|
-
*/
|
|
600
|
-
private function get_sensitive_args() {
|
|
601
|
-
$synopsis = $this->get_synopsis();
|
|
602
|
-
if ( ! $synopsis ) {
|
|
603
|
-
return [];
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
$synopsis_spec = SynopsisParser::parse( $synopsis );
|
|
607
|
-
$docparser = $this->create_mock_docparser();
|
|
608
|
-
$sensitive_args = [];
|
|
609
|
-
|
|
610
|
-
foreach ( $synopsis_spec as $spec ) {
|
|
611
|
-
if ( 'assoc' === $spec['type'] ) {
|
|
612
|
-
$spec_args = $docparser->get_param_args( $spec['name'] );
|
|
613
|
-
if ( isset( $spec_args['sensitive'] ) && $spec_args['sensitive'] ) {
|
|
614
|
-
$sensitive_args[] = $spec['name'];
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
return $sensitive_args;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
424
|
/**
|
|
623
425
|
* Invoke the subcommand with the supplied arguments.
|
|
624
426
|
* Given a --prompt argument, interactively request input
|
|
@@ -630,70 +432,6 @@ class Subcommand extends CompositeCommand {
|
|
|
630
432
|
public function invoke( $args, $assoc_args, $extra_args ) {
|
|
631
433
|
static $prompted_once = false;
|
|
632
434
|
|
|
633
|
-
// Build alias map from the parsed synopsis and resolve to canonical names.
|
|
634
|
-
$aliases = [];
|
|
635
|
-
$repeating_params = [];
|
|
636
|
-
$synopsis_spec = SynopsisParser::parse( $this->get_synopsis() );
|
|
637
|
-
|
|
638
|
-
// Build a set of assoc/flag canonical names (local + global) for conflict detection.
|
|
639
|
-
// Positional parameter names are excluded because an alias matching a positional
|
|
640
|
-
// name would not cause any real ambiguity (--alias vs bare positional).
|
|
641
|
-
$assoc_flag_names = [];
|
|
642
|
-
foreach ( $synopsis_spec as $param ) {
|
|
643
|
-
if ( in_array( $param['type'], [ 'assoc', 'flag' ], true ) ) {
|
|
644
|
-
$assoc_flag_names[] = $param['name'];
|
|
645
|
-
}
|
|
646
|
-
if ( 'assoc' === $param['type'] && ! empty( $param['repeating'] ) ) {
|
|
647
|
-
$repeating_params[ $param['name'] ] = true;
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
foreach ( SynopsisParser::parse( $this->get_global_params() ) as $param ) {
|
|
651
|
-
if ( in_array( $param['type'], [ 'assoc', 'flag' ], true ) ) {
|
|
652
|
-
$assoc_flag_names[] = $param['name'];
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
$assoc_flag_names = array_unique( $assoc_flag_names );
|
|
656
|
-
|
|
657
|
-
foreach ( $synopsis_spec as $param ) {
|
|
658
|
-
if ( empty( $param['aliases'] ) ) {
|
|
659
|
-
continue;
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
foreach ( $param['aliases'] as $alias ) {
|
|
663
|
-
// Detect duplicate aliases (same alias used for different params).
|
|
664
|
-
if ( isset( $aliases[ $alias ] ) && $aliases[ $alias ] !== $param['name'] ) {
|
|
665
|
-
WP_CLI::warning(
|
|
666
|
-
sprintf(
|
|
667
|
-
"Alias '%s' for parameter '%s' conflicts with existing alias for parameter '%s'. Skipping.",
|
|
668
|
-
$alias,
|
|
669
|
-
$param['name'],
|
|
670
|
-
$aliases[ $alias ]
|
|
671
|
-
)
|
|
672
|
-
);
|
|
673
|
-
continue;
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
// Detect aliases that conflict with an assoc/flag canonical parameter name.
|
|
677
|
-
if ( in_array( $alias, $assoc_flag_names, true ) && $alias !== $param['name'] ) {
|
|
678
|
-
WP_CLI::warning(
|
|
679
|
-
sprintf(
|
|
680
|
-
"Alias '%s' for parameter '%s' conflicts with an existing parameter name. Skipping.",
|
|
681
|
-
$alias,
|
|
682
|
-
$param['name']
|
|
683
|
-
)
|
|
684
|
-
);
|
|
685
|
-
continue;
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
$aliases[ $alias ] = $param['name'];
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
if ( ! empty( $aliases ) ) {
|
|
692
|
-
WP_CLI::debug( 'Resolving argument aliases: ' . implode( ', ', array_keys( $aliases ) ), 'bootstrap' );
|
|
693
|
-
}
|
|
694
|
-
$assoc_args = $this->resolve_arg_aliases( $assoc_args, $aliases, $repeating_params );
|
|
695
|
-
$extra_args = $this->resolve_arg_aliases( $extra_args, $aliases, $repeating_params );
|
|
696
|
-
|
|
697
435
|
if ( 'help' !== $this->name ) {
|
|
698
436
|
if ( \WP_CLI::get_config( 'prompt' ) && ! $prompted_once ) {
|
|
699
437
|
list( $_args, $assoc_args ) = $this->prompt_args( $args, $assoc_args );
|
|
@@ -732,15 +470,12 @@ class Subcommand extends CompositeCommand {
|
|
|
732
470
|
if ( $prompted_once ) {
|
|
733
471
|
// Unset empty args.
|
|
734
472
|
$actual_args = $assoc_args;
|
|
735
|
-
foreach ( $actual_args as $key
|
|
736
|
-
if ( empty( $
|
|
473
|
+
foreach ( $actual_args as $key ) {
|
|
474
|
+
if ( empty( $actual_args[ $key ] ) ) {
|
|
737
475
|
unset( $actual_args[ $key ] );
|
|
738
476
|
}
|
|
739
477
|
}
|
|
740
478
|
|
|
741
|
-
// Get list of sensitive arguments to mask in output
|
|
742
|
-
$sensitive_args = $this->get_sensitive_args();
|
|
743
|
-
|
|
744
479
|
WP_CLI::log(
|
|
745
480
|
sprintf(
|
|
746
481
|
'wp %s %s',
|
|
@@ -750,7 +485,7 @@ class Subcommand extends CompositeCommand {
|
|
|
750
485
|
' ',
|
|
751
486
|
[
|
|
752
487
|
ltrim( Utils\args_to_str( $args ), ' ' ),
|
|
753
|
-
ltrim( Utils\assoc_args_to_str( $actual_args
|
|
488
|
+
ltrim( Utils\assoc_args_to_str( $actual_args ), ' ' ),
|
|
754
489
|
]
|
|
755
490
|
),
|
|
756
491
|
' '
|
|
@@ -33,9 +33,9 @@ class DocParser {
|
|
|
33
33
|
* @return string
|
|
34
34
|
*/
|
|
35
35
|
private static function remove_decorations( $comment ) {
|
|
36
|
-
$comment =
|
|
37
|
-
$comment =
|
|
38
|
-
$comment =
|
|
36
|
+
$comment = preg_replace( '|^/\*\*[\r\n]+|', '', $comment );
|
|
37
|
+
$comment = preg_replace( '|\n[\t ]*\*/$|', '', $comment );
|
|
38
|
+
$comment = preg_replace( '|^[\t ]*\* ?|m', '', $comment );
|
|
39
39
|
|
|
40
40
|
return $comment;
|
|
41
41
|
}
|
|
@@ -92,18 +92,6 @@ class DocParser {
|
|
|
92
92
|
return '';
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
/**
|
|
96
|
-
* Check if a given tag exists (e.g. "@skipglobalargcheck")
|
|
97
|
-
*
|
|
98
|
-
* Useful for checking the presence of valueless tags in PHPdoc.
|
|
99
|
-
*
|
|
100
|
-
* @param string $name Name for the tag, without '@'
|
|
101
|
-
* @return bool True if the tag exists, false otherwise.
|
|
102
|
-
*/
|
|
103
|
-
public function has_tag( $name ) {
|
|
104
|
-
return (bool) preg_match( '/^\s*\*?\s*@' . preg_quote( $name, '/' ) . '\b/m', $this->doc_comment );
|
|
105
|
-
}
|
|
106
|
-
|
|
107
95
|
/**
|
|
108
96
|
* Get the command's synopsis.
|
|
109
97
|
*
|
|
@@ -136,7 +124,7 @@ class DocParser {
|
|
|
136
124
|
* Get the arguments for a given argument.
|
|
137
125
|
*
|
|
138
126
|
* @param string $name Argument's doc name.
|
|
139
|
-
* @return
|
|
127
|
+
* @return mixed|null
|
|
140
128
|
*/
|
|
141
129
|
public function get_arg_args( $name ) {
|
|
142
130
|
return $this->get_arg_or_param_args( "/^\[?<{$name}>.*/" );
|
|
@@ -161,7 +149,7 @@ class DocParser {
|
|
|
161
149
|
* Get the arguments for a given parameter.
|
|
162
150
|
*
|
|
163
151
|
* @param string $key Parameter's key.
|
|
164
|
-
* @return
|
|
152
|
+
* @return mixed|null
|
|
165
153
|
*/
|
|
166
154
|
public function get_param_args( $key ) {
|
|
167
155
|
return $this->get_arg_or_param_args( "/^\[?--{$key}=.*/" );
|
|
@@ -5,22 +5,19 @@ namespace WP_CLI\Exception;
|
|
|
5
5
|
use OutOfBoundsException;
|
|
6
6
|
use WP_CLI\Traverser\RecursiveDataStructureTraverser;
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* @template T
|
|
10
|
-
*/
|
|
11
8
|
class NonExistentKeyException extends OutOfBoundsException {
|
|
12
|
-
/** @var RecursiveDataStructureTraverser
|
|
9
|
+
/** @var RecursiveDataStructureTraverser */
|
|
13
10
|
protected $traverser;
|
|
14
11
|
|
|
15
12
|
/**
|
|
16
|
-
* @param RecursiveDataStructureTraverser
|
|
13
|
+
* @param RecursiveDataStructureTraverser $traverser
|
|
17
14
|
*/
|
|
18
15
|
public function set_traverser( $traverser ) {
|
|
19
16
|
$this->traverser = $traverser;
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
/**
|
|
23
|
-
* @return RecursiveDataStructureTraverser
|
|
20
|
+
* @return RecursiveDataStructureTraverser
|
|
24
21
|
*/
|
|
25
22
|
public function get_traverser() {
|
|
26
23
|
return $this->traverser;
|
|
@@ -58,7 +58,7 @@ class Extractor {
|
|
|
58
58
|
$res = $zip->open( $zipfile );
|
|
59
59
|
|
|
60
60
|
if ( true === $res ) {
|
|
61
|
-
$name =
|
|
61
|
+
$name = Utils\basename( $zipfile );
|
|
62
62
|
$tempdir = Utils\get_temp_dir()
|
|
63
63
|
. uniqid( 'wp-cli-extract-zipfile-', true )
|
|
64
64
|
. "-{$name}";
|
|
@@ -98,7 +98,7 @@ class Extractor {
|
|
|
98
98
|
if ( class_exists( 'PharData' ) ) {
|
|
99
99
|
try {
|
|
100
100
|
$phar = new PharData( $tarball );
|
|
101
|
-
$name =
|
|
101
|
+
$name = Utils\basename( $tarball );
|
|
102
102
|
$tempdir = Utils\get_temp_dir()
|
|
103
103
|
. uniqid( 'wp-cli-extract-tarball-', true )
|
|
104
104
|
. "-{$name}";
|
|
@@ -121,15 +121,16 @@ class Extractor {
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
// Ensure relative paths cannot be misinterpreted as hostnames.
|
|
125
|
+
// Prepending `./` will force tar to interpret it as a filesystem path.
|
|
126
|
+
if ( self::path_is_relative( $tarball ) ) {
|
|
127
|
+
$tarball = "./{$tarball}";
|
|
127
128
|
}
|
|
128
|
-
$tarball = $tarball_absolute;
|
|
129
129
|
|
|
130
|
-
if ( !
|
|
130
|
+
if ( ! file_exists( $tarball )
|
|
131
|
+
|| ! is_readable( $tarball )
|
|
131
132
|
|| filesize( $tarball ) <= 0 ) {
|
|
132
|
-
throw new Exception( "Invalid
|
|
133
|
+
throw new Exception( "Invalid zip file '{$tarball}'." );
|
|
133
134
|
}
|
|
134
135
|
|
|
135
136
|
// Note: directory must exist for tar --directory to work.
|
|
@@ -178,12 +179,9 @@ class Extractor {
|
|
|
178
179
|
mkdir( $dest, 0777, true );
|
|
179
180
|
}
|
|
180
181
|
|
|
181
|
-
/**
|
|
182
|
-
* @var \SplFileInfo $item
|
|
183
|
-
*/
|
|
184
182
|
foreach ( $iterator as $item ) {
|
|
185
183
|
|
|
186
|
-
$dest_path = $dest . DIRECTORY_SEPARATOR . $iterator->
|
|
184
|
+
$dest_path = $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName();
|
|
187
185
|
|
|
188
186
|
if ( $item->isDir() ) {
|
|
189
187
|
if ( ! is_dir( $dest_path ) ) {
|
|
@@ -195,7 +193,7 @@ class Extractor {
|
|
|
195
193
|
copy( $item, $dest_path );
|
|
196
194
|
} else {
|
|
197
195
|
$error = 1;
|
|
198
|
-
WP_CLI::warning( "Unable to copy '" . $iterator->
|
|
196
|
+
WP_CLI::warning( "Unable to copy '" . $iterator->getSubPathName() . "' to current directory." );
|
|
199
197
|
}
|
|
200
198
|
}
|
|
201
199
|
|
|
@@ -219,27 +217,14 @@ class Extractor {
|
|
|
219
217
|
RecursiveIteratorIterator::CHILD_FIRST
|
|
220
218
|
);
|
|
221
219
|
|
|
222
|
-
$base_dir = realpath( $dir );
|
|
223
|
-
if ( false === $base_dir ) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
$base_dir = rtrim( $base_dir, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR;
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* @var \SplFileInfo $fileinfo
|
|
230
|
-
*/
|
|
231
220
|
foreach ( $files as $fileinfo ) {
|
|
232
|
-
$todo
|
|
233
|
-
$path
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if ( ! $real_path || 0 !== strpos( $real_path, $base_dir ) ) {
|
|
221
|
+
$todo = $fileinfo->isDir() ? 'rmdir' : 'unlink';
|
|
222
|
+
$path = $fileinfo->getRealPath();
|
|
223
|
+
if ( 0 !== strpos( $path, $fileinfo->getRealPath() ) ) {
|
|
237
224
|
WP_CLI::warning(
|
|
238
225
|
"Temporary file or folder to be removed was found outside of temporary folder, aborting removal: '{$path}'"
|
|
239
226
|
);
|
|
240
|
-
continue;
|
|
241
227
|
}
|
|
242
|
-
|
|
243
228
|
$todo( $path );
|
|
244
229
|
}
|
|
245
230
|
rmdir( $dir );
|
|
@@ -345,7 +330,7 @@ class Extractor {
|
|
|
345
330
|
sprintf(
|
|
346
331
|
"Failed to create directory '%s': %s.",
|
|
347
332
|
$dir,
|
|
348
|
-
$error
|
|
333
|
+
$error['message']
|
|
349
334
|
)
|
|
350
335
|
);
|
|
351
336
|
return false;
|
|
@@ -354,4 +339,43 @@ class Extractor {
|
|
|
354
339
|
|
|
355
340
|
return true;
|
|
356
341
|
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Check whether a path is relative-
|
|
345
|
+
*
|
|
346
|
+
* @param string $path Path to check.
|
|
347
|
+
* @return bool Whether the path is relative.
|
|
348
|
+
*/
|
|
349
|
+
private static function path_is_relative( $path ) {
|
|
350
|
+
if ( '' === $path ) {
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Strip scheme.
|
|
355
|
+
$scheme_position = strpos( $path, '://' );
|
|
356
|
+
if ( false !== $scheme_position ) {
|
|
357
|
+
$path = substr( $path, $scheme_position + 3 );
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// UNIX root "/" or "\" (Windows style).
|
|
361
|
+
if ( '/' === $path[0] || '\\' === $path[0] ) {
|
|
362
|
+
return false;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Windows root.
|
|
366
|
+
if ( strlen( $path ) > 1 && ctype_alpha( $path[0] ) && ':' === $path[1] ) {
|
|
367
|
+
|
|
368
|
+
// Special case: only drive letter, like "C:".
|
|
369
|
+
if ( 2 === strlen( $path ) ) {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Regular Windows path starting with drive letter, like "C:/ or "C:\".
|
|
374
|
+
if ( '/' === $path[2] || '\\' === $path[2] ) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
357
381
|
}
|