From 79b01de1b2f776e79b843eacaea72f087b9c5955 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 26 Feb 2019 08:14:01 +0100
Subject: [PATCH] feat(composer): parse/store lockedVersion

This will be used when deciding what to pin dependencies to.
---
 lib/manager/composer/extract.js | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/lib/manager/composer/extract.js b/lib/manager/composer/extract.js
index 94c496993b..7ba6d55067 100644
--- a/lib/manager/composer/extract.js
+++ b/lib/manager/composer/extract.js
@@ -52,13 +52,29 @@ async function extractPackageFile(content, fileName) {
   if (!deps.length) {
     return null;
   }
-  let composerLock = false;
+  const res = { deps };
   const filePath = fileName.replace(/\.json$/, '.lock');
-  if (await platform.getFile(filePath)) {
+  const lockContents = await platform.getFile(filePath);
+  // istanbul ignore if
+  if (lockContents) {
     logger.debug({ packageFile: fileName }, 'Found composer lock file');
-    composerLock = filePath;
+    res.composerLock = filePath;
+    try {
+      const lockParsed = JSON.parse(lockContents);
+      for (const dep of res.deps) {
+        const lockedDep = lockParsed.packages.find(
+          item => item.name === dep.depName
+        );
+        if (lockedDep) {
+          dep.lockedVersion = lockedDep.version.replace(/^v/, '');
+        }
+      }
+    } catch (err) {
+      logger.warn({ err }, 'Error processing composer.lock');
+    }
+  } else {
+    res.composerLock = false;
   }
-  const res = { deps, composerLock };
   if (composerJson.repositories) {
     if (is.array(composerJson.repositories)) {
       res.registryUrls = composerJson.repositories;
-- 
GitLab