Fix plugin bundles being executed multiple times because of transient dependencies (#1980)

If a queued module is only removed from the queue upon successfully resolving all its dependencies,
it could fail multiple times, causing multiple entries to appear in the queue.
This in turn causes the module to get executed multiple times.
The solution is to immediately remove the module when it is dequeued.
If it fails again, it is then re-added to the queue.
This commit is contained in:
Konstantin Schaper
2022-03-23 08:48:17 +01:00
committed by GitHub
parent 4bba593714
commit f7718b80e8
2 changed files with 3 additions and 2 deletions

View File

@@ -0,0 +1,2 @@
- type: fixed
description: Some plugin bundles are executed multiple times ([#1980](https://github.com/scm-manager/scm-manager/pull/1980))

View File

@@ -59,12 +59,11 @@ const resolveModule = (name: string) => {
const defineModule = (name: string, module: Module) => {
Promise.all(module.dependencies.map(resolveModule))
.then(resolvedDependencies => {
delete queue[name];
modules["@scm-manager/" + name] = module.fn(...resolvedDependencies);
Object.keys(queue).forEach(queuedModuleName => {
const queueModule = queue[queuedModuleName];
delete queue[queuedModuleName];
defineModule(queuedModuleName, queueModule);
});
})