git: be146a923dbd - main - devel/arcanist-lib: Suppress certain runtime exceptions

From: Michael Gmelin <grembo_at_FreeBSD.org>
Date: Tue, 31 Jan 2023 18:53:03 UTC
The branch main has been updated by grembo:

URL: https://cgit.FreeBSD.org/ports/commit/?id=be146a923dbda66f50c6b04b406da790837f6287

commit be146a923dbda66f50c6b04b406da790837f6287
Author:     Michael Gmelin <grembo@FreeBSD.org>
AuthorDate: 2023-01-31 17:06:46 +0000
Commit:     Michael Gmelin <grembo@FreeBSD.org>
CommitDate: 2023-01-31 18:51:50 +0000

    devel/arcanist-lib: Suppress certain runtime exceptions
    
    Default configured PHP 8.1+ issues deprecation errors when NULL
    strings are passed into various library functions.
    
    In the past, we tried to address those one by one, which feels
    a bit like playing Whac-A-Mole.
    
    This patch adds custom error handling for this kind of deprecation
    error, so that it is ignored. This should fix this entire class of
    errors at least until PHP 9.0 is released, at which point a different
    workaround (or real solution is needed). Therefore previous patches
    were removed.
---
 devel/arcanist-lib/Makefile                          |  2 +-
 .../files/patch-src_error_PhutilErrorHandler.php     | 14 ++++++++++++++
 .../files/patch-src_parser_ArcanistBundle.php        | 20 --------------------
 .../patch-src_repository_api_ArcanistGitAPI.php      | 11 -----------
 .../patch-src_workflow_ArcanistDiffWorkflow.php      | 11 -----------
 5 files changed, 15 insertions(+), 43 deletions(-)

diff --git a/devel/arcanist-lib/Makefile b/devel/arcanist-lib/Makefile
index 88851111a747..35298455a620 100644
--- a/devel/arcanist-lib/Makefile
+++ b/devel/arcanist-lib/Makefile
@@ -1,6 +1,6 @@
 PORTNAME?=	arcanist
 PORTVERSION?=	20220518
-PORTREVISION?=	3
+PORTREVISION?=	4
 CATEGORIES?=	devel
 PKGNAMESUFFIX=	${SLAVE_PKGNAMESUFFIX}${PHP_PKGNAMESUFFIX}
 
diff --git a/devel/arcanist-lib/files/patch-src_error_PhutilErrorHandler.php b/devel/arcanist-lib/files/patch-src_error_PhutilErrorHandler.php
new file mode 100644
index 000000000000..c5a89b45c7de
--- /dev/null
+++ b/devel/arcanist-lib/files/patch-src_error_PhutilErrorHandler.php
@@ -0,0 +1,14 @@
+--- src/error/PhutilErrorHandler.php.orig	2022-05-17 23:20:14 UTC
++++ src/error/PhutilErrorHandler.php
+@@ -181,6 +181,11 @@ final class PhutilErrorHandler extends Phobject {
+    * @task internal
+    */
+   public static function handleError($num, $str, $file, $line, $ctx = null) {
++    // work around PHP 8.1+ null argument deprecation error
++    if ($num === E_DEPRECATED && preg_match('/Passing null to parameter #.* of type .* is deprecated/', $str)) {
++      return true;
++    }
++
+     foreach (self::$traps as $trap) {
+       $trap->addError($num, $str, $file, $line);
+     }
diff --git a/devel/arcanist-lib/files/patch-src_parser_ArcanistBundle.php b/devel/arcanist-lib/files/patch-src_parser_ArcanistBundle.php
deleted file mode 100644
index 095e1b24ee81..000000000000
--- a/devel/arcanist-lib/files/patch-src_parser_ArcanistBundle.php
+++ /dev/null
@@ -1,20 +0,0 @@
---- src/parser/ArcanistBundle.php.orig	2022-09-08 16:04:09 UTC
-+++ src/parser/ArcanistBundle.php
-@@ -762,7 +762,7 @@ final class ArcanistBundle extends Phobject {
-       $old_data = $this->getBlob($old_phid, $name);
-     }
- 
--    $old_length = strlen($old_data);
-+    $old_length = strlen($old_data ?? '');
- 
-     // Here, and below, the binary will be emitted with base85 encoding. This
-     // encoding encodes each 4 bytes of input in 5 bytes of output, so we may
-@@ -795,7 +795,7 @@ final class ArcanistBundle extends Phobject {
-       $new_data = $this->getBlob($new_phid, $name);
-     }
- 
--    $new_length = strlen($new_data);
-+    $new_length = strlen($new_data ?? '');
-     $this->reserveBytes($new_length * 5 / 4);
- 
-     if ($new_data === null) {
diff --git a/devel/arcanist-lib/files/patch-src_repository_api_ArcanistGitAPI.php b/devel/arcanist-lib/files/patch-src_repository_api_ArcanistGitAPI.php
deleted file mode 100644
index fa73cbef6e63..000000000000
--- a/devel/arcanist-lib/files/patch-src_repository_api_ArcanistGitAPI.php
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/repository/api/ArcanistGitAPI.php.orig	2023-01-06 17:27:38 UTC
-+++ src/repository/api/ArcanistGitAPI.php
-@@ -1143,7 +1143,7 @@ final class ArcanistGitAPI extends ArcanistRepositoryA
- 
-   public function hasLocalCommit($commit) {
-     try {
--      if (!$this->getCanonicalRevisionName($commit)) {
-+      if (!$this->getCanonicalRevisionName($commit ?? '')) {
-         return false;
-       }
-     } catch (CommandException $exception) {
diff --git a/devel/arcanist-lib/files/patch-src_workflow_ArcanistDiffWorkflow.php b/devel/arcanist-lib/files/patch-src_workflow_ArcanistDiffWorkflow.php
deleted file mode 100644
index f132ed21d524..000000000000
--- a/devel/arcanist-lib/files/patch-src_workflow_ArcanistDiffWorkflow.php
+++ /dev/null
@@ -1,11 +0,0 @@
---- src/workflow/ArcanistDiffWorkflow.php.orig	2023-01-09 21:24:25 UTC
-+++ src/workflow/ArcanistDiffWorkflow.php
-@@ -2361,7 +2361,7 @@ EOTEXT
- 
-     // If we track an upstream branch either directly or indirectly, use that.
-     $branch = $api->getBranchName();
--    if (strlen($branch)) {
-+    if (strlen($branch ?? '')) {
-       $upstream_path = $api->getPathToUpstream($branch);
-       $remote_branch = $upstream_path->getRemoteBranchName();
-       if ($remote_branch !== null) {