Skip to content

Commit

Permalink
Merge branch 'beta' into production
Browse files Browse the repository at this point in the history
* beta:
  Translated using Weblate (Italian)
  Translated using Weblate (Lithuanian)
  Added translation using Weblate (Thai)
  Added translation using Weblate (Thai)
  Translated using Weblate (Russian)
  Translated using Weblate (French)
  Update translation files
  Update POT files using the production database
  Translated using Weblate (Italian)
  Update translation files
  Fix wrongly ordered calls l(addColonText(()
  Update POT files using the production database
  MBS-13336: Add a script to rebuild all indexes using collations (#3062)
  MBS-13309: Restrict cross-origin requests to /ws/js/edit (#3075)
  MBS-13348: Fix edit_data_idx_link_type (#3073)
  MBS-13349: Support LibraryThing disambiguation URLs (#3077)
  MBS-13347: Relationship Type edit search times out (#3074)
  MBS-5987: Add "Submit votes & edit notes" to top (#3072)
  MBS-13350: Return all barcode matches in release editor (#3076)
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (German)
  Translated using Weblate (Italian)
  Translated using Weblate (French)
  Update translation files
  Add test for isObjectEmpty
  Add test for isBlank
  Add test for escapeLuceneValue
  Add test for escapeRegExp
  Add test for relationshipDateText
  Add test for sortByEntityName
  Move getSortName entities to constants
  Add test for isDisabledLink
  Add test for isFutureDate
  Add tests for strings
  Make renderMergeCheckboxElement function a component
  Fix require sort order
  Add test for isDateEmpty
  Add test for formatEndDate
  Add test for entityHref
  Make generic entity consts reusable
  Add test for isGuid
  Add test for isolateText
  Add test for natatime
  Add test for primaryAreaCode
  Add test for isDatabaseRowId
  Add test for getSortName
  More precise comparison for null barcode
  Add test for formatBarcode
  Add tests for clean
  Add tests for arrays.js functions
  Add test for calculateFullToc
  Add test for bracketed
  Add renderToStaticMarkup wrapper
  Use compareDates as the base for areDatesEqual
  Add test for areDatePeriodsEqual
  Use exactCount for newline-after-import eslint rule (#3071)
  MBS-12727: Show genre alias connections for tags (#2757)
  MBS-4822: Drop duplicate colon strings
  Add context to "Cancelled" and drop duplicate colons
  Add context to "Ended" and drop duplicate colons
  Add context to "Location" and drop duplicate colons
  Add context to EditReleaseEvents headings
  Standardize election headers and drop duplicate colons
  Add context to "Old" and drop duplicate colons
  Add context to "Status" and drop duplicate colons
  Add context to "Merge" and drop duplicate colons
  Add context to "Preview" and drop duplicate colons
  MBS-13207 (II): Move "Add a new recording" above suggestions (#3069)
  MBS-12893: Add places column to country statistics
  MBS-12852: Add events column to country statistics
  Ensure release stats are calculated for every country
  Use "create", "add", "enter" in more specific ways (#3070)
  Bump hermes-eslint to 0.17.1
  Bump eslint-plugin-ft-flow to 3.0.1
  Move eslint-plugin-simple-import-sort to devDependencies
  Migrate to Yarn v4
  Fix permission errors in run_selenium_tests.sh
  Bump SIR_TAG to v3.0.1 in the test images
  Switch to chrome-for-testing in tests
  Bump chromedriver to 119.0.6045.105
  Create the pgtap extension as a superuser
  Bump musicbrainz-tests-perl-5-dot-30 image
  Fix phusion/baseimage focal tag
  Fix PGDATA permission issues
  MBS-13261: Upgrade the required version of Node.js to 20
  Move duplicated CircleCI steps to script
  Regenerate cpanfile.snapshot
  Fix apt-key deprecation warning
  Upgrade the Docker base images to jammy
  Bump ARTWORK_REDIRECT_COMMIT
  Copy Dockerfile.tests to Dockerfile.perl5.30.tests
  Explicitly list the .gitignore'd Dockerfiles
  Replace xgettext-js with forked copy using hermes-parser (#3067)
  Use Unicode quotes for string being changed already
  Use Unicode quotes for string being changed already
  Remove i.e. from user-facing strings
  Remove e.g. from user-facing strings
  Capitalize URL in user-facing string (#3058)
  Normalize "track duration" to "track length" in UI (#3057)
  Normalize "pending edits" to "open edits" in UI (#3056)
  Update POT file from the current database
  Translated using Weblate (Turkish)
  Translated using Weblate (German)
  Translated using Weblate (Japanese)
  Added translation using Weblate (Chinese (Traditional))
  Translated using Weblate (Japanese)
  Translated using Weblate (Spanish)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (Russian)
  Translated using Weblate (French)
  Translated using Weblate (Bengali)
  Translated using Weblate (Portuguese)
  Translated using Weblate (German)
  Translated using Weblate (Italian)
  Translated using Weblate (Lithuanian)
  Use "remove" consistently for non-editor cases
  Translated using Weblate (Turkish)
  Translated using Weblate (German)
  Translated using Weblate (Japanese)
  Added translation using Weblate (Chinese (Traditional))
  Translated using Weblate (Japanese)
  Translated using Weblate (Spanish)
  Translated using Weblate (Portuguese)
  Translated using Weblate (Chinese (Simplified))
  Translated using Weblate (Russian)
  Translated using Weblate (French)
  Translated using Weblate (Bengali)
  Translated using Weblate (Portuguese)
  Translated using Weblate (German)
  Translated using Weblate (Italian)
  Translated using Weblate (Lithuanian)
  Upgrade Flow to 0.220.0
  MBS-13320 (II): Warn on form unload with rel changes (#3064)
  Add labels to all tests in Data::Editor
  Give a name to remaining 'all' test and add labels
  Split various_edit_counts into separate test
  Split editor subscription methods into separate test
  MBS-13334: Also find emails with capitalization differences
  Split and expand email checking tests
  MBS-13320: Prompt before unloading modified forms (#3054)
  Split new editor creation test to new subtest
  Upgrade Flow to 0.219.3
  Remove a few $FlowIgnores
  Remove uses of any in SeriesIndex.js
  Replace $MakeReadOnly type with one using infer
  Upgrade Flow to 0.219.2
  Upgrade Flow to 0.219.0
  Upgrade Flow to 0.218.1
  Upgrade Flow to 0.218.0
  Upgrade Flow to 0.217.2
  Upgrade Flow to 0.217.1
  Upgrade Flow to 0.217.0
  Remove unnecessary check in concatStringMatch
  Fix indentation in PhraseVarArgs class
  Upgrade Flow to 0.216.1
  Upgrade Flow to 0.216.0
  Upgrade Flow to 0.215.1
  Upgrade Flow to 0.215.0
  MBS-13319: Show help bubble for language/script on release editor (#3053)
  Use our new contains_ functions in more places (#3051)
  MBS-8952: Can rename recordings via autocomplete (#3039)
  MBS-13317: Remove Kget.jp from lyrics whitelist (#3052)
  Fix newly detected eslint issues
  Upgrade ESLint and associated plugins
  Upgrade Babel dependencies
  Regenerate yarn.lock
  Upgrade Flow to 0.214.0
  Upgrade Flow to 0.213.1
  Upgrade Flow to 0.213.0
  Upgrade Flow to 0.212.0
  Upgrade Flow to 0.211.1
  Upgrade Flow to 0.211.0
  Upgrade Flow to 0.210.2
  Upgrade Flow to 0.210.1
  Upgrade Flow to 0.210.0
  Upgrade Flow to 0.209.0
  Upgrade Flow to 0.208.1
  Upgrade Flow to 0.208.0
  Switch Babel & ESLint parsers to hermes
  Upgrade Flow to 0.207.0
  Upgrade Flow to 0.206.0
  Upgrade Flow to 0.205.1
  Upgrade Flow to 0.205.0
  Upgrade Flow to 0.204.1
  Upgrade Flow to 0.204.0
  Upgrade Flow to 0.203.1
  Upgrade Flow to 0.203.0
  Upgrade Flow to 0.202.1
  Upgrade Flow to 0.202.0
  Remove all uses of the switch feature (given/when)
  Remove all uses of the smartmatch operator
  Link directly to the anchor in Markdown
  Update INSTALL.md's building static resources section (#3042)
  • Loading branch information
yvanzo committed Nov 13, 2023
2 parents dad6ff9 + 6c0806d commit 9449d52
Show file tree
Hide file tree
Showing 739 changed files with 249,071 additions and 78,720 deletions.
108 changes: 13 additions & 95 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ version: 2.1
executors:
musicbrainz-tests:
docker:
- image: metabrainz/musicbrainz-tests:v-2023-08
- image: metabrainz/musicbrainz-tests:v-2023-11
user: root
working_directory: /home/musicbrainz/musicbrainz-server

musicbrainz-tests-node-v16:
musicbrainz-tests-perl-5-dot-30:
docker:
- image: metabrainz/musicbrainz-tests:v-2022-10
- image: metabrainz/musicbrainz-tests:v-2023-11-perl5.30
user: root
working_directory: /home/musicbrainz/musicbrainz-server

Expand Down Expand Up @@ -39,62 +39,21 @@ jobs:
- v2-node-
- run: |
chown -R musicbrainz:musicbrainz .
corepack enable
sudo -E -H -u musicbrainz yarn
- save_cache:
key: v2-node-{{ checksum "yarn.lock" }}
paths:
- "node_modules"

- run: |
sudo -E -H -u musicbrainz mkdir -p junit_output
sudo -E -H -u musicbrainz cp docker/musicbrainz-tests/DBDefs.pm lib/
rm /etc/service/{postgresql,redis}/down && sv start postgresql redis
sudo -E -H -u musicbrainz carton exec -- ./script/create_test_db.sh
sudo -E -H -u musicbrainz make -C po all_quiet deploy
MUSICBRAINZ_RUNNING_TESTS=1 NODE_ENV=test WEBPACK_MODE=development NO_PROGRESS=1 sudo -E -H -u musicbrainz carton exec -- \
./script/compile_resources.sh client server web-tests
sudo -E -H -u musicbrainz ./node_modules/.bin/flow --quiet
sudo -E -H -u musicbrainz ./node_modules/.bin/eslint --max-warnings 0 .
rm /etc/service/chrome/down && sv start chrome
sudo -E -H -u musicbrainz carton exec -- node \
t/web.js \
| tee >(./node_modules/.bin/tap-junit > ./junit_output/js_web.xml) \
| ./node_modules/.bin/tap-difflet
sv kill chrome
./docker/musicbrainz-tests/add_mbtest_alias.sh
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_json_dump
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_full_export
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_sitemaps
rm /etc/service/{template-renderer,vnu,website}/down && sv start template-renderer vnu website
export MMD_SCHEMA_ROOT=/home/musicbrainz/mb-solr/mmd-schema
export JUNIT_OUTPUT_FILE=junit_output/perl_and_pgtap.xml
sudo -E -H -u musicbrainz carton exec -- prove \
--pgtap-option dbname=musicbrainz_test \
--pgtap-option host=localhost \
--pgtap-option port=5432 \
--pgtap-option username=musicbrainz \
--source pgTAP \
--source Perl \
-I lib \
t/author/* \
t/critic.t \
t/hydration_i18n.t \
t/pgtap/* \
t/pgtap/unused-tags/* \
t/script/MergeDuplicateArtistCredits.t \
t/script/BuildSitemaps.t \
t/script/DumpJSON.t \
t/script/ExportAllTables.t \
t/script/dbmirror2.t \
t/tests.t \
--harness=TAP::Harness::JUnit \
-v
./docker/musicbrainz-tests/run_circleci_tests.sh
- store_test_results:
path: ./junit_output

js-perl-and-pgtap-node-v16:
executor: musicbrainz-tests-node-v16
js-perl-and-pgtap-perl-5-dot-30:
executor: musicbrainz-tests-perl-5-dot-30
steps:
- restore_cache:
keys:
Expand All @@ -114,60 +73,19 @@ jobs:

- restore_cache:
keys:
- v2-node-v16-{{ checksum "yarn.lock" }}
- v2-node-v16-
- v2-perl-5-dot-30-{{ checksum "yarn.lock" }}
- v2-perl-5-dot-30-
- run: |
chown -R musicbrainz:musicbrainz .
corepack enable
sudo -E -H -u musicbrainz yarn
- save_cache:
key: v2-node-v16-{{ checksum "yarn.lock" }}
key: v2-perl-5-dot-30-{{ checksum "yarn.lock" }}
paths:
- "node_modules"

- run: |
sudo -E -H -u musicbrainz mkdir -p junit_output
sudo -E -H -u musicbrainz cp docker/musicbrainz-tests/DBDefs.pm lib/
rm /etc/service/{postgresql,redis}/down && sv start postgresql redis
sudo -E -H -u musicbrainz carton exec -- ./script/create_test_db.sh
sudo -E -H -u musicbrainz make -C po all_quiet deploy
MUSICBRAINZ_RUNNING_TESTS=1 NODE_ENV=test WEBPACK_MODE=development NO_PROGRESS=1 sudo -E -H -u musicbrainz carton exec -- \
./script/compile_resources.sh client server web-tests
sudo -E -H -u musicbrainz ./node_modules/.bin/flow --quiet
sudo -E -H -u musicbrainz ./node_modules/.bin/eslint --max-warnings 0 .
rm /etc/service/chrome/down && sv start chrome
sudo -E -H -u musicbrainz carton exec -- node \
t/web.js \
| tee >(./node_modules/.bin/tap-junit > ./junit_output/js_web.xml) \
| ./node_modules/.bin/tap-difflet
sv kill chrome
./docker/musicbrainz-tests/add_mbtest_alias.sh
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_json_dump
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_full_export
sudo -u postgres createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_test_sitemaps
rm /etc/service/{template-renderer,vnu,website}/down && sv start template-renderer vnu website
export MMD_SCHEMA_ROOT=/home/musicbrainz/mb-solr/mmd-schema
export JUNIT_OUTPUT_FILE=junit_output/perl_and_pgtap.xml
sudo -E -H -u musicbrainz carton exec -- prove \
--pgtap-option dbname=musicbrainz_test \
--pgtap-option host=localhost \
--pgtap-option port=5432 \
--pgtap-option username=musicbrainz \
--source pgTAP \
--source Perl \
-I lib \
t/author/* \
t/critic.t \
t/hydration_i18n.t \
t/pgtap/* \
t/pgtap/unused-tags/* \
t/script/MergeDuplicateArtistCredits.t \
t/script/BuildSitemaps.t \
t/script/DumpJSON.t \
t/script/ExportAllTables.t \
t/script/dbmirror2.t \
t/tests.t \
--harness=TAP::Harness::JUnit \
-v
./docker/musicbrainz-tests/run_circleci_tests.sh
- store_test_results:
path: ./junit_output
Expand All @@ -177,4 +95,4 @@ workflows:
build-and-test:
jobs:
- js-perl-and-pgtap
- js-perl-and-pgtap-node-v16
- js-perl-and-pgtap-perl-5-dot-30
2 changes: 0 additions & 2 deletions .eslintrc.unfixed.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,3 @@ rules:
react/no-multi-comp: [warn, {ignoreStateless: true}]
react/no-render-return-value: warn
react/jsx-no-bind: [warn, {ignoreDOMComponents: true}]
flowtype/no-types-missing-file-annotation: error
flowtype/no-weak-types: warn
63 changes: 34 additions & 29 deletions .eslintrc.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
root: true

parser: "@babel/eslint-parser"
parser: "hermes-eslint"

plugins:
- import
- react
- flowtype
- ft-flow
- fb-flow
- react-hooks
- simple-import-sort
Expand Down Expand Up @@ -125,7 +125,12 @@ rules:
strict: off

# Variables
no-undef: error
# no-undef is mostly superfluous as it is checked by Flow; enabling it
# actually triggers thousands of false positives because hermes-eslint
# doesn't track global types (those defined with `declare type`).
# Ideally we could keep no-undef enabled for files that aren't Flow-
# typed yet, but we don't maintain a separate config for those.
no-undef: off
no-use-before-define: off

# Stylistic Issues
Expand Down Expand Up @@ -227,7 +232,9 @@ rules:
import/export: error
import/extensions: [error, ignorePackages]
import/first: warn
import/newline-after-import: [warn, {count: 1}]
import/newline-after-import: [warn, {count: 1,
exactCount: true,
considerComments: true}]
import/no-commonjs: error
import/no-duplicates: warn
import/no-dynamic-require: error
Expand Down Expand Up @@ -280,6 +287,7 @@ rules:
react/require-render-return: error
react/self-closing-comp: error
react/sort-comp: off
react/sort-default-props: warn
react/sort-prop-types: off
react/style-prop-object: error
react/void-dom-elements-no-children: error
Expand All @@ -305,7 +313,6 @@ rules:
react/jsx-one-expression-per-line: [warn, {allow: single-child}]
react/jsx-curly-brace-presence: [error, {props: never, children: ignore}]
react/jsx-pascal-case: error
react/jsx-sort-default-props: warn
react/jsx-sort-props: warn
react/jsx-tag-spacing: [error, {beforeClosing: never}]
# jsx-uses-react is not implied since
Expand All @@ -320,31 +327,29 @@ rules:
logical: ignore,
prop: ignore}]

##########################
# eslint-plugin-flowtype #
##########################
#########################
# eslint-plugin-ft-flow #
#########################

flowtype/boolean-style: [warn, boolean]
flowtype/define-flow-type: warn
flowtype/delimiter-dangle: [warn, always-multiline]
flowtype/generic-spacing: off
flowtype/no-dupe-keys: error
flowtype/no-flow-fix-me-comments: off
flowtype/no-mutable-array: off
flowtype/no-primitive-constructor-types: error
flowtype/object-type-delimiter: [warn, comma]
flowtype/require-exact-type: off
flowtype/require-indexer-name: [warn, always]
flowtype/require-parameter-type: off
flowtype/require-return-type: off
flowtype/require-valid-file-annotation: off
flowtype/semi: [warn, always]
flowtype/sort-keys: [warn, asc]
flowtype/space-after-type-colon: [warn, always, {allowLineBreak: true}]
flowtype/space-before-generic-bracket: [warn, never]
flowtype/space-before-type-colon: [warn, never]
flowtype/union-intersection-spacing: [warn, always]
flowtype/use-flow-type: warn
ft-flow/boolean-style: [warn, boolean]
ft-flow/delimiter-dangle: [warn, always-multiline]
ft-flow/generic-spacing: off
ft-flow/no-dupe-keys: error
ft-flow/no-flow-fix-me-comments: off
ft-flow/no-mutable-array: off
ft-flow/no-primitive-constructor-types: error
ft-flow/object-type-delimiter: [warn, comma]
ft-flow/require-exact-type: off
ft-flow/require-indexer-name: [warn, always]
ft-flow/require-parameter-type: off
ft-flow/require-return-type: off
ft-flow/require-valid-file-annotation: off
ft-flow/semi: [warn, always]
ft-flow/sort-keys: [warn, asc]
ft-flow/space-after-type-colon: [warn, always, {allowLineBreak: true}]
ft-flow/space-before-generic-bracket: [warn, never]
ft-flow/space-before-type-colon: [warn, never]
ft-flow/union-intersection-spacing: [warn, always]

#########################
# eslint-plugin-fb-flow #
Expand Down
2 changes: 1 addition & 1 deletion .flowconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PROJECT_ROOT>/.nyc_output/.*
<PROJECT_ROOT>/coverage/.*
<PROJECT_ROOT>/lib/.*
<PROJECT_ROOT>/node_modules/resolve/test/resolver/malformed_package_json/package.json
<PROJECT_ROOT>/node_modules/.*resolve/test/resolver/malformed_package_json/package.json
<PROJECT_ROOT>/root/static/build/.*
<PROJECT_ROOT>/perl_modules/.*
<PROJECT_ROOT>/t/.*
Expand Down
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/.yarn/** linguist-vendored
/.yarn/releases/* binary
/.yarn/plugins/**/* binary
/.pnp.* binary linguist-generated
21 changes: 19 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@
/admin/apache/vh_mb_frontend.conf
/admin/apache/startup.pl
/admin/replication/hooks/post-process
/docker/Dockerfile.*
/docker/Dockerfile.cpanfile-snapshot
/docker/Dockerfile.json-dump
/docker/Dockerfile.production-cron
/docker/Dockerfile.search-indexes-dump
/docker/Dockerfile.sitemaps
/docker/Dockerfile.test-database
/docker/Dockerfile.webservice
/docker/Dockerfile.website
/docker/Dockerfile.website-test
/root/robots.txt
# Symlinks to node_modules/leaflet/
/root/static/images/leaflet/layers-2x.png
Expand All @@ -26,13 +34,22 @@
/MYMETA.json
/MYMETA.yml
/po/*.mo
/yarn-error.log
*.ttc
*~
.#*
*.swp
*.vscode

# Yarn - https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
/.pnp.*
/.yarn/*
!/.yarn/patches
!/.yarn/plugins
!/.yarn/releases
!/.yarn/sdks
!/.yarn/versions
/yarn-error.log

# Ignore files generated by lib/MusicBrainz/Server/Data/FileCache.pm
/root/static/build/
/root/static/sitemaps/sitemap*
Expand Down
1 change: 1 addition & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
12 changes: 7 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,29 +41,31 @@ dependency updates, unnoticeable refactoring, and so on.

#### Title

Describe your change with a short imperative title, e.g.
Describe your change with a short imperative title, such as

> Change small unnoticeable bits
If your change resolves a ticket (see [above](#ticket)), please make sure you
prefix your pull request title with `MBS-XXX: ` in order for our issue tracker
to link your pull request to that ticket, e.g.
to link your pull request to that ticket, such as in

> MBS-1234567: Change things relevant to users
If it **partially resolves** a ticket, use parenthesis, e.g.
If it **partially resolves** a ticket, use parenthesis, such as in

> MBS-1234567 (I): Make first part of needed changes
If your change relate to **several tickets**, separate these with commas, e.g.
If your change relate to **several tickets**, separate these with commas,
such as in

> MBS-1234567, MBS-2345678: Change two related things at once
#### Comment

Just follow our [pull request template](.github/PULL_REQUEST_TEMPLATE.md).

If your change relates to a ticket, make sure to mention it in the comment, e.g.
If your change relates to a ticket, make sure to mention it in the comment,
for example

```Markdown
# Summary
Expand Down
3 changes: 2 additions & 1 deletion HACKING-PROD.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ CircleCI supports debugging in their containers with SSH for this case. See
[their documentation](https://circleci.com/docs/2.0/ssh-access-jobs/).

Basically, you'll want to expand the "Rerun" menu and select "Rerun job with SSH".
Then, under "Enable SSH", you'll be told how to SSH into the container, e.g.
Then, under "Enable SSH", you'll be told how to SSH into the container,
with a command like

$ ssh -p port ip

Expand Down
4 changes: 2 additions & 2 deletions HACKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ Important folders are documented here, in alphabetical order.
[HTML::FormHandler](http://search.cpan.org/dist/HTML-FormHandler/)
classes, where most forms rendered by Template Toolkit get handled.
The controller will create an instance of the corresponding class
here, and pass the request data to it. (See e.g.
here, and pass the request data to it. (See for example
`MusicBrainz::Server::Controller::edit_action`). The form acts to
validate the request data and return any errors.

We have some forms that are mostly rendered client-side and submit
JSON directly to some controller endpoint, which then performs its own
validation. (See e.g. `/ws/js/edit`.) Those have nothing to do with
validation. (See `/ws/js/edit`.) Those have nothing to do with
the code here.

* **root/**
Expand Down

0 comments on commit 9449d52

Please sign in to comment.