Author: Shivam Mathur (shivammathur)
Date: 2025-02-04T17:27:47+05:30

Commit: 
https://github.com/php/web-downloads/commit/5d0d420df2dace053905ee2b64ea05e87c1c3109
Raw diff: 
https://github.com/php/web-downloads/commit/5d0d420df2dace053905ee2b64ea05e87c1c3109.diff

Add support for sha1sum.txt file

Fix writing to hash files to match old format

Changed paths:
  M  src/Actions/GetListing.php
  M  tests/Actions/GetListingTest.php


Diff:

diff --git a/src/Actions/GetListing.php b/src/Actions/GetListing.php
index c36e2dc..ad5142e 100644
--- a/src/Actions/GetListing.php
+++ b/src/Actions/GetListing.php
@@ -12,7 +12,8 @@ public function handle(string $directory): array
         }
 
         $releases = [];
-        $sha256sums = $this->getSha256Sums($directory);
+        $sha256sums = $this->getShaSums($directory, 'sha256');
+        $this->getShaSums($directory, 'sha1');
         foreach ($builds as $file) {
             $file_ori = $file;
             $mtime = date('Y-M-d H:i:s', filemtime($file));
@@ -59,20 +60,28 @@ public function handle(string $directory): array
         return $releases;
     }
 
-    public function getSha256Sums($directory): array
+    public function getShaSums(string $directory, string $algo): array
     {
         $result = [];
-        if(!file_exists("$directory/sha256sum.txt")) {
-            file_put_contents("$directory/sha256sum.txt", '');
+        $hashes = [];
+        if(!file_exists("$directory/{$algo}sum.txt")) {
+            file_put_contents("$directory/{$algo}sum.txt", '');
         }
-        $sha_file = fopen("$directory/sha256sum.txt", 'w');
         foreach (scandir($directory) as $filename) {
             if (pathinfo($filename, PATHINFO_EXTENSION) !== 'zip') {
                 continue;
             }
-            $sha256 = hash_file('sha256', "$directory/$filename");
-            fwrite($sha_file, "$sha256 *$filename\n");
-            $result[strtolower(basename($filename))] = $sha256;
+            $hash = hash_file($algo, "$directory/$filename");
+            $result[strtolower(basename($filename))] = $hash;
+            preg_match('/-(\d+\.\d+)/', $filename, $matches);
+            $hashes[$matches[1]][$filename] = $hash;
+        }
+        $sha_file = fopen("$directory/{$algo}sum.txt", 'w');
+        foreach ($hashes as $version) {
+            foreach ($version as $filename => $hash) {
+                fwrite($sha_file, "$hash *$filename\n");
+            }
+            fwrite($sha_file, "\n");
         }
         fclose($sha_file);
         return $result;
diff --git a/tests/Actions/GetListingTest.php b/tests/Actions/GetListingTest.php
index 985bcf7..8d5ee50 100644
--- a/tests/Actions/GetListingTest.php
+++ b/tests/Actions/GetListingTest.php
@@ -97,11 +97,11 @@ public function testParseFileName(string $fileName, array 
$expected): void
 
     public function testGetSha256SumsCreatesFileAndReturnsHashes(): void
     {
-        $dummyZip = $this->tempDir . '/dummy.zip';
+        $dummyZip = $this->tempDir . '/php-7.4.34.zip';
         $content = "dummy content";
         file_put_contents($dummyZip, $content);
 
-        $sums = $this->getListing->getSha256Sums($this->tempDir);
+        $sums = $this->getListing->getShaSums($this->tempDir, 'sha256');
 
         $key = strtolower(basename($dummyZip));
         $expectedHash = hash_file('sha256', $dummyZip);

Reply via email to