Merge "Remove diffSide property from UIComment"
This commit is contained in:
@@ -29,6 +29,7 @@ import {html} from '@polymer/polymer/lib/utils/html-tag.js';
|
|||||||
import {TestKeyboardShortcutBinder} from '../../../test/test-utils.js';
|
import {TestKeyboardShortcutBinder} from '../../../test/test-utils.js';
|
||||||
import {Shortcut} from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.js';
|
import {Shortcut} from '../../../mixins/keyboard-shortcut-mixin/keyboard-shortcut-mixin.js';
|
||||||
import {ChangeComments} from '../../diff/gr-comment-api/gr-comment-api.js';
|
import {ChangeComments} from '../../diff/gr-comment-api/gr-comment-api.js';
|
||||||
|
import {createCommentThreads} from '../../../utils/comment-util.js';
|
||||||
|
|
||||||
const commentApiMock = createCommentApiMockWithTemplateElement(
|
const commentApiMock = createCommentApiMockWithTemplateElement(
|
||||||
'gr-file-list-comment-api-mock', html`
|
'gr-file-list-comment-api-mock', html`
|
||||||
@@ -106,8 +107,6 @@ suite('gr-file-list tests', () => {
|
|||||||
// been initialized.
|
// been initialized.
|
||||||
commentApiWrapper.loadComments().then(() => {
|
commentApiWrapper.loadComments().then(() => {
|
||||||
sinon.stub(element.changeComments, 'getPaths').returns({});
|
sinon.stub(element.changeComments, 'getPaths').returns({});
|
||||||
sinon.stub(element.changeComments, 'getCommentsBySideForPath')
|
|
||||||
.returns({meta: {}, left: [], right: []});
|
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
element._loading = false;
|
element._loading = false;
|
||||||
@@ -1527,17 +1526,8 @@ suite('gr-file-list tests', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
async function setupDiff(diff) {
|
async function setupDiff(diff) {
|
||||||
diff.comments = {
|
diff.threads = diff.path === '/COMMIT_MSG' ?
|
||||||
left: diff.path === '/COMMIT_MSG' ? commitMsgComments : [],
|
createCommentThreads(commitMsgComments) : [];
|
||||||
right: [],
|
|
||||||
meta: {
|
|
||||||
changeNum: 1,
|
|
||||||
patchRange: {
|
|
||||||
basePatchNum: 'PARENT',
|
|
||||||
patchNum: 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
diff.prefs = {
|
diff.prefs = {
|
||||||
context: 10,
|
context: 10,
|
||||||
tab_size: 8,
|
tab_size: 8,
|
||||||
@@ -1556,7 +1546,7 @@ suite('gr-file-list tests', () => {
|
|||||||
};
|
};
|
||||||
diff.diff = getMockDiffResponse();
|
diff.diff = getMockDiffResponse();
|
||||||
commentApiWrapper.loadComments().then(() => {
|
commentApiWrapper.loadComments().then(() => {
|
||||||
sinon.stub(element.changeComments, 'getCommentsBySideForPath')
|
sinon.stub(element.changeComments, 'getCommentsForPath')
|
||||||
.withArgs('/COMMIT_MSG', {
|
.withArgs('/COMMIT_MSG', {
|
||||||
basePatchNum: 'PARENT',
|
basePatchNum: 'PARENT',
|
||||||
patchNum: 2,
|
patchNum: 2,
|
||||||
@@ -1608,8 +1598,6 @@ suite('gr-file-list tests', () => {
|
|||||||
// been initialized.
|
// been initialized.
|
||||||
commentApiWrapper.loadComments().then(() => {
|
commentApiWrapper.loadComments().then(() => {
|
||||||
sinon.stub(element.changeComments, 'getPaths').returns({});
|
sinon.stub(element.changeComments, 'getPaths').returns({});
|
||||||
sinon.stub(element.changeComments, 'getCommentsBySideForPath')
|
|
||||||
.returns({meta: {}, left: [], right: []});
|
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
element._loading = false;
|
element._loading = false;
|
||||||
|
|||||||
@@ -18,16 +18,10 @@ import {GestureEventListeners} from '@polymer/polymer/lib/mixins/gesture-event-l
|
|||||||
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
|
import {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin';
|
||||||
import {PolymerElement} from '@polymer/polymer/polymer-element';
|
import {PolymerElement} from '@polymer/polymer/polymer-element';
|
||||||
import {htmlTemplate} from './gr-comment-api_html';
|
import {htmlTemplate} from './gr-comment-api_html';
|
||||||
import {
|
import {patchNumEquals, CURRENT} from '../../../utils/patch-set-util';
|
||||||
getParentIndex,
|
|
||||||
isMergeParent,
|
|
||||||
patchNumEquals,
|
|
||||||
CURRENT,
|
|
||||||
} from '../../../utils/patch-set-util';
|
|
||||||
import {customElement, property} from '@polymer/decorators';
|
import {customElement, property} from '@polymer/decorators';
|
||||||
import {
|
import {
|
||||||
CommentBasics,
|
CommentBasics,
|
||||||
ParentPatchSetNum,
|
|
||||||
PatchRange,
|
PatchRange,
|
||||||
PatchSetNum,
|
PatchSetNum,
|
||||||
PathToRobotCommentsInfoMap,
|
PathToRobotCommentsInfoMap,
|
||||||
@@ -37,7 +31,6 @@ import {
|
|||||||
RevisionId,
|
RevisionId,
|
||||||
} from '../../../types/common';
|
} from '../../../types/common';
|
||||||
import {hasOwnProperty} from '../../../utils/common-util';
|
import {hasOwnProperty} from '../../../utils/common-util';
|
||||||
import {CommentSide, Side} from '../../../constants/constants';
|
|
||||||
import {
|
import {
|
||||||
Comment,
|
Comment,
|
||||||
CommentMap,
|
CommentMap,
|
||||||
@@ -49,6 +42,7 @@ import {
|
|||||||
UIHuman,
|
UIHuman,
|
||||||
UIRobot,
|
UIRobot,
|
||||||
createCommentThreads,
|
createCommentThreads,
|
||||||
|
isInPatchRange,
|
||||||
} from '../../../utils/comment-util';
|
} from '../../../utils/comment-util';
|
||||||
import {PatchSetFile, PatchNumOnly, isPatchSetFile} from '../../../types/types';
|
import {PatchSetFile, PatchNumOnly, isPatchSetFile} from '../../../types/types';
|
||||||
import {appContext} from '../../../services/app-context';
|
import {appContext} from '../../../services/app-context';
|
||||||
@@ -57,11 +51,6 @@ export type CommentIdToCommentThreadMap = {
|
|||||||
[urlEncodedCommentId: string]: CommentThread;
|
[urlEncodedCommentId: string]: CommentThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface TwoSidesComments {
|
|
||||||
left: UIComment[];
|
|
||||||
right: UIComment[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export class ChangeComments {
|
export class ChangeComments {
|
||||||
private readonly _comments: {[path: string]: UIHuman[]};
|
private readonly _comments: {[path: string]: UIHuman[]};
|
||||||
|
|
||||||
@@ -160,7 +149,7 @@ export class ChangeComments {
|
|||||||
if (!patchRange) {
|
if (!patchRange) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return this._isInPatchRange(c, patchRange);
|
return isInPatchRange(c, patchRange);
|
||||||
})
|
})
|
||||||
) {
|
) {
|
||||||
commentMap[path] = true;
|
commentMap[path] = true;
|
||||||
@@ -300,25 +289,11 @@ export class ChangeComments {
|
|||||||
return allDrafts;
|
return allDrafts;
|
||||||
}
|
}
|
||||||
|
|
||||||
_addCommentSide(comments: TwoSidesComments) {
|
|
||||||
const allComments = [];
|
|
||||||
for (const side of [Side.LEFT, Side.RIGHT]) {
|
|
||||||
// This is needed by the threading.
|
|
||||||
for (const comment of comments[side]) {
|
|
||||||
comment.diffSide = side;
|
|
||||||
}
|
|
||||||
allComments.push(...comments[side]);
|
|
||||||
}
|
|
||||||
return allComments;
|
|
||||||
}
|
|
||||||
|
|
||||||
getThreadsBySideForPath(
|
getThreadsBySideForPath(
|
||||||
path: string,
|
path: string,
|
||||||
patchRange: PatchRange
|
patchRange: PatchRange
|
||||||
): CommentThread[] {
|
): CommentThread[] {
|
||||||
return createCommentThreads(
|
return createCommentThreads(this.getCommentsForPath(path, patchRange));
|
||||||
this._addCommentSide(this.getCommentsBySideForPath(path, patchRange))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -331,10 +306,7 @@ export class ChangeComments {
|
|||||||
* @param projectConfig Optional project config object to
|
* @param projectConfig Optional project config object to
|
||||||
* include in the meta sub-object.
|
* include in the meta sub-object.
|
||||||
*/
|
*/
|
||||||
getCommentsBySideForPath(
|
getCommentsForPath(path: string, patchRange: PatchRange): Comment[] {
|
||||||
path: string,
|
|
||||||
patchRange: PatchRange
|
|
||||||
): TwoSidesComments {
|
|
||||||
let comments: Comment[] = [];
|
let comments: Comment[] = [];
|
||||||
let drafts: DraftInfo[] = [];
|
let drafts: DraftInfo[] = [];
|
||||||
let robotComments: RobotCommentInfo[] = [];
|
let robotComments: RobotCommentInfo[] = [];
|
||||||
@@ -352,33 +324,20 @@ export class ChangeComments {
|
|||||||
d.__draft = true;
|
d.__draft = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
const all: Comment[] = comments
|
return comments
|
||||||
.concat(drafts)
|
.concat(drafts)
|
||||||
.concat(robotComments)
|
.concat(robotComments)
|
||||||
|
.filter(c => isInPatchRange(c, patchRange))
|
||||||
.map(c => {
|
.map(c => {
|
||||||
return {...c};
|
return {...c};
|
||||||
});
|
});
|
||||||
|
|
||||||
const baseComments = all.filter(c =>
|
|
||||||
this._isInBaseOfPatchRange(c, patchRange)
|
|
||||||
);
|
|
||||||
const revisionComments = all.filter(c =>
|
|
||||||
this._isInRevisionOfPatchRange(c, patchRange)
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
|
||||||
left: baseComments,
|
|
||||||
right: revisionComments,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getThreadsBySideForFile(
|
getThreadsBySideForFile(
|
||||||
file: PatchSetFile,
|
file: PatchSetFile,
|
||||||
patchRange: PatchRange
|
patchRange: PatchRange
|
||||||
): CommentThread[] {
|
): CommentThread[] {
|
||||||
return createCommentThreads(
|
return createCommentThreads(this.getCommentsForFile(file, patchRange));
|
||||||
this._addCommentSide(this.getCommentsBySideForFile(file, patchRange))
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -393,19 +352,10 @@ export class ChangeComments {
|
|||||||
* @param projectConfig Optional project config object to
|
* @param projectConfig Optional project config object to
|
||||||
* include in the meta sub-object.
|
* include in the meta sub-object.
|
||||||
*/
|
*/
|
||||||
getCommentsBySideForFile(
|
getCommentsForFile(file: PatchSetFile, patchRange: PatchRange): Comment[] {
|
||||||
file: PatchSetFile,
|
const comments = this.getCommentsForPath(file.path, patchRange);
|
||||||
patchRange: PatchRange
|
|
||||||
): TwoSidesComments {
|
|
||||||
const comments = this.getCommentsBySideForPath(file.path, patchRange);
|
|
||||||
if (file.basePath) {
|
if (file.basePath) {
|
||||||
const commentsForBasePath = this.getCommentsBySideForPath(
|
comments.push(...this.getCommentsForPath(file.basePath, patchRange));
|
||||||
file.basePath,
|
|
||||||
patchRange
|
|
||||||
);
|
|
||||||
// merge in the left and right
|
|
||||||
comments.left = comments.left.concat(commentsForBasePath.left);
|
|
||||||
comments.right = comments.right.concat(commentsForBasePath.right);
|
|
||||||
}
|
}
|
||||||
return comments;
|
return comments;
|
||||||
}
|
}
|
||||||
@@ -471,58 +421,6 @@ export class ChangeComments {
|
|||||||
const comments = this._commentObjToArray(this.getAllComments(true));
|
const comments = this._commentObjToArray(this.getAllComments(true));
|
||||||
return createCommentThreads(comments);
|
return createCommentThreads(comments);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the given comment should be included in the base side of the
|
|
||||||
* given patch range.
|
|
||||||
*/
|
|
||||||
_isInBaseOfPatchRange(comment: CommentBasics, range: PatchRange) {
|
|
||||||
// If the base of the patch range is a parent of a merge, and the comment
|
|
||||||
// appears on a specific parent then only show the comment if the parent
|
|
||||||
// index of the comment matches that of the range.
|
|
||||||
if (comment.parent && comment.side === CommentSide.PARENT) {
|
|
||||||
return (
|
|
||||||
isMergeParent(range.basePatchNum) &&
|
|
||||||
comment.parent === getParentIndex(range.basePatchNum)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the base of the range is the parent of the patch:
|
|
||||||
if (
|
|
||||||
range.basePatchNum === ParentPatchSetNum &&
|
|
||||||
comment.side === CommentSide.PARENT &&
|
|
||||||
patchNumEquals(comment.patch_set, range.patchNum)
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// If the base of the range is not the parent of the patch:
|
|
||||||
return (
|
|
||||||
range.basePatchNum !== ParentPatchSetNum &&
|
|
||||||
comment.side !== CommentSide.PARENT &&
|
|
||||||
patchNumEquals(comment.patch_set, range.basePatchNum)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the given comment should be included in the revision side of the
|
|
||||||
* given patch range.
|
|
||||||
*/
|
|
||||||
_isInRevisionOfPatchRange(comment: CommentBasics, range: PatchRange) {
|
|
||||||
return (
|
|
||||||
comment.side !== CommentSide.PARENT &&
|
|
||||||
patchNumEquals(comment.patch_set, range.patchNum)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the given comment should be included in the given patch range.
|
|
||||||
*/
|
|
||||||
_isInPatchRange(comment: CommentBasics, range: PatchRange): boolean {
|
|
||||||
return (
|
|
||||||
this._isInBaseOfPatchRange(comment, range) ||
|
|
||||||
this._isInRevisionOfPatchRange(comment, range)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(TS): move findCommentById out of class
|
// TODO(TS): move findCommentById out of class
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import '../../../test/common-test-setup-karma.js';
|
|||||||
import './gr-comment-api.js';
|
import './gr-comment-api.js';
|
||||||
import {ChangeComments} from './gr-comment-api.js';
|
import {ChangeComments} from './gr-comment-api.js';
|
||||||
import {CommentSide} from '../../../constants/constants.js';
|
import {CommentSide} from '../../../constants/constants.js';
|
||||||
|
import {isInRevisionOfPatchRange, isInBaseOfPatchRange} from '../../../utils/comment-util.js';
|
||||||
|
|
||||||
const basicFixture = fixtureFromElement('gr-comment-api');
|
const basicFixture = fixtureFromElement('gr-comment-api');
|
||||||
|
|
||||||
@@ -146,74 +147,50 @@ suite('gr-comment-api tests', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('_isInBaseOfPatchRange', () => {
|
test('isInBaseOfPatchRange', () => {
|
||||||
const comment = {patch_set: 1};
|
const comment = {patch_set: 1};
|
||||||
const patchRange = {basePatchNum: 1, patchNum: 2};
|
const patchRange = {basePatchNum: 1, patchNum: 2};
|
||||||
assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isTrue(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
|
|
||||||
patchRange.basePatchNum = PARENT;
|
patchRange.basePatchNum = PARENT;
|
||||||
assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isFalse(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
|
|
||||||
comment.side = PARENT;
|
comment.side = PARENT;
|
||||||
assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isFalse(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
|
|
||||||
comment.patch_set = 2;
|
comment.patch_set = 2;
|
||||||
assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isTrue(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
|
|
||||||
patchRange.basePatchNum = -2;
|
patchRange.basePatchNum = -2;
|
||||||
comment.side = PARENT;
|
comment.side = PARENT;
|
||||||
comment.parent = 1;
|
comment.parent = 1;
|
||||||
assert.isFalse(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isFalse(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
|
|
||||||
comment.parent = 2;
|
comment.parent = 2;
|
||||||
assert.isTrue(element._changeComments._isInBaseOfPatchRange(comment,
|
assert.isTrue(isInBaseOfPatchRange(comment,
|
||||||
patchRange));
|
patchRange));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('_isInRevisionOfPatchRange', () => {
|
test('isInRevisionOfPatchRange', () => {
|
||||||
const comment = {patch_set: 123};
|
const comment = {patch_set: 123};
|
||||||
const patchRange = {basePatchNum: 122, patchNum: 124};
|
const patchRange = {basePatchNum: 122, patchNum: 124};
|
||||||
assert.isFalse(element._changeComments._isInRevisionOfPatchRange(
|
assert.isFalse(isInRevisionOfPatchRange(
|
||||||
comment, patchRange));
|
comment, patchRange));
|
||||||
|
|
||||||
patchRange.patchNum = 123;
|
patchRange.patchNum = 123;
|
||||||
assert.isTrue(element._changeComments._isInRevisionOfPatchRange(
|
assert.isTrue(isInRevisionOfPatchRange(
|
||||||
comment, patchRange));
|
comment, patchRange));
|
||||||
|
|
||||||
comment.side = PARENT;
|
comment.side = PARENT;
|
||||||
assert.isFalse(element._changeComments._isInRevisionOfPatchRange(
|
assert.isFalse(isInRevisionOfPatchRange(
|
||||||
comment, patchRange));
|
comment, patchRange));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('_isInPatchRange', () => {
|
|
||||||
const patchRange1 = {basePatchNum: 122, patchNum: 124};
|
|
||||||
const patchRange2 = {basePatchNum: 123, patchNum: 125};
|
|
||||||
const patchRange3 = {basePatchNum: 124, patchNum: 125};
|
|
||||||
|
|
||||||
const isInBasePatchStub = sinon.stub(element._changeComments,
|
|
||||||
'_isInBaseOfPatchRange');
|
|
||||||
const isInRevisionPatchStub = sinon.stub(element._changeComments,
|
|
||||||
'_isInRevisionOfPatchRange');
|
|
||||||
|
|
||||||
isInBasePatchStub.withArgs({}, patchRange1).returns(true);
|
|
||||||
isInBasePatchStub.withArgs({}, patchRange2).returns(false);
|
|
||||||
isInBasePatchStub.withArgs({}, patchRange3).returns(false);
|
|
||||||
|
|
||||||
isInRevisionPatchStub.withArgs({}, patchRange1).returns(false);
|
|
||||||
isInRevisionPatchStub.withArgs({}, patchRange2).returns(true);
|
|
||||||
isInRevisionPatchStub.withArgs({}, patchRange3).returns(false);
|
|
||||||
|
|
||||||
assert.isTrue(element._changeComments._isInPatchRange({}, patchRange1));
|
|
||||||
assert.isTrue(element._changeComments._isInPatchRange({}, patchRange2));
|
|
||||||
assert.isFalse(element._changeComments._isInPatchRange({},
|
|
||||||
patchRange3));
|
|
||||||
});
|
|
||||||
|
|
||||||
suite('comment ranges and paths', () => {
|
suite('comment ranges and paths', () => {
|
||||||
function makeTime(mins) {
|
function makeTime(mins) {
|
||||||
return `2013-02-26 15:0${mins}:43.986000000`;
|
return `2013-02-26 15:0${mins}:43.986000000`;
|
||||||
@@ -349,32 +326,40 @@ suite('gr-comment-api tests', () => {
|
|||||||
assert.property(paths, 'file/four');
|
assert.property(paths, 'file/four');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('getCommentsBySideForPath', () => {
|
test('getCommentsForPath', () => {
|
||||||
const patchRange = {basePatchNum: 1, patchNum: 3};
|
const patchRange = {basePatchNum: 1, patchNum: 3};
|
||||||
let path = 'file/one';
|
let path = 'file/one';
|
||||||
let comments = element._changeComments.getCommentsBySideForPath(path,
|
let comments = element._changeComments.getCommentsForPath(path,
|
||||||
patchRange);
|
patchRange);
|
||||||
assert.equal(comments.left.length, 0);
|
assert.equal(comments.filter(c => isInBaseOfPatchRange(c, patchRange))
|
||||||
assert.equal(comments.right.length, 0);
|
.length, 0);
|
||||||
|
assert.equal(comments.filter(c => isInRevisionOfPatchRange(c,
|
||||||
|
patchRange)).length, 0);
|
||||||
|
|
||||||
path = 'file/two';
|
path = 'file/two';
|
||||||
comments = element._changeComments.getCommentsBySideForPath(path,
|
comments = element._changeComments.getCommentsForPath(path,
|
||||||
patchRange);
|
patchRange);
|
||||||
assert.equal(comments.left.length, 0);
|
assert.equal(comments.filter(c => isInBaseOfPatchRange(c, patchRange))
|
||||||
assert.equal(comments.right.length, 2);
|
.length, 0);
|
||||||
|
assert.equal(comments.filter(c => isInRevisionOfPatchRange(c,
|
||||||
|
patchRange)).length, 2);
|
||||||
|
|
||||||
patchRange.basePatchNum = 2;
|
patchRange.basePatchNum = 2;
|
||||||
comments = element._changeComments.getCommentsBySideForPath(path,
|
comments = element._changeComments.getCommentsForPath(path,
|
||||||
patchRange);
|
patchRange);
|
||||||
assert.equal(comments.left.length, 1);
|
assert.equal(comments.filter(c => isInBaseOfPatchRange(c,
|
||||||
assert.equal(comments.right.length, 2);
|
patchRange)).length, 1);
|
||||||
|
assert.equal(comments.filter(c => isInRevisionOfPatchRange(c,
|
||||||
|
patchRange)).length, 2);
|
||||||
|
|
||||||
patchRange.basePatchNum = PARENT;
|
patchRange.basePatchNum = PARENT;
|
||||||
path = 'file/three';
|
path = 'file/three';
|
||||||
comments = element._changeComments.getCommentsBySideForPath(path,
|
comments = element._changeComments.getCommentsForPath(path,
|
||||||
patchRange);
|
patchRange);
|
||||||
assert.equal(comments.left.length, 0);
|
assert.equal(comments.filter(c => isInBaseOfPatchRange(c, patchRange))
|
||||||
assert.equal(comments.right.length, 1);
|
.length, 0);
|
||||||
|
assert.equal(comments.filter(c => isInRevisionOfPatchRange(c,
|
||||||
|
patchRange)).length, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('getAllCommentsForPath', () => {
|
test('getAllCommentsForPath', () => {
|
||||||
@@ -539,7 +524,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
path: 'file/one',
|
path: 'file/one',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: 'PARENT',
|
commentSide: 'PARENT',
|
||||||
patchNum: 2,
|
patchNum: 2,
|
||||||
path: 'file/one',
|
path: 'file/one',
|
||||||
@@ -566,7 +550,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
path: 'file/one',
|
path: 'file/one',
|
||||||
line: 2,
|
line: 2,
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.PARENT,
|
commentSide: CommentSide.PARENT,
|
||||||
rootId: '03',
|
rootId: '03',
|
||||||
}, {
|
}, {
|
||||||
@@ -602,7 +585,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 1,
|
line: 1,
|
||||||
rootId: '04',
|
rootId: '04',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -619,7 +601,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 2,
|
line: 2,
|
||||||
rootId: '05',
|
rootId: '05',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -636,7 +617,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 2,
|
line: 2,
|
||||||
rootId: '06',
|
rootId: '06',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -666,7 +646,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 1,
|
line: 1,
|
||||||
rootId: '07',
|
rootId: '07',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
{
|
{
|
||||||
@@ -682,7 +661,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 1,
|
line: 1,
|
||||||
rootId: '09',
|
rootId: '09',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -701,7 +679,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
line: 1,
|
line: 1,
|
||||||
rootId: '10',
|
rootId: '10',
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
{
|
{
|
||||||
@@ -717,7 +694,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
path: 'file/four',
|
path: 'file/four',
|
||||||
line: 1,
|
line: 1,
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -735,7 +711,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
path: 'file/two',
|
path: 'file/two',
|
||||||
line: 1,
|
line: 1,
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
commentSide: CommentSide.REVISION,
|
commentSide: CommentSide.REVISION,
|
||||||
}, {
|
}, {
|
||||||
comments: [
|
comments: [
|
||||||
@@ -755,7 +730,6 @@ suite('gr-comment-api tests', () => {
|
|||||||
path: 'file/one',
|
path: 'file/one',
|
||||||
line: 1,
|
line: 1,
|
||||||
range: undefined,
|
range: undefined,
|
||||||
diffSide: undefined,
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const threads = element._changeComments.getAllThreadsForChange();
|
const threads = element._changeComments.getAllThreadsForChange();
|
||||||
|
|||||||
@@ -973,14 +973,12 @@ suite('gr-diff-host tests', () => {
|
|||||||
message: 'i like you, jack',
|
message: 'i like you, jack',
|
||||||
updated: '2015-12-23 15:00:20.396000000',
|
updated: '2015-12-23 15:00:20.396000000',
|
||||||
line: 1,
|
line: 1,
|
||||||
diffSide: Side.LEFT,
|
|
||||||
patch_set: 1,
|
patch_set: 1,
|
||||||
path: 'some/path',
|
path: 'some/path',
|
||||||
}, {
|
}, {
|
||||||
id: 'jacks_reply',
|
id: 'jacks_reply',
|
||||||
message: 'i like you, too',
|
message: 'i like you, too',
|
||||||
updated: '2015-12-24 15:01:20.396000000',
|
updated: '2015-12-24 15:01:20.396000000',
|
||||||
diffSide: Side.LEFT,
|
|
||||||
line: 1,
|
line: 1,
|
||||||
in_reply_to: 'sallys_confession',
|
in_reply_to: 'sallys_confession',
|
||||||
patch_set: 1,
|
patch_set: 1,
|
||||||
@@ -989,7 +987,6 @@ suite('gr-diff-host tests', () => {
|
|||||||
{
|
{
|
||||||
id: 'new_draft',
|
id: 'new_draft',
|
||||||
message: 'i do not like either of you',
|
message: 'i do not like either of you',
|
||||||
diffSide: Side.LEFT,
|
|
||||||
__draft: true,
|
__draft: true,
|
||||||
updated: '2015-12-20 15:01:20.396000000',
|
updated: '2015-12-20 15:01:20.396000000',
|
||||||
patch_set: 1,
|
patch_set: 1,
|
||||||
@@ -997,7 +994,8 @@ suite('gr-diff-host tests', () => {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const actualThreads = createCommentThreads(comments);
|
const actualThreads = createCommentThreads(comments,
|
||||||
|
{basePatchNum: 1, patchNum: 4});
|
||||||
|
|
||||||
assert.equal(actualThreads.length, 2);
|
assert.equal(actualThreads.length, 2);
|
||||||
|
|
||||||
@@ -1015,7 +1013,7 @@ suite('gr-diff-host tests', () => {
|
|||||||
assert.equal(actualThreads[1].line, FILE);
|
assert.equal(actualThreads[1].line, FILE);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('_createThreads inherits patchNum and range', () => {
|
test('_createThreads derives patchNum and range', () => {
|
||||||
const comments = [{
|
const comments = [{
|
||||||
id: 'betsys_confession',
|
id: 'betsys_confession',
|
||||||
message: 'i like you, jack',
|
message: 'i like you, jack',
|
||||||
@@ -1028,7 +1026,6 @@ suite('gr-diff-host tests', () => {
|
|||||||
},
|
},
|
||||||
patch_set: 5,
|
patch_set: 5,
|
||||||
path: '/p',
|
path: '/p',
|
||||||
diffSide: Side.LEFT,
|
|
||||||
line: 1,
|
line: 1,
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@@ -1050,7 +1047,6 @@ suite('gr-diff-host tests', () => {
|
|||||||
end_character: 2,
|
end_character: 2,
|
||||||
},
|
},
|
||||||
patch_set: 5,
|
patch_set: 5,
|
||||||
diffSide: Side.LEFT,
|
|
||||||
line: 1,
|
line: 1,
|
||||||
}],
|
}],
|
||||||
patchNum: 5,
|
patchNum: 5,
|
||||||
@@ -1065,7 +1061,7 @@ suite('gr-diff-host tests', () => {
|
|||||||
];
|
];
|
||||||
|
|
||||||
assert.deepEqual(
|
assert.deepEqual(
|
||||||
createCommentThreads(comments),
|
createCommentThreads(comments, {basePatchNum: 5, patchNum: 10}),
|
||||||
expectedThreads);
|
expectedThreads);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ import {hasOwnProperty} from '../../../utils/common-util';
|
|||||||
import {GrApplyFixDialog} from '../gr-apply-fix-dialog/gr-apply-fix-dialog';
|
import {GrApplyFixDialog} from '../gr-apply-fix-dialog/gr-apply-fix-dialog';
|
||||||
import {LineOfInterest} from '../gr-diff/gr-diff';
|
import {LineOfInterest} from '../gr-diff/gr-diff';
|
||||||
import {RevisionInfo as RevisionInfoObj} from '../../shared/revision-info/revision-info';
|
import {RevisionInfo as RevisionInfoObj} from '../../shared/revision-info/revision-info';
|
||||||
import {CommentMap} from '../../../utils/comment-util';
|
import {CommentMap, isInBaseOfPatchRange} from '../../../utils/comment-util';
|
||||||
import {AppElementParams} from '../../gr-app-types';
|
import {AppElementParams} from '../../gr-app-types';
|
||||||
import {CustomKeyboardEvent, OpenFixPreviewEvent} from '../../../types/events';
|
import {CustomKeyboardEvent, OpenFixPreviewEvent} from '../../../types/events';
|
||||||
import {PORTING_COMMENTS_DIFF_LATENCY_LABEL} from '../../../services/gr-reporting/gr-reporting';
|
import {PORTING_COMMENTS_DIFF_LATENCY_LABEL} from '../../../services/gr-reporting/gr-reporting';
|
||||||
@@ -973,7 +973,7 @@ export class GrDiffView extends KeyboardShortcutMixin(
|
|||||||
patchNum: latestPatchNum,
|
patchNum: latestPatchNum,
|
||||||
basePatchNum: ParentPatchSetNum,
|
basePatchNum: ParentPatchSetNum,
|
||||||
};
|
};
|
||||||
leftSide = comment.diffSide === Side.LEFT;
|
leftSide = isInBaseOfPatchRange(comment, this._patchRange);
|
||||||
} else {
|
} else {
|
||||||
this._patchRange = {
|
this._patchRange = {
|
||||||
patchNum: latestPatchNum,
|
patchNum: latestPatchNum,
|
||||||
|
|||||||
@@ -507,7 +507,6 @@ export class GrCommentThread extends KeyboardShortcutMixin(
|
|||||||
if (rootComment.patch_set !== undefined)
|
if (rootComment.patch_set !== undefined)
|
||||||
d.patch_set = rootComment.patch_set;
|
d.patch_set = rootComment.patch_set;
|
||||||
if (rootComment.side !== undefined) d.side = rootComment.side;
|
if (rootComment.side !== undefined) d.side = rootComment.side;
|
||||||
if (rootComment.diffSide !== undefined) d.diffSide = rootComment.diffSide;
|
|
||||||
if (rootComment.line !== undefined) d.line = rootComment.line;
|
if (rootComment.line !== undefined) d.line = rootComment.line;
|
||||||
if (rootComment.range !== undefined) d.range = rootComment.range;
|
if (rootComment.range !== undefined) d.range = rootComment.range;
|
||||||
if (rootComment.parent !== undefined) d.parent = rootComment.parent;
|
if (rootComment.parent !== undefined) d.parent = rootComment.parent;
|
||||||
@@ -516,7 +515,6 @@ export class GrCommentThread extends KeyboardShortcutMixin(
|
|||||||
d.path = this.path;
|
d.path = this.path;
|
||||||
d.patch_set = this.patchNum;
|
d.patch_set = this.patchNum;
|
||||||
d.side = this._getSide(this.isOnParent);
|
d.side = this._getSide(this.isOnParent);
|
||||||
d.diffSide = this.diffSide;
|
|
||||||
|
|
||||||
if (lineNum && lineNum !== FILE) {
|
if (lineNum && lineNum !== FILE) {
|
||||||
d.line = lineNum;
|
d.line = lineNum;
|
||||||
|
|||||||
@@ -117,7 +117,6 @@ export const htmlTemplate = html`
|
|||||||
draft="[[_isDraft(comment)]]"
|
draft="[[_isDraft(comment)]]"
|
||||||
show-actions="[[_showActions]]"
|
show-actions="[[_showActions]]"
|
||||||
show-patchset="[[showPatchset]]"
|
show-patchset="[[showPatchset]]"
|
||||||
diff-side="[[comment.diffSide]]"
|
|
||||||
side="[[comment.side]]"
|
side="[[comment.side]]"
|
||||||
project-config="[[_projectConfig]]"
|
project-config="[[_projectConfig]]"
|
||||||
on-create-fix-comment="_handleCommentFix"
|
on-create-fix-comment="_handleCommentFix"
|
||||||
|
|||||||
@@ -348,7 +348,6 @@ suite('comment action tests with unresolved thread', () => {
|
|||||||
path: '/path/to/file.txt',
|
path: '/path/to/file.txt',
|
||||||
unresolved: true,
|
unresolved: true,
|
||||||
patch_set: 3 as PatchSetNum,
|
patch_set: 3 as PatchSetNum,
|
||||||
diffSide: Side.LEFT,
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
flush();
|
flush();
|
||||||
@@ -833,7 +832,6 @@ suite('comment action tests with unresolved thread', () => {
|
|||||||
|
|
||||||
test('_newDraft with root', () => {
|
test('_newDraft with root', () => {
|
||||||
const draft = element._newDraft();
|
const draft = element._newDraft();
|
||||||
assert.equal(draft.diffSide, Side.LEFT);
|
|
||||||
assert.equal(draft.patch_set, 3 as PatchSetNum);
|
assert.equal(draft.patch_set, 3 as PatchSetNum);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -842,7 +840,6 @@ suite('comment action tests with unresolved thread', () => {
|
|||||||
element.diffSide = Side.RIGHT;
|
element.diffSide = Side.RIGHT;
|
||||||
element.patchNum = 2 as PatchSetNum;
|
element.patchNum = 2 as PatchSetNum;
|
||||||
const draft = element._newDraft();
|
const draft = element._newDraft();
|
||||||
assert.equal(draft.diffSide, Side.RIGHT);
|
|
||||||
assert.equal(draft.patch_set, 2 as PatchSetNum);
|
assert.equal(draft.patch_set, 2 as PatchSetNum);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ import {
|
|||||||
import {GrButton} from '../gr-button/gr-button';
|
import {GrButton} from '../gr-button/gr-button';
|
||||||
import {GrConfirmDeleteCommentDialog} from '../gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog';
|
import {GrConfirmDeleteCommentDialog} from '../gr-confirm-delete-comment-dialog/gr-confirm-delete-comment-dialog';
|
||||||
import {GrDialog} from '../gr-dialog/gr-dialog';
|
import {GrDialog} from '../gr-dialog/gr-dialog';
|
||||||
import {Side} from '../../../constants/constants';
|
|
||||||
import {
|
import {
|
||||||
isDraft,
|
isDraft,
|
||||||
UIComment,
|
UIComment,
|
||||||
@@ -217,9 +216,6 @@ export class GrComment extends KeyboardShortcutMixin(
|
|||||||
@property({type: String, observer: '_messageTextChanged'})
|
@property({type: String, observer: '_messageTextChanged'})
|
||||||
_messageText = '';
|
_messageText = '';
|
||||||
|
|
||||||
@property({type: String})
|
|
||||||
diffSide?: Side;
|
|
||||||
|
|
||||||
@property({type: String})
|
@property({type: String})
|
||||||
side?: string;
|
side?: string;
|
||||||
|
|
||||||
@@ -449,7 +445,6 @@ export class GrComment extends KeyboardShortcutMixin(
|
|||||||
if (this.comment?.__draftID) {
|
if (this.comment?.__draftID) {
|
||||||
resComment.__draftID = this.comment.__draftID;
|
resComment.__draftID = this.comment.__draftID;
|
||||||
}
|
}
|
||||||
resComment.diffSide = this.diffSide;
|
|
||||||
this.comment = resComment;
|
this.comment = resComment;
|
||||||
this._fireSave();
|
this._fireSave();
|
||||||
return obj;
|
return obj;
|
||||||
|
|||||||
@@ -910,7 +910,6 @@ suite('gr-comment tests', () => {
|
|||||||
|
|
||||||
assert.deepEqual(dispatchEventStub.lastCall.args[0].detail, {
|
assert.deepEqual(dispatchEventStub.lastCall.args[0].detail, {
|
||||||
comment: {
|
comment: {
|
||||||
diffSide: Side.RIGHT,
|
|
||||||
__draft: true,
|
__draft: true,
|
||||||
__draftID: 'temp_draft_id',
|
__draftID: 'temp_draft_id',
|
||||||
id: 'baf0414d_40572e03',
|
id: 'baf0414d_40572e03',
|
||||||
|
|||||||
@@ -22,11 +22,14 @@ import {
|
|||||||
Timestamp,
|
Timestamp,
|
||||||
UrlEncodedCommentId,
|
UrlEncodedCommentId,
|
||||||
CommentRange,
|
CommentRange,
|
||||||
|
PatchRange,
|
||||||
|
ParentPatchSetNum,
|
||||||
} from '../types/common';
|
} from '../types/common';
|
||||||
import {CommentSide, Side} from '../constants/constants';
|
import {CommentSide, Side} from '../constants/constants';
|
||||||
import {parseDate} from './date-util';
|
import {parseDate} from './date-util';
|
||||||
import {LineNumber} from '../elements/diff/gr-diff/gr-diff-line';
|
import {LineNumber} from '../elements/diff/gr-diff/gr-diff-line';
|
||||||
import {CommentIdToCommentThreadMap} from '../elements/diff/gr-comment-api/gr-comment-api';
|
import {CommentIdToCommentThreadMap} from '../elements/diff/gr-comment-api/gr-comment-api';
|
||||||
|
import {isMergeParent, getParentIndex, patchNumEquals} from './patch-set-util';
|
||||||
|
|
||||||
export interface DraftCommentProps {
|
export interface DraftCommentProps {
|
||||||
__draft?: boolean;
|
__draft?: boolean;
|
||||||
@@ -42,9 +45,6 @@ export type DraftInfo = CommentBasics & DraftCommentProps;
|
|||||||
export type Comment = DraftInfo | CommentInfo | RobotCommentInfo;
|
export type Comment = DraftInfo | CommentInfo | RobotCommentInfo;
|
||||||
|
|
||||||
export interface UIStateCommentProps {
|
export interface UIStateCommentProps {
|
||||||
// diffSide is used by gr-diff to decide which side(left/right) to show
|
|
||||||
// the comment
|
|
||||||
diffSide?: Side;
|
|
||||||
collapsed?: boolean;
|
collapsed?: boolean;
|
||||||
// TODO(TS): Consider allowing this only for drafts.
|
// TODO(TS): Consider allowing this only for drafts.
|
||||||
__editing?: boolean;
|
__editing?: boolean;
|
||||||
@@ -97,7 +97,10 @@ export function sortComments<T extends SortableComment>(comments: T[]): T[] {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createCommentThreads(comments: UIComment[]) {
|
export function createCommentThreads(
|
||||||
|
comments: UIComment[],
|
||||||
|
patchRange?: PatchRange
|
||||||
|
) {
|
||||||
const sortedComments = sortComments(comments);
|
const sortedComments = sortComments(comments);
|
||||||
const threads: CommentThread[] = [];
|
const threads: CommentThread[] = [];
|
||||||
const idThreadMap: CommentIdToCommentThreadMap = {};
|
const idThreadMap: CommentIdToCommentThreadMap = {};
|
||||||
@@ -126,8 +129,14 @@ export function createCommentThreads(comments: UIComment[]) {
|
|||||||
line: comment.line,
|
line: comment.line,
|
||||||
range: comment.range,
|
range: comment.range,
|
||||||
rootId: comment.id,
|
rootId: comment.id,
|
||||||
diffSide: comment.diffSide,
|
|
||||||
};
|
};
|
||||||
|
if (patchRange) {
|
||||||
|
if (isInBaseOfPatchRange(comment, patchRange))
|
||||||
|
newThread.diffSide = Side.LEFT;
|
||||||
|
else if (isInRevisionOfPatchRange(comment, patchRange))
|
||||||
|
newThread.diffSide = Side.RIGHT;
|
||||||
|
else throw new Error('comment does not belong in given patchrange');
|
||||||
|
}
|
||||||
if (!comment.line && !comment.range) {
|
if (!comment.line && !comment.range) {
|
||||||
newThread.line = 'FILE';
|
newThread.line = 'FILE';
|
||||||
}
|
}
|
||||||
@@ -162,3 +171,64 @@ export function isUnresolved(thread?: CommentThread): boolean {
|
|||||||
export function isDraftThread(thread?: CommentThread): boolean {
|
export function isDraftThread(thread?: CommentThread): boolean {
|
||||||
return isDraft(getLastComment(thread));
|
return isDraft(getLastComment(thread));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the given comment should be included in the base side of the
|
||||||
|
* given patch range.
|
||||||
|
*/
|
||||||
|
export function isInBaseOfPatchRange(
|
||||||
|
comment: CommentBasics,
|
||||||
|
range: PatchRange
|
||||||
|
) {
|
||||||
|
// If the base of the patch range is a parent of a merge, and the comment
|
||||||
|
// appears on a specific parent then only show the comment if the parent
|
||||||
|
// index of the comment matches that of the range.
|
||||||
|
if (comment.parent && comment.side === CommentSide.PARENT) {
|
||||||
|
return (
|
||||||
|
isMergeParent(range.basePatchNum) &&
|
||||||
|
comment.parent === getParentIndex(range.basePatchNum)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the base of the range is the parent of the patch:
|
||||||
|
if (
|
||||||
|
range.basePatchNum === ParentPatchSetNum &&
|
||||||
|
comment.side === CommentSide.PARENT &&
|
||||||
|
patchNumEquals(comment.patch_set, range.patchNum)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// If the base of the range is not the parent of the patch:
|
||||||
|
return (
|
||||||
|
range.basePatchNum !== ParentPatchSetNum &&
|
||||||
|
comment.side !== CommentSide.PARENT &&
|
||||||
|
patchNumEquals(comment.patch_set, range.basePatchNum)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the given comment should be included in the revision side of the
|
||||||
|
* given patch range.
|
||||||
|
*/
|
||||||
|
export function isInRevisionOfPatchRange(
|
||||||
|
comment: CommentBasics,
|
||||||
|
range: PatchRange
|
||||||
|
) {
|
||||||
|
return (
|
||||||
|
comment.side !== CommentSide.PARENT &&
|
||||||
|
patchNumEquals(comment.patch_set, range.patchNum)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the given comment should be included in the given patch range.
|
||||||
|
*/
|
||||||
|
export function isInPatchRange(
|
||||||
|
comment: CommentBasics,
|
||||||
|
range: PatchRange
|
||||||
|
): boolean {
|
||||||
|
return (
|
||||||
|
isInBaseOfPatchRange(comment, range) ||
|
||||||
|
isInRevisionOfPatchRange(comment, range)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user