From 3f5a0c04f5743319462cadfc390c5dd9130f6954 Mon Sep 17 00:00:00 2001
From: Martin Herndl <martin.herndl@icis.com>
Date: Tue, 14 Mar 2023 06:10:30 +0100
Subject: [PATCH] feat(composer): skip path repo dependencies (#20887)

---
 lib/modules/manager/composer/extract.spec.ts | 30 ++++++++++++++++++++
 lib/modules/manager/composer/extract.ts      |  9 ++++++
 lib/modules/manager/composer/types.ts        |  2 +-
 3 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/lib/modules/manager/composer/extract.spec.ts b/lib/modules/manager/composer/extract.spec.ts
index bee3f2ec6c..617db0e724 100644
--- a/lib/modules/manager/composer/extract.spec.ts
+++ b/lib/modules/manager/composer/extract.spec.ts
@@ -1,3 +1,4 @@
+import { codeBlock } from 'common-tags';
 import { Fixtures } from '../../../../test/fixtures';
 import { fs } from '../../../../test/util';
 import { extractPackageFile } from '.';
@@ -248,6 +249,35 @@ describe('modules/manager/composer/extract', () => {
       });
     });
 
+    it('skips path dependencies', async () => {
+      const res = await extractPackageFile(
+        codeBlock`
+          {
+            "name": "acme/path-sources",
+            "description": "Fetch Packages via path",
+            "repositories": {
+              "acme/path1": {
+                "type": "path",
+                "url": "packages/acme/path1"
+              }
+            },
+            "require": {
+              "acme/path1": "*"
+            }
+          }
+        `,
+        packageFile
+      );
+      expect(res?.deps).toEqual([
+        {
+          currentValue: '*',
+          depName: 'acme/path1',
+          depType: 'require',
+          skipReason: 'path-dependency',
+        },
+      ]);
+    });
+
     it('extracts dependencies with lock file', async () => {
       fs.readLocalFile.mockResolvedValue('some content');
       const res = await extractPackageFile(requirements1, packageFile);
diff --git a/lib/modules/manager/composer/extract.ts b/lib/modules/manager/composer/extract.ts
index 2b8588b7bb..ae40abec46 100644
--- a/lib/modules/manager/composer/extract.ts
+++ b/lib/modules/manager/composer/extract.ts
@@ -46,6 +46,7 @@ function parseRepositories(
         switch (repo.type) {
           case 'vcs':
           case 'git':
+          case 'path':
             repositories[name!] = repo;
             break;
           case 'composer':
@@ -144,6 +145,14 @@ export async function extractPackageFile(
                   datasource = GitTagsDatasource.id;
                   packageName = repositories[depName].url;
                   break;
+                case 'path':
+                  deps.push({
+                    depType,
+                    depName,
+                    currentValue,
+                    skipReason: 'path-dependency',
+                  });
+                  continue;
               }
             }
             const dep: PackageDependency = {
diff --git a/lib/modules/manager/composer/types.ts b/lib/modules/manager/composer/types.ts
index 896ff7bd8b..c46f294d0c 100644
--- a/lib/modules/manager/composer/types.ts
+++ b/lib/modules/manager/composer/types.ts
@@ -1,7 +1,7 @@
 // istanbul ignore file: types only
 export interface Repo {
   name?: string;
-  type: 'composer' | 'git' | 'package' | 'vcs';
+  type: 'composer' | 'git' | 'package' | 'path' | 'vcs';
   packagist?: boolean;
   'packagist.org'?: boolean;
   url: string;
-- 
GitLab