Skip to content

Commit c5c3974

Browse files
committed
Validate custom URL template string once, not once per line
Fixes #26 Test Plan: Made `getTemplate` return null, then triggered blame. Before this change one error would appear for every line. After this change, a single error appears.
1 parent 7b339dc commit c5c3974

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

lib/controllers/blameViewController.js

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const $ = require('atom').$;
22
const React = require('atom').React;
33
const BlameListView = require('../views/blame-list-view');
44
const RemoteRevision = require('../util/RemoteRevision');
5+
const errorController = require('./errorController');
56

67

78
/**
@@ -15,12 +16,18 @@ const RemoteRevision = require('../util/RemoteRevision');
1516
function toggleBlame(projectBlamer) {
1617
var editorView = atom.workspaceView.getActiveView();
1718
var editor = editorView.getEditor();
19+
var filePath = editor.getPath();
1820

1921
if (!editorView.blameView) {
20-
var filePath = atom.workspace.activePaneItem.getPath();
2122
var remoteUrl = projectBlamer.repo.getOriginUrl(filePath);
22-
var remoteRevision = RemoteRevision.create(remoteUrl);
23-
// TODO: validate the RemoteRevision here
23+
var remoteRevision;
24+
try {
25+
remoteRevision = RemoteRevision.create(remoteUrl);
26+
} catch (e) {
27+
// the only exception possible occurs when the template string is invalid
28+
errorController.showError('error-no-custom-url-specified');
29+
return;
30+
}
2431

2532
// insert the BlameListView after the gutter div
2633
var mountPoint = $('<div>', {'class': 'git-blame-mount'});
@@ -29,7 +36,7 @@ function toggleBlame(projectBlamer) {
2936
editorView.blameView = React.renderComponent(new BlameListView({
3037
projectBlamer: projectBlamer,
3138
remoteRevision: remoteRevision,
32-
filePath: editor.getPath(),
39+
filePath: filePath,
3340
lineCount: editor.getLineCount(),
3441
scrollbar: editorView.find('.vertical-scrollbar')
3542
}), mountPoint[0]);

lib/util/RemoteRevision.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@ function RemoteRevision(remote) {
1313
// ================
1414

1515
RemoteRevision.create = function(remoteUrl) {
16-
return new RemoteRevision(remoteUrl);
17-
}
16+
var rr = new RemoteRevision(remoteUrl);
17+
if (!rr.getTemplate()) {
18+
throw "Cannot create RemoteRevision with invalid template";
19+
}
20+
return rr;
21+
};
1822

1923
// ================
2024
// Instance Methods
@@ -35,10 +39,9 @@ _.extend(RemoteRevision.prototype, {
3539

3640
url: function(revision) {
3741
var template = this.getTemplate();
38-
3942
if (!template) {
40-
errorController.showError('error-no-custom-url-specified');
41-
return;
43+
// this should be impossible, so throw
44+
throw "No template present in RemoteRevision";
4245
}
4346

4447
// create data object used to render template string
@@ -47,6 +50,7 @@ _.extend(RemoteRevision.prototype, {
4750

4851
// ensure we have all the correct vars in the template data
4952
if (!this.verifyTemplateData(data)) {
53+
// TODO: validate this upon creation
5054
errorController.showError('error-problem-parsing-data-from-remote');
5155
return;
5256
}

0 commit comments

Comments
 (0)