From f1d7330f2b395d30fc1c8d3b0556a9119f822e8d Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@keylocation.sg>
Date: Tue, 1 Aug 2017 08:49:41 +0200
Subject: [PATCH] fix: Improve PR body fixes for scoped packages (#569)

Escape all scoped package mentions
Escape in group PR bodies too
Remove empty repositoryUrl links
---
 lib/config/templates/default/pr-body.hbs              | 2 +-
 lib/config/templates/group/pr-body.hbs                | 2 +-
 lib/workers/package/index.js                          | 5 ++++-
 lib/workers/pr/index.js                               | 2 +-
 test/workers/package/__snapshots__/index.spec.js.snap | 6 +++---
 5 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/lib/config/templates/default/pr-body.hbs b/lib/config/templates/default/pr-body.hbs
index e438988b59..87691a3566 100644
--- a/lib/config/templates/default/pr-body.hbs
+++ b/lib/config/templates/default/pr-body.hbs
@@ -1,4 +1,4 @@
-This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{depName}}]({{repositoryUrl}}){{else}}`depName`{{/if}} from version `{{currentVersion}}` to `{{newVersion}}`{{#if isRollback}}. This is necessary and important because version `{{currentVersion}}` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
+This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{depName}}]({{repositoryUrl}}){{else}}`{{depName}}`{{/if}} from version `{{currentVersion}}` to `{{newVersion}}`{{#if isRollback}}. This is necessary and important because version `{{currentVersion}}` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
 {{#if releases.length}}
 
 {{#if schedule}}
diff --git a/lib/config/templates/group/pr-body.hbs b/lib/config/templates/group/pr-body.hbs
index c85ec6c522..8b519ead53 100644
--- a/lib/config/templates/group/pr-body.hbs
+++ b/lib/config/templates/group/pr-body.hbs
@@ -5,7 +5,7 @@ This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request renovates the package grou
 {{/if}}
 
 {{#each upgrades as |upgrade|}}
--   [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from `{{upgrade.currentVersion}}` to `{{upgrade.newVersion}}`
+-   {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}`{{depName}}`{{/if}}: from `{{upgrade.currentVersion}}` to `{{upgrade.newVersion}}`
 {{/each}}
 
 {{#unless isPin}}
diff --git a/lib/workers/package/index.js b/lib/workers/package/index.js
index 526e220435..5494ba9500 100644
--- a/lib/workers/package/index.js
+++ b/lib/workers/package/index.js
@@ -50,7 +50,10 @@ async function renovatePackage(config) {
   // Flatten the result on top of config, add repositoryUrl
   return results.map(result => {
     const upg = configParser.mergeChildConfig(config, result);
-    upg.repositoryUrl = npmDep ? npmDep.repositoryUrl : '';
+    upg.repositoryUrl =
+      npmDep && npmDep.repositoryUrl && npmDep.repositoryUrl.length
+        ? npmDep.repositoryUrl
+        : null;
     return configParser.filterConfig(upg, 'branch');
   });
 }
diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js
index c15c0ad228..b34a1a4fde 100644
--- a/lib/workers/pr/index.js
+++ b/lib/workers/pr/index.js
@@ -115,7 +115,7 @@ async function ensurePr(inputConfig, logger, errors, warnings) {
 
   const prTitle = handlebars.compile(config.prTitle)(config);
   let prBodyMarkdown = handlebars.compile(config.prBody)(config);
-  const atUserRe = /@([a-z]+\/[a-z]+)/;
+  const atUserRe = /[^`]@([a-z]+\/[a-z]+)/g;
   prBodyMarkdown = prBodyMarkdown.replace(atUserRe, '@&#8203;$1');
   const prBody = converter.makeHtml(prBodyMarkdown);
 
diff --git a/test/workers/package/__snapshots__/index.spec.js.snap b/test/workers/package/__snapshots__/index.spec.js.snap
index 1eedc003f6..4160c5b53d 100644
--- a/test/workers/package/__snapshots__/index.spec.js.snap
+++ b/test/workers/package/__snapshots__/index.spec.js.snap
@@ -49,7 +49,7 @@ Array [
 {{/if}}
 
 {{#each upgrades as |upgrade|}}
--   [{{upgrade.depName}}]({{upgrade.repositoryUrl}}): from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\`
+-   {{#if repositoryUrl}}[{{upgrade.depName}}]({{upgrade.repositoryUrl}}){{else}}\`{{depName}}\`{{/if}}: from \`{{upgrade.currentVersion}}\` to \`{{upgrade.newVersion}}\`
 {{/each}}
 
 {{#unless isPin}}
@@ -110,7 +110,7 @@ This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](ht
     "labels": Array [],
     "lazyGrouping": true,
     "message": "Failed to look up dependency",
-    "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{depName}}]({{repositoryUrl}}){{else}}\`depName\`{{/if}} from version \`{{currentVersion}}\` to \`{{newVersion}}\`{{#if isRollback}}. This is necessary and important because version \`{{currentVersion}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
+    "prBody": "This {{#if isGitHub}}Pull{{else}}Merge{{/if}} Request {{#if isRollback}}rolls back{{else}}updates{{/if}} dependency {{#if repositoryUrl}}[{{depName}}]({{repositoryUrl}}){{else}}\`{{depName}}\`{{/if}} from version \`{{currentVersion}}\` to \`{{newVersion}}\`{{#if isRollback}}. This is necessary and important because version \`{{currentVersion}}\` cannot be found in the npm registry - probably because of it being unpublished.{{/if}}
 {{#if releases.length}}
 
 {{#if schedule}}
@@ -166,7 +166,7 @@ This {{#if isGitHub}}PR{{else}}MR{{/if}} has been generated by [Renovate Bot](ht
     "rebaseStalePrs": false,
     "recreateClosed": false,
     "repoIsOnboarded": true,
-    "repositoryUrl": "",
+    "repositoryUrl": null,
     "requiredStatusChecks": Array [],
     "reviewers": Array [],
     "schedule": "some schedule",
-- 
GitLab