Skip to content

Commit 7c342a3

Browse files
authored
fix disabling for a publisher associated to org (microsoft#199059)
1 parent f593d2e commit 7c342a3

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1542,24 +1542,32 @@ export class ExtensionsWorkbenchService extends Disposable implements IExtension
15421542
return;
15431543
}
15441544

1545-
const autoUpdateExtensions = this.getSelectedExtensionsToAutoUpdate();
15461545
let update = false;
1546+
const autoUpdateExtensions = this.getSelectedExtensionsToAutoUpdate();
15471547
if (isString(extensionOrPublisher)) {
15481548
if (EXTENSION_IDENTIFIER_REGEX.test(extensionOrPublisher)) {
15491549
throw new Error('Expected publisher string, found extension identifier');
15501550
}
15511551
extensionOrPublisher = extensionOrPublisher.toLowerCase();
1552-
if (autoUpdateExtensions.includes(extensionOrPublisher) !== enable) {
1552+
if (this.isAutoUpdateEnabledFor(extensionOrPublisher) !== enable) {
15531553
update = true;
15541554
if (enable) {
15551555
autoUpdateExtensions.push(extensionOrPublisher);
15561556
} else {
1557-
autoUpdateExtensions.splice(autoUpdateExtensions.indexOf(extensionOrPublisher), 1);
1557+
if (autoUpdateExtensions.includes(extensionOrPublisher)) {
1558+
autoUpdateExtensions.splice(autoUpdateExtensions.indexOf(extensionOrPublisher), 1);
1559+
}
1560+
const publisherOrganization = this.organizationByPublisher.get(extensionOrPublisher);
1561+
if (publisherOrganization) {
1562+
for (const publisher of this.productService.publishersByOrganisation?.[publisherOrganization] ?? []) {
1563+
autoUpdateExtensions.splice(autoUpdateExtensions.indexOf(publisher), 1);
1564+
}
1565+
}
15581566
}
15591567
}
15601568
} else {
15611569
const extensionId = extensionOrPublisher.identifier.id.toLowerCase();
1562-
const enableAutoUpdatesForPublisher = autoUpdateExtensions.includes(extensionOrPublisher.publisher.toLowerCase());
1570+
const enableAutoUpdatesForPublisher = this.isAutoUpdateEnabledFor(extensionOrPublisher.publisher.toLowerCase());
15631571
const enableAutoUpdatesForExtension = autoUpdateExtensions.includes(extensionId);
15641572
const disableAutoUpdatesForExtension = autoUpdateExtensions.includes(`-${extensionId}`);
15651573

src/vs/workbench/contrib/extensions/test/electron-sandbox/extensionsWorkbenchService.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1650,6 +1650,31 @@ suite('ExtensionsWorkbenchServiceTest', () => {
16501650
assert.strictEqual(testObject.isAutoUpdateEnabledFor(testObject.local[2]), false);
16511651
});
16521652

1653+
test('Test disable auto update for publisher disables for the associated organisation', async () => {
1654+
stubConfiguration('onlySelectedExtensions');
1655+
stubProductConfiguration({ publishersByOrganisation: { 'org1': ['pub', 'pub1'] } });
1656+
1657+
const extension1 = aLocalExtension('a', undefined, { pinned: true });
1658+
const extension2 = aLocalExtension('b', { publisher: 'pub1' }, { pinned: true });
1659+
const extension3 = aLocalExtension('a', { publisher: 'pub2' }, { pinned: true });
1660+
instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [extension1, extension2, extension3]);
1661+
instantiationService.stub(IExtensionManagementService, 'updateMetadata', (local: ILocalExtension, metadata: Partial<Metadata>) => {
1662+
local.pinned = !!metadata.pinned;
1663+
return local;
1664+
});
1665+
testObject = await aWorkbenchService();
1666+
1667+
await testObject.updateAutoUpdateEnablementFor(testObject.local[0].publisher, true);
1668+
await testObject.updateAutoUpdateEnablementFor(testObject.local[1].publisher, false);
1669+
1670+
assert.strictEqual(testObject.isAutoUpdateEnabledFor('pub'), false);
1671+
assert.strictEqual(testObject.isAutoUpdateEnabledFor('pub1'), false);
1672+
assert.strictEqual(testObject.isAutoUpdateEnabledFor('pub2'), false);
1673+
assert.strictEqual(testObject.isAutoUpdateEnabledFor(testObject.local[0]), false);
1674+
assert.strictEqual(testObject.isAutoUpdateEnabledFor(testObject.local[1]), false);
1675+
assert.strictEqual(testObject.isAutoUpdateEnabledFor(testObject.local[2]), false);
1676+
});
1677+
16531678
async function aWorkbenchService(): Promise<ExtensionsWorkbenchService> {
16541679
const workbenchService: ExtensionsWorkbenchService = disposableStore.add(instantiationService.createInstance(ExtensionsWorkbenchService));
16551680
await workbenchService.queryLocal();

0 commit comments

Comments
 (0)