Skip to content

Commit 2235650

Browse files
authored
Preserve comments on versioned fields and Rename "REMOVED" to "DEPRECATED" in reports (opensearch-project#355)
* Preserve comments on versioned fields and Rename "REMOVED" to "DEPRECATED" in reports Signed-off-by: xil <fridalu66@gmail.com> * update changelog Signed-off-by: xil <fridalu66@gmail.com> --------- Signed-off-by: xil <fridalu66@gmail.com> Signed-off-by: Xi Lu <fridalu66@gmail.com>
1 parent 8a95ed2 commit 2235650

5 files changed

Lines changed: 35 additions & 11 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
1010

1111
### Changed
1212
- Fix enum value annotations not being preserved ([#353](https://github.com/opensearch-project/opensearch-protobufs/pull/353))
13+
- Preserve comments on versioned fields and Rename "REMOVED" to "DEPRECATED" in reports ([#355](https://github.com/opensearch-project/opensearch-protobufs/pull/355))
1314
- Updates the backward compatibility report workflow to compare against the latest proto files ([#356](https://github.com/opensearch-project/opensearch-protobufs/pull/356))
1415
### Removed
1516

tools/proto-convert/src/postprocessing/CompatibilityMerger.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ function mergeField(
100100
return { ...upcomingField, name: sourceField.name, number: sourceField.number };
101101
} else {
102102
const newName = `${baseName}_${getFieldVersion(sourceField.name) + 1}`;
103-
upcomingMap.set(newName, { ...upcomingField, name: newName });
103+
upcomingMap.set(newName, { ...upcomingField, name: newName, comment: sourceField.comment });
104104

105105
reporter?.addFieldChange({
106106
messageName: msgName,
@@ -116,7 +116,7 @@ function mergeField(
116116
} else {
117117
reporter?.addFieldChange({
118118
messageName: msgName,
119-
changeType: 'REMOVED',
119+
changeType: 'DEPRECATED',
120120
fieldName: sourceField.name,
121121
existingType: formatField({ ...sourceField, number: sourceField.number, deprecated: true })
122122
});

tools/proto-convert/src/postprocessing/CompatibilityReporter.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { tmpdir } from 'os';
77
* Tracks: added, removed, type_changed, optional_change, oneof_change.
88
*/
99

10-
export type ChangeType = 'ADDED' | 'REMOVED' | 'TYPE CHANGED' | 'OPTIONAL CHANGE' | 'ONEOF CHANGE';
10+
export type ChangeType = 'ADDED' | 'DEPRECATED' | 'TYPE CHANGED' | 'OPTIONAL CHANGE' | 'ONEOF CHANGE';
1111

1212
/** Format a field for report display */
1313
export function formatField(f: { name: string; type: string; modifier?: string; number?: number; deprecated?: boolean }): string {
@@ -153,7 +153,7 @@ export class CompatibilityReporter {
153153
switch (c.changeType) {
154154
case 'ADDED':
155155
return `\`${c.incomingType}\``;
156-
case 'REMOVED':
156+
case 'DEPRECATED':
157157
return `\`${c.existingType}\``;
158158
case 'OPTIONAL CHANGE':
159159
return `\`${c.existingType}\` → \`${c.incomingType}\``;
@@ -164,12 +164,12 @@ export class CompatibilityReporter {
164164
}
165165
}
166166

167-
private formatChangeType(changeType: ChangeType | 'ADDED' | 'REMOVED'): string {
167+
private formatChangeType(changeType: ChangeType | 'ADDED' | 'DEPRECATED'): string {
168168
switch (changeType) {
169169
case 'ADDED':
170170
return '➕ **ADDED**';
171-
case 'REMOVED':
172-
return '🗑️ **REMOVED**';
171+
case 'DEPRECATED':
172+
return '🗑️ **DEPRECATED**';
173173
case 'OPTIONAL CHANGE':
174174
return '🚨 **BREAKING**';
175175
case 'ONEOF CHANGE':

tools/proto-convert/test/postprocessing/CompatibilityMerger.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,29 @@ describe('mergeMessage', () => {
204204
expect(result.fields[1].name).toBe('data_2');
205205
expect(result.fields[1].type).toBe('NewType');
206206
});
207+
208+
it('should preserve comment on versioned field when type changes', () => {
209+
const source: ProtoMessage = {
210+
name: 'TestMessage',
211+
fields: [{
212+
name: 'data',
213+
type: 'string',
214+
number: 1,
215+
comment: 'This is a field description'
216+
}]
217+
};
218+
const upcoming: ProtoMessage = {
219+
name: 'TestMessage',
220+
fields: [field('data', 'int32', 1)]
221+
};
222+
223+
const result = mergeMessage(source, upcoming);
224+
225+
// New versioned field should have the source comment
226+
const versionedField = result.fields.find(f => f.name === 'data_2');
227+
expect(versionedField).toBeDefined();
228+
expect(versionedField!.comment).toBe('This is a field description');
229+
});
207230
});
208231

209232
describe('deprecated fields', () => {

tools/proto-convert/test/postprocessing/CompatibilityReporter.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,13 @@ describe('CompatibilityReporter', () => {
6868
it('should format removed field change', () => {
6969
reporter.addFieldChange({
7070
messageName: 'TestMessage',
71-
changeType: 'REMOVED',
71+
changeType: 'DEPRECATED',
7272
fieldName: 'oldField',
7373
existingType: 'int32 oldField'
7474
});
7575

7676
const md = reporter.toMarkdown();
77-
expect(md).toContain('🗑️ **REMOVED**');
77+
expect(md).toContain('🗑️ **DEPRECATED**');
7878
expect(md).toContain('`int32 oldField`');
7979
});
8080

@@ -180,15 +180,15 @@ describe('CompatibilityReporter', () => {
180180
});
181181
reporter.addFieldChange({
182182
messageName: 'MessageA',
183-
changeType: 'REMOVED',
183+
changeType: 'DEPRECATED',
184184
fieldName: 'field3',
185185
existingType: 'bool field3'
186186
});
187187

188188
const md = reporter.toMarkdown();
189189
expect(md).toContain('| MessageA | ➕ **ADDED** |');
190190
expect(md).toContain('| MessageB | ➕ **ADDED** |');
191-
expect(md).toContain('| MessageA | 🗑️ **REMOVED** |');
191+
expect(md).toContain('| MessageA | 🗑️ **DEPRECATED** |');
192192
});
193193
});
194194

0 commit comments

Comments
 (0)