Fix revert case where metadata is above the change ID In cases where there is no blank line above the Change-Id footer, the regex would not match it and clicking the Revert button would trigger an error. Account for this and also add an additional check to ensure the user gets some information if the dialog can’t find the Change-Id footer. Change-Id: Ib191df7c2aaacd8bb2a0bf5b46764d783e6d76aa
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js index b01c6be..0dbefc5 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog.js
@@ -38,8 +38,12 @@ var originalTitle = message.split('\n')[0]; var revertTitle = 'Revert "' + originalTitle + '"'; // Figure out what the revert commit message should be. - var commitRegex = /\n{1,2}\nChange-Id: (\w+)\n/gm; + var commitRegex = /\nChange-Id: (\w+)\n\s*/g; var match = commitRegex.exec(message); + if (!match) { + alert('Unable to find Change-Id in footer of commit message.'); + return; + } var revertCommitText = 'This reverts commit ' + match[1] + '.'; // Add '> ' in front of the original commit text. var originalCommitText = message.replace(/^/gm, '> ');
diff --git a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html index 3e5f0a2..8fa9a48 100644 --- a/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html +++ b/polygerrit-ui/app/elements/change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html
@@ -38,6 +38,14 @@ element = fixture('basic'); }); + test('no match', function() { + assert.isNotOk(element.message); + var alertStub = sinon.stub(window, 'alert'); + element.populateRevertMessage('not a change-id in sight'); + assert.isTrue(alertStub.calledOnce); + alertStub.restore(); + }); + test('single line', function() { assert.isNotOk(element.message); element.populateRevertMessage('one line commit\n\nChange-Id: abcdefg\n'); @@ -63,6 +71,20 @@ assert.equal(element.message, expected); }); + test('issue above change id', function() { + assert.isNotOk(element.message); + element.populateRevertMessage( + 'much lines\nvery\n\ncommit\n\nBug: Issue 42\nChange-Id: abcdefg\n'); + var expected = 'Revert "much lines"\n\n' + + 'This reverts commit abcdefg.\n\n' + + 'Reason for revert: <INSERT REASONING HERE>\n\n' + + 'Original change\'s description:\n' + + '> much lines\n> very\n> \n> commit\n> \n' + + '> Bug: Issue 42\n' + + '> Change-Id: abcdefg\n> '; + assert.equal(element.message, expected); + }); + test('revert a revert', function () { assert.isNotOk(element.message); element.populateRevertMessage(