Author: Shivam Mathur (shivammathur)
Date: 2025-03-15T18:28:58+05:30

Commit: 
https://github.com/php/web-downloads/commit/126c0e410ff7d61cc46cf5cb3d3062858228ad3a
Raw diff: 
https://github.com/php/web-downloads/commit/126c0e410ff7d61cc46cf5cb3d3062858228ad3a.diff

Fix parsing deps files in winlibs command

Changed paths:
  M  src/Console/Command/WinlibsCommand.php
  M  tests/Console/Command/WinlibsCommandTest.php


Diff:

diff --git a/src/Console/Command/WinlibsCommand.php 
b/src/Console/Command/WinlibsCommand.php
index 3aeb89b..78b91ca 100644
--- a/src/Console/Command/WinlibsCommand.php
+++ b/src/Console/Command/WinlibsCommand.php
@@ -60,21 +60,20 @@ public function handle(): int
         }
     }
 
-    private function parseFiles(array $files): array
+    public function parseFiles(array $files): array
     {
         $data = [];
         foreach ($files as $file) {
             $fileName = basename($file);
-            $fileNameParts = explode('.', $fileName);
-            $parsedFileNameParts = explode('-', $fileName);
-            $archParts = explode('.', $parsedFileNameParts[3]);
+            $pattern = 
'/^(?P<artifact>.+?)-(?P<version>\d.*)-(?P<vs>vs\d+)-(?P<arch>[^.]+)\.zip$/';
+            preg_match($pattern, $fileName, $matches);
             $data[] = [
-                'file_path' => $file,
-                'file_name' => $fileName,
-                'extension' => $fileNameParts[count($fileNameParts)-1],
-                'artifact_name' => $parsedFileNameParts[0],
-                'vs_version' => $parsedFileNameParts[2],
-                'arch' => $archParts[0],
+                'file_path'     => $file,
+                'file_name'     => $fileName,
+                'extension'     => 'zip',
+                'artifact_name' => $matches['artifact'],
+                'vs_version'    => $matches['vs'],
+                'arch'          => $matches['arch'],
             ];
         }
         return $data;
diff --git a/tests/Console/Command/WinlibsCommandTest.php 
b/tests/Console/Command/WinlibsCommandTest.php
index b966752..31154b4 100644
--- a/tests/Console/Command/WinlibsCommandTest.php
+++ b/tests/Console/Command/WinlibsCommandTest.php
@@ -173,4 +173,67 @@ public function testHandlesCorruptDataFile(): void
         $this->assertStringContainsString('Syntax error', $output);
         $this->assertEquals(1, $result);
     }
+
+
+    #[DataProvider('fileProvider')]
+    public function testParseFiles($file, $expected): void
+    {
+        $command = new WinlibsCommand();
+        $result = $command->parseFiles([$file]);
+        $this->assertEquals($expected, $result[0]);
+    }
+
+    public static function fileProvider(): array
+    {
+        return [
+            ['/tmp/net-snmp-5.7.3-1-vs16-x86.zip', [
+                'file_path'     => '/tmp/net-snmp-5.7.3-1-vs16-x86.zip',
+                'file_name'     => 'net-snmp-5.7.3-1-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'net-snmp',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+            ['/tmp/libxml2-2.9.14-1-vs16-x86.zip', [
+                'file_path'     => '/tmp/libxml2-2.9.14-1-vs16-x86.zip',
+                'file_name'     => 'libxml2-2.9.14-1-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'libxml2',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+            ['/tmp/c-client-2007f-1-vs16-x86.zip', [
+                'file_path'     => '/tmp/c-client-2007f-1-vs16-x86.zip',
+                'file_name'     => 'c-client-2007f-1-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'c-client',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+            ['/tmp/nghttp2-1.57.0-vs16-x86.zip', [
+                'file_path'     => '/tmp/nghttp2-1.57.0-vs16-x86.zip',
+                'file_name'     => 'nghttp2-1.57.0-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'nghttp2',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+            ['/tmp/openssl-1.1.1w.pl1-vs16-x86.zip', [
+                'file_path'     => '/tmp/openssl-1.1.1w.pl1-vs16-x86.zip',
+                'file_name'     => 'openssl-1.1.1w.pl1-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'openssl',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+            ['/tmp/zlib-1.2.12-vs16-x86.zip', [
+                'file_path'     => '/tmp/zlib-1.2.12-vs16-x86.zip',
+                'file_name'     => 'zlib-1.2.12-vs16-x86.zip',
+                'extension'     => 'zip',
+                'artifact_name' => 'zlib',
+                'vs_version'    => 'vs16',
+                'arch'          => 'x86',
+            ]],
+        ];
+    }
 }

Reply via email to