From f7718b80e855c48c2953172edaa9f89382750281 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Wed, 23 Mar 2022 08:48:17 +0100 Subject: [PATCH] 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. --- gradle/changelog/duplicate_module_execution.yaml | 2 ++ scm-ui/ui-modules/src/index.ts | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 gradle/changelog/duplicate_module_execution.yaml diff --git a/gradle/changelog/duplicate_module_execution.yaml b/gradle/changelog/duplicate_module_execution.yaml new file mode 100644 index 0000000000..b18a4f5460 --- /dev/null +++ b/gradle/changelog/duplicate_module_execution.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Some plugin bundles are executed multiple times ([#1980](https://github.com/scm-manager/scm-manager/pull/1980)) diff --git a/scm-ui/ui-modules/src/index.ts b/scm-ui/ui-modules/src/index.ts index bbea92c15b..20c256779f 100644 --- a/scm-ui/ui-modules/src/index.ts +++ b/scm-ui/ui-modules/src/index.ts @@ -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); }); })