From fe41748e7b32ed5ee99e445cda23e127c51332df Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sat, 1 Jun 2019 08:23:18 +0200
Subject: [PATCH] feat(pr): simpler displayFrom/displayTo logic (#3853)

---
 lib/config/definitions.js                     | 10 +----
 lib/workers/pr/pr-body.js                     | 21 +----------
 lib/workers/repository/updates/generate.js    | 37 +++++++++++++++++++
 renovate-schema.json                          | 12 ++----
 .../pr/__snapshots__/index.spec.js.snap       |  8 ++--
 test/workers/pr/index.spec.js                 | 10 +++--
 .../__snapshots__/flatten.spec.js.snap        |  4 +-
 .../__snapshots__/generate.spec.js.snap       |  6 +++
 .../repository/updates/generate.spec.js       |  5 ++-
 9 files changed, 63 insertions(+), 50 deletions(-)

diff --git a/lib/config/definitions.js b/lib/config/definitions.js
index 7a09e8d678..1c4a805cef 100644
--- a/lib/config/definitions.js
+++ b/lib/config/definitions.js
@@ -817,9 +817,6 @@ const options = [
       branchTopic: '{{{depNameSanitized}}}-digest',
       commitMessageExtra: 'to {{newDigestShort}}',
       commitMessageTopic: '{{{depName}}} commit hash',
-      prBodyDefinitions: {
-        Change: '`{{{currentValue}}}` -> `{{{newDigestShort}}}`',
-      },
     },
     cli: false,
     mergeable: true,
@@ -1181,10 +1178,6 @@ const options = [
     type: 'object',
     default: {
       fileMatch: ['(^|/)WORKSPACE$', '\\.bzl$'],
-      prBodyDefinitions: {
-        Change:
-          '{{#if currentDigestShort}}`{{{currentDigestShort}}}` -> {{#if isDigest}}`{{{newDigestShort}}}`{{else}}`{{{newVersion}}}`{{/if}}{{else}}`{{{currentValue}}}` -> `{{{newValue}}}`{{/if}}',
-      },
     },
     mergeable: true,
   },
@@ -1771,8 +1764,7 @@ const options = [
       Update: '{{{updateType}}}',
       'Current value': '{{{currentValue}}}',
       'New value': '{{{newValue}}}',
-      Change:
-        '{{#if displayFrom}}`{{{displayFrom}}}` -> {{else}}{{#if currentValue}}`{{{currentValue}}}` -> {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}',
+      Change: '`{{{displayFrom}}}` -> `{{{displayTo}}}`',
       References: '{{{references}}}',
       'Package file': '{{{packageFile}}}',
     },
diff --git a/lib/workers/pr/pr-body.js b/lib/workers/pr/pr-body.js
index 2738d423a2..0d06b35d6c 100644
--- a/lib/workers/pr/pr-body.js
+++ b/lib/workers/pr/pr-body.js
@@ -59,14 +59,7 @@ async function getPrBody(config) {
       references.push(`[changelog](${changelogUrl})`);
     }
     upgrade.references = references.join(', ');
-    const {
-      fromVersion,
-      toVersion,
-      newValue,
-      newDigestShort,
-      updateType,
-      versionScheme,
-    } = upgrade;
+    const { fromVersion, toVersion, updateType, versionScheme } = upgrade;
     // istanbul ignore if
     if (updateType === 'minor') {
       try {
@@ -78,18 +71,6 @@ async function getPrBody(config) {
         // do nothing
       }
     }
-    if (newDigestShort) {
-      if (updateType === 'pin') {
-        upgrade.newValue = config.newDigestShort;
-      }
-      if (newValue) {
-        upgrade.newValue = newValue + '@' + newDigestShort;
-      } else {
-        upgrade.newValue = newDigestShort;
-      }
-    } else if (updateType !== 'lockFileMaintenance') {
-      upgrade.newValue = newValue;
-    }
     /* eslint-enable no-param-reassign */
   });
   const tableDefinitions = getTableDefinition(config);
diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js
index 9136dd67f7..7813cc6578 100644
--- a/lib/workers/repository/updates/generate.js
+++ b/lib/workers/repository/updates/generate.js
@@ -55,6 +55,43 @@ function generateBranchConfig(branchUpgrades) {
   let releaseTimestamp;
   for (const branchUpgrade of branchUpgrades) {
     let upgrade = { ...branchUpgrade };
+    if (upgrade.currentDigest) {
+      upgrade.currentDigestShort =
+        upgrade.currentDigestShort ||
+        upgrade.currentDigest.replace('sha256:', '').substring(0, 7);
+    }
+    if (upgrade.newDigest) {
+      upgrade.newDigestShort =
+        upgrade.newDigestShort ||
+        upgrade.newDigest.replace('sha256:', '').substring(0, 7);
+    }
+    if (!upgrade.displayFrom) {
+      if (upgrade.currentValue === upgrade.newValue) {
+        upgrade.displayFrom =
+          upgrade.currentDigestShort || upgrade.currentVersion || '';
+        upgrade.displayTo =
+          upgrade.displayTo ||
+          upgrade.newDigestShort ||
+          upgrade.newVersion ||
+          '';
+      } else {
+        upgrade.displayFrom =
+          upgrade.currentValue ||
+          upgrade.currentVersion ||
+          upgrade.currentDigestShort ||
+          '';
+        upgrade.displayTo =
+          upgrade.displayTo ||
+          upgrade.newValue ||
+          upgrade.newVersion ||
+          upgrade.newDigestShort ||
+          '';
+      }
+    }
+
+    if (upgrade.displayFrom.length * upgrade.displayTo.length === 0) {
+      logger.info({ upgrade }, 'empty displayFrom/displayTo');
+    }
     upgrade.prettyDepType =
       upgrade.prettyDepType || upgrade.depType || 'dependency';
     if (useGroupSettings) {
diff --git a/renovate-schema.json b/renovate-schema.json
index c3042daac5..7861ddddde 100644
--- a/renovate-schema.json
+++ b/renovate-schema.json
@@ -526,10 +526,7 @@
       "default": {
         "branchTopic": "{{{depNameSanitized}}}-digest",
         "commitMessageExtra": "to {{newDigestShort}}",
-        "commitMessageTopic": "{{{depName}}} commit hash",
-        "prBodyDefinitions": {
-          "Change": "`{{{currentValue}}}` -> `{{{newDigestShort}}}`"
-        }
+        "commitMessageTopic": "{{{depName}}} commit hash"
       },
       "$ref": "#"
     },
@@ -797,10 +794,7 @@
       "description": "Configuration object for bazel WORKSPACE renovation",
       "type": "object",
       "default": {
-        "fileMatch": ["(^|/)WORKSPACE$", "\\.bzl$"],
-        "prBodyDefinitions": {
-          "Change": "{{#if currentDigestShort}}`{{{currentDigestShort}}}` -> {{#if isDigest}}`{{{newDigestShort}}}`{{else}}`{{{newVersion}}}`{{/if}}{{else}}`{{{currentValue}}}` -> `{{{newValue}}}`{{/if}}"
-        }
+        "fileMatch": ["(^|/)WORKSPACE$", "\\.bzl$"]
       },
       "$ref": "#"
     },
@@ -1217,7 +1211,7 @@
         "Update": "{{{updateType}}}",
         "Current value": "{{{currentValue}}}",
         "New value": "{{{newValue}}}",
-        "Change": "{{#if displayFrom}}`{{{displayFrom}}}` -> {{else}}{{#if currentValue}}`{{{currentValue}}}` -> {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}",
+        "Change": "`{{{displayFrom}}}` -> `{{{displayTo}}}`",
         "References": "{{{references}}}",
         "Package file": "{{{packageFile}}}"
       }
diff --git a/test/workers/pr/__snapshots__/index.spec.js.snap b/test/workers/pr/__snapshots__/index.spec.js.snap
index f6d65d2689..cc8bcc269a 100644
--- a/test/workers/pr/__snapshots__/index.spec.js.snap
+++ b/test/workers/pr/__snapshots__/index.spec.js.snap
@@ -129,10 +129,10 @@ Array [
 | Package | Type | Update | Change | References |
 |---|---|---|---|---|
 | dummy | devDependencies | lockFileMaintenance | \`1.0.0\` -> \`1.1.0\` | [homepage](https://dummy.com), [source](https://github.com/renovateapp/dummy/tree/HEAD/packages/a), [changelog](https://github.com/renovateapp/dummy/changelog.md) |
-| a |  |  | \`aaaaaaa\` |  |
-| b |  | pin | \`some_new_value@bbbbbbb\` |  |
-| c |  |  |  |  |
-| d |  | lockFileMaintenance |  |  |
+| a |  |  | \`zzzzzz\` -> \`aaaaaaa\` |  |
+| b |  | pin | \`some_old_value\` -> \`some_new_value\` |  |
+| c |  |  | \`\` -> \`\` |  |
+| d |  | lockFileMaintenance | \`\` -> \`\` |  |
 
 note 1
 
diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js
index 39738b9665..82bc7a62ee 100644
--- a/test/workers/pr/index.spec.js
+++ b/test/workers/pr/index.spec.js
@@ -115,8 +115,8 @@ describe('workers/pr', () => {
       config.depType = 'devDependencies';
       config.depName = 'dummy';
       config.privateRepo = true;
-      config.currentValue = '1.0.0';
-      config.newValue = '1.1.0';
+      config.displayFrom = '1.0.0';
+      config.displayTo = '1.1.0';
       config.updateType = 'minor';
       config.homepage = 'https://dummy.com';
       config.sourceUrl = 'https://github.com/renovateapp/dummy';
@@ -160,13 +160,15 @@ describe('workers/pr', () => {
       config.upgrades = config.upgrades.concat([
         {
           depName: 'a',
-          newDigestShort: 'aaaaaaa',
+          displayFrom: 'zzzzzz',
+          displayTo: 'aaaaaaa',
           prBodyNotes: ['note 1', 'note 2'],
         },
         {
           depName: 'b',
           newDigestShort: 'bbbbbbb',
-          newValue: 'some_new_value',
+          displayFrom: 'some_old_value',
+          displayTo: 'some_new_value',
           updateType: 'pin',
         },
         {
diff --git a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
index d7a259f323..b1a9a74e2b 100644
--- a/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/flatten.spec.js.snap
@@ -846,7 +846,7 @@ Array [
       "References",
     ],
     "prBodyDefinitions": Object {
-      "Change": "{{#if displayFrom}}\`{{{displayFrom}}}\` -> {{else}}{{#if currentValue}}\`{{{currentValue}}}\` -> {{/if}}{{/if}}{{#if displayTo}}\`{{{displayTo}}}\`{{else}}\`{{{newValue}}}\`{{/if}}",
+      "Change": "\`{{{displayFrom}}}\` -> \`{{{displayTo}}}\`",
       "Current value": "{{{currentValue}}}",
       "New value": "{{{newValue}}}",
       "Package": "{{{depName}}}",
@@ -958,7 +958,7 @@ Array [
       "References",
     ],
     "prBodyDefinitions": Object {
-      "Change": "{{#if displayFrom}}\`{{{displayFrom}}}\` -> {{else}}{{#if currentValue}}\`{{{currentValue}}}\` -> {{/if}}{{/if}}{{#if displayTo}}\`{{{displayTo}}}\`{{else}}\`{{{newValue}}}\`{{/if}}",
+      "Change": "\`{{{displayFrom}}}\` -> \`{{{displayTo}}}\`",
       "Current value": "{{{currentValue}}}",
       "New value": "{{{newValue}}}",
       "Package": "{{{depName}}}",
diff --git a/test/workers/repository/updates/__snapshots__/generate.spec.js.snap b/test/workers/repository/updates/__snapshots__/generate.spec.js.snap
index 55ae92ecb8..d8e1f334b0 100644
--- a/test/workers/repository/updates/__snapshots__/generate.spec.js.snap
+++ b/test/workers/repository/updates/__snapshots__/generate.spec.js.snap
@@ -14,6 +14,8 @@ Object {
   "canBeUnpublished": false,
   "commitMessage": "",
   "depName": "@types/some-dep",
+  "displayFrom": "",
+  "displayTo": "0.5.7",
   "masterIssueApproval": false,
   "newValue": "0.5.7",
   "prTitle": "some-title",
@@ -25,6 +27,8 @@ Object {
       "branchName": "some-branch",
       "commitMessage": "",
       "depName": "@types/some-dep",
+      "displayFrom": "",
+      "displayTo": "0.5.7",
       "newValue": "0.5.7",
       "prTitle": "some-title",
       "prettyDepType": "dependency",
@@ -33,6 +37,8 @@ Object {
       "branchName": "some-branch",
       "commitMessage": "",
       "depName": "some-dep",
+      "displayFrom": "",
+      "displayTo": "0.6.0",
       "newValue": "0.6.0",
       "prTitle": "some-title",
       "prettyDepType": "dependency",
diff --git a/test/workers/repository/updates/generate.spec.js b/test/workers/repository/updates/generate.spec.js
index 6b22ba540e..8f24852987 100644
--- a/test/workers/repository/updates/generate.spec.js
+++ b/test/workers/repository/updates/generate.spec.js
@@ -176,8 +176,9 @@ describe('workers/repository/updates/generate', () => {
             'to {{#if isMajor}}v{{newMajor}}{{else}}{{#unless isRange}}v{{/unless}}{{newValue}}{{/if}}',
           lazyGrouping: true,
           isDigest: true,
+          currentDigest: 'abcdefghijklmnopqrstuvwxyz',
+          newDigest: '123abcdefghijklmnopqrstuvwxyz',
           foo: 1,
-          newValue: 'abcdef',
           group: {
             foo: 2,
           },
@@ -444,7 +445,7 @@ describe('workers/repository/updates/generate', () => {
           branchName: 'some-branch',
           prTitle: 'some-title',
           lazyGrouping: true,
-          newValue: '0.5.7',
+          currentValue: '0.5.7',
           group: {},
         },
         {
-- 
GitLab