Skip to content

Commit

Permalink
fix: calculate if parent exists, return path to be calculated
Browse files Browse the repository at this point in the history
  • Loading branch information
WillieRuemmele committed Sep 30, 2024
1 parent 5bd2aa1 commit fe47374
Show file tree
Hide file tree
Showing 6 changed files with 369 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/convert/transformers/decomposedMetadataTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -213,14 +213,14 @@ export const getWriteInfosWithoutMerge =
(defaultDirectory: string | undefined) =>
(parentXmlObject: XmlObj) =>
(component: SourceComponent): WriteInfo[] => {
const output = join(defaultDirectory ?? '', getOutputFile(component));
const output = getOutputFile(component);
// if the parent would be empty
// and it exists
// and every child is addressable
// don't overwrite the existing parent
if (
!objectHasSomeRealValues(component.type)(parentXmlObject) &&
fs.existsSync(output) &&
fs.existsSync(join(defaultDirectory ?? '', output)) &&
Object.values(component.type.children ?? {}).every((child) => !child.isAddressable)
) {
return [];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<Layout xmlns="http://soap.sforce.com/2006/04/metadata">
<layoutSections>
<customLabel>false</customLabel>
<detailHeading>false</detailHeading>
<editHeading>true</editHeading>
<label>Information</label>
<layoutColumns>
<layoutItems>
<behavior>Required</behavior>
<field>Name</field>
</layoutItems>
<layoutItems>
<behavior>Edit</behavior>
<field>completion__c</field>
</layoutItems>
<layoutItems>
<behavior>Edit</behavior>
<field>status__c</field>
</layoutItems>
</layoutColumns>
<layoutColumns>
<layoutItems>
<behavior>Edit</behavior>
<field>OwnerId</field>
</layoutItems>
</layoutColumns>
<style>TwoColumnsTopToBottom</style>
</layoutSections>
<layoutSections>
<customLabel>false</customLabel>
<detailHeading>false</detailHeading>
<editHeading>true</editHeading>
<label>System Information</label>
<layoutColumns>
<layoutItems>
<behavior>Readonly</behavior>
<field>CreatedById</field>
</layoutItems>
</layoutColumns>
<layoutColumns>
<layoutItems>
<behavior>Readonly</behavior>
<field>LastModifiedById</field>
</layoutItems>
</layoutColumns>
<style>TwoColumnsTopToBottom</style>
</layoutSections>
<layoutSections>
<customLabel>false</customLabel>
<detailHeading>false</detailHeading>
<editHeading>true</editHeading>
<layoutColumns/>
<layoutColumns/>
<layoutColumns/>
<style>CustomLinks</style>
</layoutSections>
<showEmailCheckbox>false</showEmailCheckbox>
<showHighlightsPanel>false</showHighlightsPanel>
<showInteractionLogPanel>false</showInteractionLogPanel>
<showRunAssignmentRulesCheckbox>false</showRunAssignmentRulesCheckbox>
<showSubmitAndAttachButton>false</showSubmitAndAttachButton>
</Layout>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>completion__c</fullName>
<defaultValue>false</defaultValue>
<label>completion</label>
<trackTrending>false</trackTrending>
<type>Checkbox</type>
</CustomField>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>status__c</fullName>
<label>status</label>
<required>false</required>
<trackTrending>false</trackTrending>
<type>Picklist</type>
<valueSet>
<restricted>true</restricted>
<valueSetDefinition>
<sorted>false</sorted>
<value>
<fullName>done</fullName>
<default>false</default>
<label>done</label>
</value>
<value>
<fullName>in progress</fullName>
<default>false</default>
<label>in progress</label>
</value>
<value>
<fullName>broken</fullName>
<default>false</default>
<label>broken</label>
</value>
</valueSetDefinition>
</valueSet>
</CustomField>
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<actionOverrides>
<actionName>Accept</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Accept</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Accept</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>CancelEdit</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>CancelEdit</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>CancelEdit</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Clone</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Clone</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Clone</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Delete</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Delete</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Delete</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Edit</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Edit</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Edit</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>List</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>List</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>List</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>New</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>New</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>New</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>SaveEdit</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>SaveEdit</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>SaveEdit</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Tab</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Tab</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>Tab</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>View</actionName>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>View</actionName>
<formFactor>Large</formFactor>
<type>Default</type>
</actionOverrides>
<actionOverrides>
<actionName>View</actionName>
<formFactor>Small</formFactor>
<type>Default</type>
</actionOverrides>
<allowInChatterGroups>false</allowInChatterGroups>
<compactLayoutAssignment>SYSTEM</compactLayoutAssignment>
<deploymentStatus>Deployed</deploymentStatus>
<enableActivities>false</enableActivities>
<enableBulkApi>true</enableBulkApi>
<enableFeeds>false</enableFeeds>
<enableHistory>false</enableHistory>
<enableLicensing>false</enableLicensing>
<enableReports>false</enableReports>
<enableSearch>false</enableSearch>
<enableSharing>true</enableSharing>
<enableStreamingApi>true</enableStreamingApi>
<externalSharingModel>Private</externalSharingModel>
<label>test</label>
<nameField>
<label>test Name</label>
<type>Text</type>
</nameField>
<pluralLabel>tests</pluralLabel>
<searchLayouts></searchLayouts>
<sharingModel>ReadWrite</sharingModel>
<visibility>Public</visibility>
</CustomObject>
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,108 @@ describe('a single field in a CustomObject xml does not overwrite (blank) the ex
expect(fs.readdirSync(path.join(pathToBroker, 'fields')).length).to.equal(3);
});

it('will not overwrite .object-meta.xml in package retrieval ', async () => {
const TEST_PACKAGE = 'TestPackage';

const result: MetadataApiRetrieveStatus = {
done: true,
fileProperties: [
{
createdById: '005bm000006BUfFAAW',
createdByName: 'William Ruemmele',
createdDate: '2024-09-30T18:10:44.000Z',
fileName: 'TestPackage/objects/test__c.object',
fullName: 'test__c',
id: '01Ibm000001ZQS5EAO',
lastModifiedById: '005bm000006BUfFAAW',
lastModifiedByName: 'William Ruemmele',
lastModifiedDate: '2024-09-30T18:10:44.000Z',
manageableState: ManageableState.Unmanaged,
type: 'CustomObject',
},
{
createdById: '005bm000006BUfFAAW',
createdByName: 'William Ruemmele',
createdDate: '2024-09-30T18:10:44.000Z',
fileName: 'TestPackage/layouts/test__c-test Layout.layout',
fullName: 'test__c-test Layout',
id: '00hbm000006bcEHAAY',
lastModifiedById: '005bm000006BUfFAAW',
lastModifiedByName: 'William Ruemmele',
lastModifiedDate: '2024-09-30T18:11:30.000Z',
manageableState: ManageableState.Unmanaged,
type: 'Layout',
},
{
createdById: '005bm000006BUfFAAW',
createdByName: 'William Ruemmele',
createdDate: '2024-09-30T18:12:05.000Z',
fileName: 'TestPackage/package.xml',
fullName: 'package',
id: '0A2bm000000eGN7CAM',
lastModifiedById: '005bm000006BUfFAAW',
lastModifiedByName: 'William Ruemmele',
lastModifiedDate: '2024-09-30T18:12:05.000Z',
manageableState: ManageableState.Unmanaged,
type: 'Package',
},
{
createdById: '005bm000006BUfFAAW',
createdByName: 'William Ruemmele',
createdDate: '2024-09-30T19:59:19.089Z',
fileName: 'unpackaged/package.xml',
fullName: 'unpackaged/package.xml',
id: '',
lastModifiedById: '005bm000006BUfFAAW',
lastModifiedByName: 'William Ruemmele',
lastModifiedDate: '2024-09-30T19:59:19.089Z',
manageableState: ManageableState.Unmanaged,
type: 'Package',
},
],
id: '09Sbm000001mg2nEAA',
status: RequestStatus.Succeeded,
success: true,
zipFile:
'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',
messages: [],
};

const retrieve = new MetadataApiRetrieve({
singlePackage: true,
packageOptions: [{ name: TEST_PACKAGE, outputDir: path.join(testDir, TEST_PACKAGE) }],
merge: true,
output: path.join(testDir, TEST_PACKAGE),
usernameOrConnection: 'abc',
});
await retrieve.post(result);
expect(
fs.existsSync(
path.join(testDir, TEST_PACKAGE, 'main', 'default', 'objects', 'test__c', 'test__c.object-meta.xml')
)
).to.be.true;
expect(
fs.existsSync(
path.join(testDir, TEST_PACKAGE, 'main', 'default', 'objects', 'test__c', 'fields', 'status__c.field-meta.xml')
)
).to.be.true;
expect(
fs.existsSync(
path.join(
testDir,
TEST_PACKAGE,
'main',
'default',
'objects',
'test__c',
'fields',
'completion__c.field-meta.xml'
)
)
).to.be.true;
await validateSourceDir(TEST_PACKAGE);
});

it(`verify ${FORCE_APP}`, async () => {
await validateSourceDir(FORCE_APP);
});
Expand Down

2 comments on commit fe47374

@svc-cli-bot
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: fe47374 Previous: 345e9fb Ratio
eda-componentSetCreate-linux 231 ms 242 ms 0.95
eda-sourceToMdapi-linux 2364 ms 2425 ms 0.97
eda-sourceToZip-linux 1887 ms 1977 ms 0.95
eda-mdapiToSource-linux 2881 ms 2981 ms 0.97
lotsOfClasses-componentSetCreate-linux 433 ms 489 ms 0.89
lotsOfClasses-sourceToMdapi-linux 3775 ms 3807 ms 0.99
lotsOfClasses-sourceToZip-linux 3119 ms 3269 ms 0.95
lotsOfClasses-mdapiToSource-linux 3633 ms 3758 ms 0.97
lotsOfClassesOneDir-componentSetCreate-linux 749 ms 775 ms 0.97
lotsOfClassesOneDir-sourceToMdapi-linux 6555 ms 6844 ms 0.96
lotsOfClassesOneDir-sourceToZip-linux 5738 ms 6026 ms 0.95
lotsOfClassesOneDir-mdapiToSource-linux 6588 ms 6796 ms 0.97

This comment was automatically generated by workflow using github-action-benchmark.

@svc-cli-bot
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: fe47374 Previous: 345e9fb Ratio
eda-componentSetCreate-win32 707 ms 606 ms 1.17
eda-sourceToMdapi-win32 4590 ms 4175 ms 1.10
eda-sourceToZip-win32 3231 ms 3008 ms 1.07
eda-mdapiToSource-win32 6205 ms 5635 ms 1.10
lotsOfClasses-componentSetCreate-win32 1327 ms 1184 ms 1.12
lotsOfClasses-sourceToMdapi-win32 7659 ms 7470 ms 1.03
lotsOfClasses-sourceToZip-win32 5091 ms 4899 ms 1.04
lotsOfClasses-mdapiToSource-win32 7772 ms 7618 ms 1.02
lotsOfClassesOneDir-componentSetCreate-win32 2143 ms 2054 ms 1.04
lotsOfClassesOneDir-sourceToMdapi-win32 13872 ms 13572 ms 1.02
lotsOfClassesOneDir-sourceToZip-win32 9415 ms 9259 ms 1.02
lotsOfClassesOneDir-mdapiToSource-win32 14217 ms 13949 ms 1.02

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.