Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@
"author": "Salesforce",
"bugs": "https://github.com/forcedotcom/cli/issues",
"dependencies": {
"@oclif/core": "^4.2.0",
"@oclif/multi-stage-output": "^0.8.5",
"@oclif/core": "^4.2.6",
"@oclif/multi-stage-output": "^0.8.7",
"@salesforce/apex-node": "^8.1.19",
"@salesforce/core": "^8.8.2",
"@salesforce/kit": "^3.2.3",
"@salesforce/plugin-info": "^3.4.30",
"@salesforce/sf-plugins-core": "^12.1.2",
"@salesforce/source-deploy-retrieve": "^12.14.0",
"@salesforce/source-tracking": "^7.3.10",
"@salesforce/plugin-info": "^3.4.37",
"@salesforce/sf-plugins-core": "^12.1.4",
"@salesforce/source-deploy-retrieve": "12.14.4-csb.0",
"@salesforce/source-tracking": "^7.3.12",
"@salesforce/ts-types": "^2.0.12",
"ansis": "^3.4.0",
"terminal-link": "^3.0.0"
},
"resolutions": {
"@salesforce/source-deploy-retrieve": "12.14.4-csb.0"
},
"devDependencies": {
"@oclif/plugin-command-snapshot": "^5.2.24",
"@salesforce/cli-plugins-testkit": "^5.3.38",
Expand Down
5 changes: 1 addition & 4 deletions src/commands/project/generate/manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,12 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
metadata: arrayWithDeprecation({
char: 'm',
summary: messages.getMessage('flags.metadata.summary'),
exclusive: ['source-dir'],
}),
'source-dir': arrayWithDeprecation({
char: 'p',
aliases: ['sourcepath'],
deprecateAliases: true,
summary: messages.getMessage('flags.source-dir.summary'),
exclusive: ['metadata'],
}),
name: Flags.string({
char: 'n',
Expand Down Expand Up @@ -89,8 +87,7 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
multiple: true,
delimiter: ',',
summary: messages.getMessage('flags.excluded-metadata.summary'),
dependsOn: ['from-org'],
exclusive: ['metadata'],
relationships: [{ type: 'some', flags: ['from-org', 'source-dir'] }],
}),
'from-org': Flags.custom({
summary: messages.getMessage('flags.from-org.summary'),
Expand Down
85 changes: 85 additions & 0 deletions test/nuts/manifest/manifestCreate.nut.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,89 @@ describe('project generate manifest', () => {
expect(manifest2).to.equal(manifest3);
});
});

describe('filtering combinations', () => {
let projectSubDir: string;
before(async () => {
// Add some other directories with apex classes
projectSubDir = join(session.project.dir, 'force-app', 'core');
const projectSubDirClasses = join(projectSubDir, 'classes');
fs.mkdirSync(projectSubDirClasses, { recursive: true });
fs.writeFileSync(join(projectSubDirClasses, 'ManifestCreateNut.cls'), 'empty cls');
fs.writeFileSync(join(projectSubDirClasses, 'ManifestCreateNut.cls-meta.xml'), '<empty cls meta/>');
});

it('should produce a manifest from --source-dir and specific --metadata', () => {
const combo1 = 'srcDirAndMetadata-package.xml';
const forceAppMainDir = join(session.project.dir, 'force-app', 'main');
const result = execCmd<Dictionary>(
`project generate manifest --source-dir ${forceAppMainDir} --metadata ApexClass:FileUtilities --name ${combo1} --json`,
{
ensureExitCode: 0,
}
).jsonOutput?.result;
expect(result).to.be.ok;
expect(result).to.include({ path: combo1, name: combo1 });
const manifestContents = fs.readFileSync(join(session.project.dir, combo1), 'utf-8');
const expectedApexClasses = `<types>
<members>FileUtilities</members>
<name>ApexClass</name>
</types>`;
expect(manifestContents).to.include(expectedApexClasses);
expect(manifestContents).to.not.include('<members>ManifestCreateNut</members>');
expect(manifestContents).to.not.include('<members>PagedResult</members>');
});

it('should produce a manifest from --source-dir and wildcard --metadata', () => {
const combo1 = 'srcDirAndMetadata-package.xml';
const forceAppMainDir = join(session.project.dir, 'force-app', 'main');
const result = execCmd<Dictionary>(
`project generate manifest --source-dir ${forceAppMainDir} --metadata ApexClass --name ${combo1} --json`,
{
ensureExitCode: 0,
}
).jsonOutput?.result;
expect(result).to.be.ok;
expect(result).to.include({ path: combo1, name: combo1 });
const manifestContents = fs.readFileSync(join(session.project.dir, combo1), 'utf-8');
expect(manifestContents).to.not.include('<name>AuraDefinitionBundle</name>');
expect(manifestContents).to.not.include('<members>ManifestCreateNut</members>');
expect(manifestContents).to.include('<members>PagedResult</members>');
});

it('should produce a manifest from --source-dir and specific --excluded-metadata', () => {
const combo3 = 'srcDirAndExcMetadata3-package.xml';
const forceAppMainDir = join(session.project.dir, 'force-app', 'main');
const result = execCmd<Dictionary>(
`project generate manifest --source-dir ${forceAppMainDir} --excluded-metadata ApexClass:FileUtilities --name ${combo3} --json`,
{
ensureExitCode: 0,
}
).jsonOutput?.result;
expect(result).to.be.ok;
expect(result).to.include({ path: combo3, name: combo3 });
const manifestContents = fs.readFileSync(join(session.project.dir, combo3), 'utf-8');
expect(manifestContents).to.not.include('<members>ManifestCreateNut</members>');
expect(manifestContents).to.not.include('<members>FileUtilities</members>');
expect(manifestContents).to.include('<members>PagedResult</members>');
});

it('should produce a manifest from --source-dir and wildcard --excluded-metadata', () => {
const combo4 = 'srcDirAndExcMetadata4-package.xml';
const forceAppMainDir = join(session.project.dir, 'force-app', 'main');
const result = execCmd<Dictionary>(
`project generate manifest --source-dir ${forceAppMainDir} --excluded-metadata ApexClass --name ${combo4} --json`,
{
ensureExitCode: 0,
}
).jsonOutput?.result;
expect(result).to.be.ok;
expect(result).to.include({ path: combo4, name: combo4 });
const manifestContents = fs.readFileSync(join(session.project.dir, combo4), 'utf-8');
expect(manifestContents).to.not.include('<members>ManifestCreateNut</members>');
expect(manifestContents).to.not.include('<members>FileUtilities</members>');
expect(manifestContents).to.not.include('<name>ApexClass</name>');
expect(manifestContents).to.include('<name>AuraDefinitionBundle</name>');
});
});
});
107 changes: 86 additions & 21 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"

"@oclif/core@^4", "@oclif/core@^4.0.27", "@oclif/core@^4.0.34", "@oclif/core@^4.2.0", "@oclif/core@^4.2.3":
"@oclif/core@^4", "@oclif/core@^4.0.27", "@oclif/core@^4.0.34", "@oclif/core@^4.2.0":
version "4.2.4"
resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.4.tgz#0737063beb35e3d421135cd07983bc5306fb17bf"
integrity sha512-JDqdhX6fBbijY3ouubfmX7yFBXy95YSpiAVk0TAaXXCoSqoo/2WMcV2Ufv2V+8zriafPU/rvKgI+ZE07/7HwfQ==
Expand All @@ -1383,10 +1383,34 @@
wordwrap "^1.0.0"
wrap-ansi "^7.0.0"

"@oclif/multi-stage-output@^0.8.5":
version "0.8.5"
resolved "https://registry.yarnpkg.com/@oclif/multi-stage-output/-/multi-stage-output-0.8.5.tgz#5a46f2a0d0718fcc68249f461255d47b756612b9"
integrity sha512-+iv4cK8WRJbLNL5f7gLU+tvqbReDofpG0qNss6tbJDbQUK3YmyEWrE2DnMPi7afJW6iwoG/uOwFRTs+9TpGg1A==
"@oclif/core@^4.2.4", "@oclif/core@^4.2.6":
version "4.2.6"
resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.6.tgz#f2f1696be03a815a4c391504312f90fce29fbb4e"
integrity sha512-agk1Tlm7qMemWx+qq5aNgkYwX2JCkoVP4M0ruFveJrarmdUPbKZTMW1j/eg8lNKZh1sp68ytZyKhYXYEfRPcww==
dependencies:
ansi-escapes "^4.3.2"
ansis "^3.10.0"
clean-stack "^3.0.1"
cli-spinners "^2.9.2"
debug "^4.4.0"
ejs "^3.1.10"
get-package-type "^0.1.0"
globby "^11.1.0"
indent-string "^4.0.0"
is-wsl "^2.2.0"
lilconfig "^3.1.3"
minimatch "^9.0.5"
semver "^7.6.3"
string-width "^4.2.3"
supports-color "^8"
widest-line "^3.1.0"
wordwrap "^1.0.0"
wrap-ansi "^7.0.0"

"@oclif/multi-stage-output@^0.8.7":
version "0.8.7"
resolved "https://registry.yarnpkg.com/@oclif/multi-stage-output/-/multi-stage-output-0.8.7.tgz#2f168202d35efc6d3f4fd04613cd78694939b6d1"
integrity sha512-bXblOjcPsJR7oboNSc4SkYSq85rePqs3uPBTb2JtC7s0RNRfh9HGrbMktr2cV3byoNDv6fz49M/ABQ/G+/LyGg==
dependencies:
"@oclif/core" "^4"
"@types/react" "^18.3.12"
Expand Down Expand Up @@ -1456,6 +1480,21 @@
strip-ansi "^7.1.0"
wrap-ansi "^9.0.0"

"@oclif/table@^0.4.6":
version "0.4.6"
resolved "https://registry.yarnpkg.com/@oclif/table/-/table-0.4.6.tgz#4e07fc11de9b8a3187a5ea43edce71c42811ab7e"
integrity sha512-NXh72vHHYnDrWPmVfh4i7kDydz3CXm/tSAr17fWhmWfMM+8jGn5uo6FXtvB0cd9s4skvDqzoRcsRwOeR73zIKA==
dependencies:
"@types/react" "^18.3.12"
change-case "^5.4.4"
cli-truncate "^4.0.0"
ink "5.0.1"
natural-orderby "^3.0.2"
object-hash "^3.0.0"
react "^18.3.1"
strip-ansi "^7.1.0"
wrap-ansi "^9.0.0"

"@pkgjs/parseargs@^0.11.0":
version "0.11.0"
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
Expand Down Expand Up @@ -1596,10 +1635,10 @@
debug "^4.4.0"
handlebars "^4.7.8"

"@salesforce/plugin-info@^3.4.30":
version "3.4.30"
resolved "https://registry.yarnpkg.com/@salesforce/plugin-info/-/plugin-info-3.4.30.tgz#6a62622c14bba4cd3920bf5951e2caf794957ae7"
integrity sha512-PQ4/6u85epah4w5Y7nC665PCgPTVta17eyB/5noRm0Inu/jzTLMqJnWRa9ZVHbQmWSraZSHt6fO25FWRLL5zHA==
"@salesforce/plugin-info@^3.4.37":
version "3.4.37"
resolved "https://registry.yarnpkg.com/@salesforce/plugin-info/-/plugin-info-3.4.37.tgz#6ce5a2b09d892484983d37feb964ccd35227a9e4"
integrity sha512-ak9owqn5Q1PP+HL9JXZLYJo7ufTOQa1PoYag5HEq5l9oDgWvPbUKlMoEm02dVIzKqoULWvYhoy1CpHq4CQflDg==
dependencies:
"@inquirer/input" "^2.3.0"
"@jsforce/jsforce-node" "^3.6.3"
Expand All @@ -1612,7 +1651,7 @@
marked-terminal "^4.2.0"
open "^10.1.0"
proxy-agent "^6.5.0"
semver "^7.6.3"
semver "^7.7.0"

"@salesforce/prettier-config@^0.0.3":
version "0.0.3"
Expand Down Expand Up @@ -1642,7 +1681,7 @@
string-width "^7.2.0"
terminal-link "^3.0.0"

"@salesforce/sf-plugins-core@^12", "@salesforce/sf-plugins-core@^12.1.2":
"@salesforce/sf-plugins-core@^12":
version "12.1.2"
resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-12.1.2.tgz#0c4fba3787ee670014c8bca447c2fc59fb9c3ec3"
integrity sha512-qrmGZr2mG7uOpqhOpeOJjBEVztM7Mt8B10lD3rG+aOBZQelTm3YQ738yZYcwHjksQW3AOyf0QtqZICCfe0nD8A==
Expand All @@ -1658,10 +1697,26 @@
cli-progress "^3.12.0"
terminal-link "^3.0.0"

"@salesforce/source-deploy-retrieve@^12.10.3", "@salesforce/source-deploy-retrieve@^12.14.0":
version "12.14.0"
resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.14.0.tgz#04036f76301071b2188c92f70d77a138bc0d72cf"
integrity sha512-3WOQCUY0a8cNYx5/NVtaubLEgxo/vHS/7k4Kw/FEZY3ysALpPCqWk2psJQP56xsp/SDAI3lV0VpMZadrL+ryMw==
"@salesforce/sf-plugins-core@^12.1.4":
version "12.1.4"
resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-12.1.4.tgz#c73829c7f12bdc96a2e2746ce7f574a604e8efb4"
integrity sha512-inSWsy9omNc4dIULVpoOJPX6DdEaqkA4CxmzTVrylc7P08jCbsv6LpS79wUaYC7Ah3krBQvbopP4wR9f3XvLeQ==
dependencies:
"@inquirer/confirm" "^3.1.22"
"@inquirer/password" "^2.2.0"
"@oclif/core" "^4.2.4"
"@oclif/table" "^0.4.6"
"@salesforce/core" "^8.5.1"
"@salesforce/kit" "^3.2.3"
"@salesforce/ts-types" "^2.0.12"
ansis "^3.3.2"
cli-progress "^3.12.0"
terminal-link "^3.0.0"

"@salesforce/source-deploy-retrieve@12.14.4-csb.0", "@salesforce/source-deploy-retrieve@^12.10.3", "@salesforce/source-deploy-retrieve@^12.14.1":
version "12.14.4-csb.0"
resolved "https://registry.yarnpkg.com/@salesforce/source-deploy-retrieve/-/source-deploy-retrieve-12.14.4-csb.0.tgz#fc7f72065e761b733954389fa0569699320a6aeb"
integrity sha512-gBB6aVolzzhQopXbqw3tOX/3DQCsCsN62lD4of5yVNRq1DnvjdBxtm8n59oyK64BQHZ/MSHn1UnRvvphLsh+ZA==
dependencies:
"@salesforce/core" "^8.8.2"
"@salesforce/kit" "^3.2.3"
Expand Down Expand Up @@ -1694,15 +1749,15 @@
shelljs "^0.8.4"
sinon "^10.0.0"

"@salesforce/source-tracking@^7.3.10":
version "7.3.10"
resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-7.3.10.tgz#7530ef2acf4e89c012b800deebc840e9a18d18ef"
integrity sha512-2TynT9Xtl9Clutz9gFaiUlrZ3+13FM9mBifK2zfZQZSHHZCb2EwTTQKQ2i23njYHEZwcVcjBRU0qmrti+nkRGQ==
"@salesforce/source-tracking@^7.3.12":
version "7.3.12"
resolved "https://registry.yarnpkg.com/@salesforce/source-tracking/-/source-tracking-7.3.12.tgz#b9fde67d88469017328bc978f04ba083dfd204a9"
integrity sha512-0Ab0EfGOnpOmWYmXKzRqviCDA1SKYrcnaye8587iI465AB+pZTGDFpu7LVFNnevQWKsiy8fmz2q0Jyt4oxG73w==
dependencies:
"@oclif/core" "^4.2.3"
"@oclif/core" "^4.2.4"
"@salesforce/core" "^8.8.2"
"@salesforce/kit" "^3.2.3"
"@salesforce/source-deploy-retrieve" "^12.14.0"
"@salesforce/source-deploy-retrieve" "^12.14.1"
"@salesforce/ts-types" "^2.0.12"
fast-xml-parser "^4.5.1"
graceful-fs "^4.2.11"
Expand Down Expand Up @@ -2810,6 +2865,11 @@ ansicolors@~0.3.2:
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979"
integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==

ansis@^3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.10.0.tgz#6886afb0f729b1fa865df6b710b97a9915b7d0d4"
integrity sha512-hxDKLYT7hy3Y4sF3HxI926A3urzPxi73mZBB629m9bCVF+NyKNxbwCqqm+C/YrGPtxLwnl6d8/ZASCsz6SyvJA==

ansis@^3.3.2, ansis@^3.4.0, ansis@^3.5.2, ansis@^3.9.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.9.0.tgz#d195c93c31a333916142ff8f0be4d7e3872f262e"
Expand Down Expand Up @@ -7406,6 +7466,11 @@ semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semve
resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143"
integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==

semver@^7.7.0:
version "7.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==

sentence-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f"
Expand Down
Loading