[TASK] Deprecate GeneralUtility::unQuoteFilenames 21/57821/3
authorWouter Wolters <typo3@wouterwolters.nl>
Sun, 5 Aug 2018 13:04:35 +0000 (15:04 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Thu, 9 Aug 2018 11:54:47 +0000 (13:54 +0200)
Moves the method over to CommandUtility as that is the only usage
in the core.

Resolves: #85760
Releases: master
Change-Id: I6d1831a6f6288365e5cb879c056ee06b7bb6fb74
Reviewed-on: https://review.typo3.org/57821
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/core/Classes/Utility/CommandUtility.php
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85760-DeprecateGeneralUtilityunQuoteFilenames.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php
typo3/sysext/core/Tests/UnitDeprecated/Utility/GeneralUtilityTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallStaticMatcher.php

index 40e2ff4..a8b2e04 100644 (file)
@@ -140,7 +140,7 @@ class CommandUtility
         $cmdLine = $path . ' ' . $parameters;
         // It is needed to change the parameters order when a mask image has been specified
         if ($command === 'composite') {
-            $paramsArr = GeneralUtility::unQuoteFilenames($parameters);
+            $paramsArr = self::unQuoteFilenames($parameters);
             $paramsArrCount = count($paramsArr);
             if ($paramsArrCount > 5) {
                 $tmp = $paramsArr[$paramsArrCount - 3];
@@ -466,6 +466,36 @@ class CommandUtility
     }
 
     /**
+     * Explode a string (normally a list of filenames) with whitespaces by considering quotes in that string.
+     *
+     * @param string $parameters The whole parameters string
+     * @return array Exploded parameters
+     */
+    protected static function unQuoteFilenames(string $parameters): array
+    {
+        $paramsArr = explode(' ', trim($parameters));
+        // Whenever a quote character (") is found, $quoteActive is set to the element number inside of $params.
+        // A value of -1 means that there are not open quotes at the current position.
+        $quoteActive = -1;
+        foreach ($paramsArr as $k => $v) {
+            if ($quoteActive > -1) {
+                $paramsArr[$quoteActive] .= ' ' . $v;
+                unset($paramsArr[$k]);
+                if (substr($v, -1) === $paramsArr[$quoteActive][0]) {
+                    $quoteActive = -1;
+                }
+            } elseif (!trim($v)) {
+                // Remove empty elements
+                unset($paramsArr[$k]);
+            } elseif (preg_match('/^(["\'])/', $v) && substr($v, -1) !== $v[0]) {
+                $quoteActive = $k;
+            }
+        }
+        // Return re-indexed array
+        return array_values($paramsArr);
+    }
+
+    /**
      * Escape a shell argument (for example a filename) to be used on the local system.
      *
      * The setting UTF8filesystem will be taken into account.
index 1c6d1d3..3e06ccf 100644 (file)
@@ -4071,9 +4071,11 @@ class GeneralUtility
      * @param string $parameters The whole parameters string
      * @param bool $unQuote If set, the elements of the resulting array are unquoted.
      * @return array Exploded parameters
+     * @deprecated since TYPO3 v9.4, will be removed in TYPO3 v10
      */
     public static function unQuoteFilenames($parameters, $unQuote = false)
     {
+        trigger_error('The method `TYPO3\CMS\Core\Utility\GeneralUtility::unQuoteFilenames()` has been deprecated and should not be used any longer, this method will be removed in TYPO3 v10.0', E_USER_DEPRECATED);
         $paramsArr = explode(' ', trim($parameters));
         // Whenever a quote character (") is found, $quoteActive is set to the element number inside of $params. A value of -1 means that there are not open quotes at the current position.
         $quoteActive = -1;
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85760-DeprecateGeneralUtilityunQuoteFilenames.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85760-DeprecateGeneralUtilityunQuoteFilenames.rst
new file mode 100644 (file)
index 0000000..e6489ca
--- /dev/null
@@ -0,0 +1,32 @@
+.. include:: ../../Includes.txt
+
+================================================================
+Deprecation: #85760 - Deprecate GeneralUtility::unQuoteFilenames
+================================================================
+
+See :issue:`85760`
+
+Description
+===========
+
+The method :php:`GeneralUtility::unQuoteFilenames` has been marked as deprecated and will be removed in TYPO3 v10.
+
+
+Impact
+======
+
+Calling the mentioned method will trigger a deprecation warning.
+
+
+Affected Installations
+======================
+
+Third party code which accesses the method.
+
+
+Migration
+=========
+
+No migration available.
+
+.. index:: PHP-API, FullyScanned
\ No newline at end of file
index 6cfe978..acef428 100644 (file)
@@ -3500,185 +3500,6 @@ class GeneralUtilityTest extends UnitTestCase
     }
 
     ///////////////////////////////
-    // Tests concerning unQuoteFilenames
-    ///////////////////////////////
-
-    /**
-     * Data provider for unQuoteFilenamesUnquotesFileNames
-     */
-    public function unQuoteFilenamesUnquotesFileNamesDataProvider()
-    {
-        return [
-            // Some theoretical tests first
-            [
-                '',
-                [],
-                []
-            ],
-            [
-                'aa bb "cc" "dd"',
-                ['aa', 'bb', '"cc"', '"dd"'],
-                ['aa', 'bb', 'cc', 'dd']
-            ],
-            [
-                'aa bb "cc dd"',
-                ['aa', 'bb', '"cc dd"'],
-                ['aa', 'bb', 'cc dd']
-            ],
-            [
-                '\'aa bb\' "cc dd"',
-                ['\'aa bb\'', '"cc dd"'],
-                ['aa bb', 'cc dd']
-            ],
-            [
-                '\'aa bb\' cc "dd"',
-                ['\'aa bb\'', 'cc', '"dd"'],
-                ['aa bb', 'cc', 'dd']
-            ],
-            // Now test against some real world examples
-            [
-                '/opt/local/bin/gm.exe convert +profile \'*\' -geometry 170x136!  -negate "C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
-                [
-                    '/opt/local/bin/gm.exe',
-                    'convert',
-                    '+profile',
-                    '\'*\'',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '"C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
-                    '"C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
-                ],
-                [
-                    '/opt/local/bin/gm.exe',
-                    'convert',
-                    '+profile',
-                    '*',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    'C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
-                    'C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
-                ]
-            ],
-            [
-                'C:/opt/local/bin/gm.exe convert +profile \'*\' -geometry 170x136!  -negate "C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
-                [
-                    'C:/opt/local/bin/gm.exe',
-                    'convert',
-                    '+profile',
-                    '\'*\'',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '"C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
-                    '"C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
-                ],
-                [
-                    'C:/opt/local/bin/gm.exe',
-                    'convert',
-                    '+profile',
-                    '*',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    'C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
-                    'C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
-                ]
-            ],
-            [
-                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate "/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '\'*\'',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '"/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
-                    '"/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
-                ],
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '*',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
-                    '/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
-                ]
-            ],
-            [
-                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate "/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '\'*\'',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '"/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
-                    '"/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
-                ],
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '*',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
-                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
-                ]
-            ],
-            [
-                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate \'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]\' \'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif\'',
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '\'*\'',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '\'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]\'',
-                    '\'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif\''
-                ],
-                [
-                    '/usr/bin/gm',
-                    'convert',
-                    '+profile',
-                    '*',
-                    '-geometry',
-                    '170x136!',
-                    '-negate',
-                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
-                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
-                ]
-            ]
-        ];
-    }
-
-    /**
-     * Tests if the commands are exploded and unquoted correctly
-     *
-     * @dataProvider unQuoteFilenamesUnquotesFileNamesDataProvider
-     * @test
-     */
-    public function unQuoteFilenamesUnquotesFileNames($source, $expectedQuoted, $expectedUnquoted)
-    {
-        $actualQuoted = GeneralUtility::unQuoteFilenames($source);
-        $actualUnquoted = GeneralUtility::unQuoteFilenames($source, true);
-        $this->assertEquals($expectedQuoted, $actualQuoted, 'The exploded command does not match the expected');
-        $this->assertEquals($expectedUnquoted, $actualUnquoted, 'The exploded and unquoted command does not match the expected');
-    }
-
-    ///////////////////////////////
     // Tests concerning split_fileref
     ///////////////////////////////
     /**
index e8d847a..5b536e7 100644 (file)
@@ -67,4 +67,183 @@ class GeneralUtilityTest extends UnitTestCase
         $requestFactory->request(Argument::any(), Argument::any(), ['headers' => $expectedHeaders])
             ->shouldHaveBeenCalled();
     }
+
+    ///////////////////////////////
+    // Tests concerning unQuoteFilenames
+    ///////////////////////////////
+
+    /**
+     * Data provider for unQuoteFilenamesUnquotesFileNames
+     */
+    public function unQuoteFilenamesUnquotesFileNamesDataProvider()
+    {
+        return [
+            // Some theoretical tests first
+            [
+                '',
+                [],
+                []
+            ],
+            [
+                'aa bb "cc" "dd"',
+                ['aa', 'bb', '"cc"', '"dd"'],
+                ['aa', 'bb', 'cc', 'dd']
+            ],
+            [
+                'aa bb "cc dd"',
+                ['aa', 'bb', '"cc dd"'],
+                ['aa', 'bb', 'cc dd']
+            ],
+            [
+                '\'aa bb\' "cc dd"',
+                ['\'aa bb\'', '"cc dd"'],
+                ['aa bb', 'cc dd']
+            ],
+            [
+                '\'aa bb\' cc "dd"',
+                ['\'aa bb\'', 'cc', '"dd"'],
+                ['aa bb', 'cc', 'dd']
+            ],
+            // Now test against some real world examples
+            [
+                '/opt/local/bin/gm.exe convert +profile \'*\' -geometry 170x136!  -negate "C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
+                [
+                    '/opt/local/bin/gm.exe',
+                    'convert',
+                    '+profile',
+                    '\'*\'',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '"C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
+                    '"C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
+                ],
+                [
+                    '/opt/local/bin/gm.exe',
+                    'convert',
+                    '+profile',
+                    '*',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    'C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
+                    'C:/Users/Someuser.Domain/Documents/Htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
+                ]
+            ],
+            [
+                'C:/opt/local/bin/gm.exe convert +profile \'*\' -geometry 170x136!  -negate "C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
+                [
+                    'C:/opt/local/bin/gm.exe',
+                    'convert',
+                    '+profile',
+                    '\'*\'',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '"C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
+                    '"C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
+                ],
+                [
+                    'C:/opt/local/bin/gm.exe',
+                    'convert',
+                    '+profile',
+                    '*',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    'C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
+                    'C:/Program Files/Apache2/htdocs/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
+                ]
+            ],
+            [
+                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate "/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '\'*\'',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '"/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
+                    '"/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
+                ],
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '*',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
+                    '/Shared Items/Data/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
+                ]
+            ],
+            [
+                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate "/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]" "/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"',
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '\'*\'',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '"/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]"',
+                    '"/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif"'
+                ],
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '*',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
+                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
+                ]
+            ],
+            [
+                '/usr/bin/gm convert +profile \'*\' -geometry 170x136!  -negate \'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]\' \'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif\'',
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '\'*\'',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '\'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]\'',
+                    '\'/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif\''
+                ],
+                [
+                    '/usr/bin/gm',
+                    'convert',
+                    '+profile',
+                    '*',
+                    '-geometry',
+                    '170x136!',
+                    '-negate',
+                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif[0]',
+                    '/Network/Servers/server01.internal/Projects/typo3temp/var/transient/61401f5c16c63d58e1d92e8a2449f2fe_maskNT.gif'
+                ]
+            ]
+        ];
+    }
+
+    /**
+     * Tests if the commands are exploded and unquoted correctly
+     *
+     * @dataProvider unQuoteFilenamesUnquotesFileNamesDataProvider
+     * @test
+     */
+    public function unQuoteFilenamesUnquotesFileNames($source, $expectedQuoted, $expectedUnquoted)
+    {
+        $actualQuoted = GeneralUtility::unQuoteFilenames($source);
+        $actualUnquoted = GeneralUtility::unQuoteFilenames($source, true);
+        $this->assertEquals($expectedQuoted, $actualQuoted, 'The exploded command does not match the expected');
+        $this->assertEquals($expectedUnquoted, $actualUnquoted, 'The exploded and unquoted command does not match the expected');
+    }
 }
index 7d9c216..b2caf46 100644 (file)
@@ -617,4 +617,11 @@ return [
             'Deprecation-85759-DeprecateGeneralUtilitygetHostName.rst',
         ],
     ],
+    'TYPO3\CMS\Core\Utility\GeneralUtility::unQuoteFilenames' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-85760-DeprecateGeneralUtilityunQuoteFilenames.rst',
+        ],
+    ],
 ];