« get me outta code hell

data, checks: don't let Main Release be secrelease's own album - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-10-03 19:19:43 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-10-03 19:19:43 -0300
commit7ae1f20d46669be1e8354da1da83888de60814cc (patch)
treeabdea7f9ab9f713d418791b48d966c239213cfec /src
parent590acab709aca1c9ded2feb6de8d170de554340b (diff)
data, checks: don't let Main Release be secrelease's own album
Diffstat (limited to 'src')
-rw-r--r--src/data/checks.js19
-rw-r--r--src/data/composite/things/track/withMainReleaseTrack.js14
-rw-r--r--src/data/composite/things/track/withPropertyFromMainRelease.js2
3 files changed, 29 insertions, 6 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index fb4a9673..de433de4 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -405,11 +405,20 @@ export function filterReferenceErrors(wikiData, {
                     // gets refactored, there might be trouble here...
 
                     if (thing.mainReleaseTrack === null) {
-                      throw new Error(
-                        `Matched album for reference "${ref}":\n` +
-                        `- ` + inspect(album) + `\n` +
-                        `...but none of its tracks automatically match this secondary release.\n` +
-                        `Please resolve by specifying the track here, instead of the album.`);
+                      if (album === thing.album) {
+                        throw new Error(
+                          `Matched album for reference "${ref}":\n` +
+                          `- ` + inspect(album) + `\n` +
+                          `...but this is the album that includes this secondary release, itself.\n` +
+                          `Please resolve by pointing to aonther album here, or by removing this\n` +
+                          `Main Release field, if this track is meant to be the main release.`);
+                      } else {
+                        throw new Error(
+                          `Matched album for reference "${ref}":\n` +
+                          `- ` + inspect(album) + `\n` +
+                          `...but none of its tracks automatically match this secondary release.\n` +
+                          `Please resolve by specifying the track here, instead of the album.`);
+                      }
                     } else {
                       return album;
                     }
diff --git a/src/data/composite/things/track/withMainReleaseTrack.js b/src/data/composite/things/track/withMainReleaseTrack.js
index 871eba7d..e498582d 100644
--- a/src/data/composite/things/track/withMainReleaseTrack.js
+++ b/src/data/composite/things/track/withMainReleaseTrack.js
@@ -203,5 +203,19 @@ export default templateCompositeFrom({
           null,
       }),
     },
+
+    {
+      dependencies: ['#mainReleaseTrack', input.myself()],
+
+      compute: (continuation, {
+        ['#mainReleaseTrack']: mainReleaseTrack,
+        [input.myself()]: thisTrack,
+      }) => continuation({
+        ['#mainReleaseTrack']:
+          (mainReleaseTrack === thisTrack
+            ? null
+            : mainReleaseTrack),
+      }),
+    },
   ],
 });
diff --git a/src/data/composite/things/track/withPropertyFromMainRelease.js b/src/data/composite/things/track/withPropertyFromMainRelease.js
index 3e1b6d19..c6f65653 100644
--- a/src/data/composite/things/track/withPropertyFromMainRelease.js
+++ b/src/data/composite/things/track/withPropertyFromMainRelease.js
@@ -13,7 +13,7 @@ import {withPropertyFromObject} from '#composite/data';
 import withMainReleaseTrack from './withMainReleaseTrack.js';
 
 export default templateCompositeFrom({
-  annotation: `inheritFromMainRelease`,
+  annotation: `withPropertyFromMainRelease`,
 
   inputs: {
     property: input({type: 'string'}),