Skip to content

Commit

Permalink
Merge branch 'beta' into production
Browse files Browse the repository at this point in the history
* beta:
  Update translations from Transifex
  Update POT files using the production database
  Update translations from Transifex
  MBS-11927: Display selected invalid link type
  MBS-11929: Skip validation of existing links
  MBS-11931: "Discogs" appears under "get the music"
  Update POT files using the production database
  Update translations from Transifex
  MBS-11922: Show historical (now secondary) types for old Add Release edits (#2243)
  MBS-11924: Hide useless tabs / subscribers section from deleted profiles (#2242)
  MBS-11933: Validate the code parameter in /oauth2/token (#2244)
  Remove useless arrows on add_cover_art images (#2240)
  Allow Babel to transform the punycode module
  Show label diff when removing it and hide label/catno when fully empty
  Ignore date if it's '' rather than passing '' through
  Update POT files using the production database
  Revert accidental name change (done for testing only)
  Update translations from Transifex
  MBS-11915: Don't show area icon if there's already a flag icon (#2238)
  Mark more types as read-only in externalLinks.js
  Bring /etc/service/webservice down by default
  Reuse website.service for the sitemaps container
  Better default GIT_* DBDefs subs
  Remove consul-template
  Multiple relationship auto-selection & validation
  MBS-9902(II), MBS-11912: Support type combination
  MBS-9902(I): Restrict link type options
  Add Flow support to URLCleanup
  MBS-11838: Convert Edit Release edit to React (#2230)
  Update translations from Transifex
  Update POT files using the production database
  Refactor URLCleanup, eliminate redundant constants
  Fix AddRelease preview display
  Fix order of imports
  MBS-11888: Automatically select / disable ended in DateRangeFieldset
  Add basic tests for release and instrument guess case
  MBS-11840: Convert Reorder Mediums edit to React (#2226)
  MBS-11898: Type update wrongly modified old links (#2231)
  Fix self -> this in GuessCaseHandlerRelease
  Fix margin of link action icons (#2232)
  MBS-11897: Beta: Statistics timeline broken
  MBS-3774: Support setting date period to ext link (#2219)
  Actually pass an isPerson boolean rather than typeID
  MBS-11891: Use https when linking to jira (#2229)
  MBS-2421: Show entity icon on relationship links
  Add inverted icons
  MBS-10910: Display renamed from/to on label overview (#1613)
  FormRowSortNameWithGuessCase: fix title, class
  MBS-11890: Beta: Fix alias "guess sort name" for persons
  MBS-11835: Convert Change Wikidoc edit to React (#2222)
  Release Group -> Release group on edit labels
  Bump Flow to 0.158.0
  Update POT files using the production database
  Update translations from Transifex
  MBS-11650: Add tag and rating statistics to profile page
  Remove unneeded exp.
  MBS-11622: Clean up Apple Music label URLs (#2086)
  MBS-11875: Don't consider Braille an unlikely script (#2224)
  MBS-11846: Display release artist on release group view (#2201)
  Removing useless empty {}
  MBS-11839: Convert Remove Relationship Attribute edit to React
  Fix text overflow caused by long URL (#2216)
  MBS-11823: Don't break tags and genres mid-word (#2214)
  MBS-11837: Convert Edit Release Label edit to React (#2212)
  MBS-11836: Convert Edit Barcodes edit to React (#2209)
  MBS-11834: Convert Add Release edit to React
  Make guess case files flow strict
  Add flow types to GuessCase/Main
  Convert GuessCase/Main to a class
  Add flow types to guess case handlers
  Clarify variable names in guess case handlers
  Fix eslint issues in guess case handlers
  Fix typo: asterix -> asterisk
  Convert guess case handlers to classes
  Replace file-loader with asset modules
  Change artist id in t/sql/coverart.sql
  Remove @babel/register from node-runner
  Remove the TemplateMacros tests
  Migrate to Webpack v5
  Remove .js from manifest.js paths
  Remove copy-webpack-plugin
  Remove EnvironmentPlugin
  Remove 'url' imports
  Bump copy-webpack-plugin to 6.4.0
  Bump webpack-node-externals to 3.0.0
  Bump webpack-manifest-plugin to 2.2.0
  Bump terser-webpack-plugin to 4.2.3
  Bump less-loader to 7.3.0
  Migrate less from v2 to v4
  Bump imports-loader to 1.2.0
  Bump file-loader to 6.2.0
  Bump webpack-cli to 3.3.12
  Bump Webpack to 4.46.0
  Return focus to selector if type is not selected
  Fix adding relationship when link is not submitted
  Allow submitting form from empty URL input
  Fix operator precedence in areRelationshipTargetGroupsEqual
  Update POT files using the production database
  Fix string to make it properly translatable
  Update translations from Transifex
  Update xgettext-js to 3.0.0
  Update babel and associated plugins
  MBS-11722: Don't preselect basic as language proficiency (#2145)
  MBS-9426: Allow removing usernames from locked list
  MBS-11828: Add admin page to check whether username is locked
  MBS-11689: Report for pseudo-releases marked as the original tracklist (#2174)
  MBS-11854: Recognize unicode hyphen in guess case (#2199)
  MBS-11680: Group editing URL relationships by external link (#2114)
  Update HACKING to create the SELENIUM DB directly (#2210)
  MBS-11832: Add missing NotFound params for artist_credit (#2191)
  MBS-11693: Give useful message when rejecting Musixmatch /album links (#2126)
  MBS-11848: Add report for releases with Amazon cover art without CAA cover (#2197)
  MBS-7859: Hide irrelevant recording rels from release view (#2194)
  Fix deprecated link type code + tests (#2211)
  Use the $DIRECTION_FORWARD constant in place of 1
  MBS-11856: Remove reports for releases with cover art relationships (#2202)
  MBS-11862: Do not show deprecated relationship types with 0 uses (#2206)
  MBS-11825: Use same order for art types when editing vs adding (#2203)
  Remove reporter id from report message-id (#2208)
  MBS-2221: Add date docs to relationship editor (#2204)
  MBS-11861: improve loopParity classes for tablesorter (#2205)
  (Re-)Add InformationIcon to components.js
  MBS-11863: Allow DNB links for works
  MBS-11864: Some DNB links are wrongly marked as invalid
  Allow declaring my $edit twice
  MBS-2418: Show Edit URL edits in entity edit histories
  MBS-11267: Always show artwork info when adding/reordering (#1821)
  MBS-11798: Disallow Instagram internal links (#2179)
  Fix typo (seriess -> series)
  Use q/qq to avoid escaping quotes for readability
  Move eslint-plugin-fb-flow to devDependencies
  Add eslint-plugin-fb-flow; fixed use-indexed-access-type
  Bump Flow to 0.157.0
  Bump Flow to 0.156.0
  Import Input/Output without passing through gc and drop gc.mode
  Fix Perl::Critic space at end of line errors on tests
  Fix Perl::Critic useless interpolation errors on tests
  Fix eslint sort-keys
  MBS-11850: Make footer links more visible
  Make most of GuessCaseT read-only
  Add flow types to guess-case/modes
  Clarify variable names
  Fix sort-keys issues
  Make fixEnglishKeyNames directly part of runPostProcess
  Replace Object.assign with spread
  Remove useless type declarations
  MBS-11824: Don't require space after feat. in reports
  MBS-11833: Drop "f." from the featured artists reports
  Add flow types to guess-case/Output
  Simplify appendWordPreserveWhiteSpace
  Clarify variable names
  Use .push to append to array
  Improve some comments, remove some useless ones
  Remove unused output.dropLastWord
  Clarify variable name: _w -> wordList
  Remove seemingly unused _output variable
  Fix eslint issues in GuessCaseOutput
  Convert GuessCaseOutput to class
  Add flow types to guess-case/Input
  Avoid negative null check in capitalizeCurrentWord
  Drop unneeded and misleading comment
  Remove unused insertWordAtEnd, simplify updateCurrentWord
  Drop unneeded wordListLength variable
  Drop self-explanatory / wrong comments, update others
  Clarify getCursorPosition / setCursorPosition
  Clarify variable names in GuessCaseInput
  Fix eslint issues in GuessCaseInput
  Convert GuessCaseInput to class
  More self-explanatory variable names for guess case
  MBS-11805: Add basic flow types to guess-case/utils
  MBS-11802: Add mock LinkType for examples (#2181)
  MBS-11793: Don't fetch Wikipedia abstract when URL is ended (#2178)
  MBS-11806: Don't group relationships for different track sets (#2186)
  MBS-11796: Add Internet Archive logo for sidebar (#2176)
  MBS-11808: Don't show tags in lists where vote count < 1 (#2188)
  Reject adding entities on search for all types that do not support it
  Fix autocomplete2 editor search
  MBS-11811: Do not batch-change track data for collapsed media
  Rename guessCaseMediaNames (it guesses tracks too)
  MBS-11812: Fix missing whitespace before "New medium title"
  MBS-11810: disc title should be medium title
  MBS-11805: Add flow types to guess-case/flags
  const over var for flags.js
  Sort keys
  Typo: hypen -> hyphen
  MBS-11797: Lowercase "censored", "uncensored", "explicit" in ETI
  MBS-11788: Guess case: Lowercase "official" in ETI
  MBS-11391: Add a dedicated popover to edit URL (#2151)
  MBS-11760: Improve testing for tag autodeletion
  MBS-11760: Add missing delete_unused_tag triggers
  MBS-11733: Remove WikiaParoles from lyrics whitelist
  MBS-11732: Remove LYRICSnMUSIC from lyrics whitelist
  • Loading branch information
mwiencek committed Sep 6, 2021
2 parents 9f98b19 + c4ace4c commit b193952
Show file tree
Hide file tree
Showing 591 changed files with 28,114 additions and 19,670 deletions.
3 changes: 2 additions & 1 deletion .circleci/config.yml
Expand Up @@ -45,7 +45,8 @@ jobs:
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
NODE_ENV=test WEBPACK_MODE=development sudo -E -H -u musicbrainz carton exec -- ./script/compile_resources.sh server web-tests
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
Expand Down
8 changes: 8 additions & 0 deletions .eslintrc.yaml
Expand Up @@ -6,6 +6,7 @@ plugins:
- import
- react
- flowtype
- fb-flow
- react-hooks

env:
Expand All @@ -23,6 +24,7 @@ globals:
__webpack_public_path__: writable
__DEV__: readonly
GLOBAL_JS_NAMESPACE: readonly
MUSICBRAINZ_RUNNING_TESTS: readonly
addColon: readonly
addColonText: readonly
hasOwnProp: readonly
Expand Down Expand Up @@ -333,6 +335,12 @@ rules:
flowtype/union-intersection-spacing: [warn, always]
flowtype/use-flow-type: warn

#########################
# eslint-plugin-fb-flow #
#########################

fb-flow/use-indexed-access-type: error

#############################
# eslint-plugin-react-hooks #
#############################
Expand Down
8 changes: 1 addition & 7 deletions HACKING.md
Expand Up @@ -212,13 +212,7 @@ These are a bit more involved to set up:

* Set USE_SET_DATABASE_HEADER to 1 in lib/DBDefs.pm.

* Run ./script/create_test_db.sh and ./script/compile_resources.sh again.

* Create the `musicbrainz_selenium` database using `musicbrainz_test` as
a template:

$ # On Ubuntu, use sudo -u postgres
$ createdb -O musicbrainz -T musicbrainz_test -U postgres musicbrainz_selenium
* Run ./script/create_test_db.sh SELENIUM and run ./script/compile_resources.sh again.

With the above prerequisites out of the way, the tests can be run from the
command line like so:
Expand Down
6 changes: 3 additions & 3 deletions admin/GenerateSQLScripts.pl
Expand Up @@ -223,9 +223,9 @@ sub process_tables
print OUT "BEGIN;\n\n";
foreach my $row (@replication_triggers) {
my ($table, $verbose) = @$row;
print OUT "CREATE TRIGGER \"reptg_$table\"\n";
print OUT "AFTER INSERT OR DELETE OR UPDATE ON \"$table\"\n";
print OUT "FOR EACH ROW EXECUTE PROCEDURE \"recordchange\" (" . ($verbose ? "'verbose'" : "") . ");\n\n"
print OUT qq(CREATE TRIGGER "reptg_$table"\n);
print OUT qq(AFTER INSERT OR DELETE OR UPDATE ON "$table"\n);
print OUT 'FOR EACH ROW EXECUTE PROCEDURE "recordchange" (' . ($verbose ? "'verbose'" : "") . ");\n\n"
}
print OUT "COMMIT;\n";
close OUT;
Expand Down
8 changes: 4 additions & 4 deletions admin/InitDb.pl
Expand Up @@ -148,8 +148,8 @@ sub CreateReplicationFunction

$sql->auto_commit;
$sql->do(
"CREATE FUNCTION \"recordchange\" () RETURNS trigger
AS ?, 'recordchange' LANGUAGE C",
q(CREATE FUNCTION "recordchange" () RETURNS trigger
AS ?, 'recordchange' LANGUAGE C),
$path_to_pending_so,
);
}
Expand Down Expand Up @@ -260,7 +260,7 @@ sub CreateRelations
my $opts = $DB->shell_args;
$ENV{"PGPASSWORD"} = $DB->password;

system(sprintf("echo \"CREATE SCHEMA %s\" | $psql $opts", $_))
system(sprintf(qq(echo "CREATE SCHEMA %s" | $psql $opts), $_))
for (qw(
musicbrainz
cover_art_archive
Expand Down Expand Up @@ -384,7 +384,7 @@ sub CreateRelations
print localtime() . " : Optimizing database ...\n" unless $fQuiet;
$opts = $DB->shell_args;
$ENV{"PGPASSWORD"} = $DB->password;
system("echo \"vacuum analyze\" | $psql $opts");
system(qq(echo "vacuum analyze" | $psql $opts));
die "\nFailed to optimize database\n" if ($? >> 8);

print localtime() . " : Initialized and imported data into the database.\n" unless $fQuiet;
Expand Down
2 changes: 1 addition & 1 deletion admin/NormalizeToHTTPS
Expand Up @@ -9,7 +9,7 @@ use lib "$FindBin::Bin/../lib";
use MusicBrainz::Server::Context;
use MusicBrainz::Server::Validation qw( is_positive_integer );

my $usage = "\"Usage: $0 number_of_rows domain.name [domain.name ...]\"";
my $usage = qq("Usage: $0 number_of_rows domain.name [domain.name ...]");

my $number_of_rows = shift;
is_positive_integer($number_of_rows) or warn $usage and die "invalid number of rows";
Expand Down
24 changes: 20 additions & 4 deletions admin/sql/CreateTriggers.sql
Expand Up @@ -1036,34 +1036,50 @@ CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER INSERT ON tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON area_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON artist_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON event_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON instrument_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON label_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON release_group_tag DEFERRABLE INITIALLY DEFERRED
AFTER DELETE ON place_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON work_tag DEFERRABLE INITIALLY DEFERRED
AFTER DELETE ON recording_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON area_tag DEFERRABLE INITIALLY DEFERRED
AFTER DELETE ON release_group_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON instrument_tag DEFERRABLE INITIALLY DEFERRED
AFTER DELETE ON release_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON series_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON work_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

--------------------------------------------------------------------------------
CREATE CONSTRAINT TRIGGER apply_artist_release_group_pending_updates
AFTER INSERT OR UPDATE OR DELETE ON release DEFERRABLE INITIALLY DEFERRED
Expand Down
10 changes: 7 additions & 3 deletions admin/sql/DropTriggers.sql
Expand Up @@ -314,13 +314,17 @@ DROP TRIGGER url_gc_a_del_l_url_url ON l_url_url;
DROP TRIGGER url_gc_a_upd_l_url_work ON l_url_work;
DROP TRIGGER url_gc_a_del_l_url_work ON l_url_work;
DROP TRIGGER delete_unused_tag ON tag;
DROP TRIGGER delete_unused_tag ON area_tag;
DROP TRIGGER delete_unused_tag ON artist_tag;
DROP TRIGGER delete_unused_tag ON event_tag;
DROP TRIGGER delete_unused_tag ON instrument_tag;
DROP TRIGGER delete_unused_tag ON label_tag;
DROP TRIGGER delete_unused_tag ON place_tag;
DROP TRIGGER delete_unused_tag ON recording_tag;
DROP TRIGGER delete_unused_tag ON release_group_tag;
DROP TRIGGER delete_unused_tag ON work_tag;
DROP TRIGGER delete_unused_tag ON area_tag;
DROP TRIGGER delete_unused_tag ON instrument_tag;
DROP TRIGGER delete_unused_tag ON release_tag;
DROP TRIGGER delete_unused_tag ON series_tag;
DROP TRIGGER delete_unused_tag ON work_tag;
DROP TRIGGER apply_artist_release_group_pending_updates ON release;
DROP TRIGGER apply_artist_release_pending_updates ON release;
DROP TRIGGER apply_artist_release_pending_updates ON release_country;
Expand Down
21 changes: 21 additions & 0 deletions admin/sql/updates/20210702-mbs-11760.sql
@@ -0,0 +1,21 @@
\set ON_ERROR_STOP 1

BEGIN;

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON event_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON place_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON recording_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

CREATE CONSTRAINT TRIGGER delete_unused_tag
AFTER DELETE ON release_tag DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE trg_delete_unused_tag_ref();

COMMIT;
4 changes: 0 additions & 4 deletions docker/musicbrainz-json-dump/consul-template-json-dump.conf

This file was deleted.

3 changes: 0 additions & 3 deletions docker/musicbrainz-json-dump/consul-template.service

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions docker/musicbrainz-production-cron/consul-template.service

This file was deleted.

This file was deleted.

This file was deleted.

5 changes: 0 additions & 5 deletions docker/musicbrainz-sitemaps/consul-template-sitemaps.conf
@@ -1,8 +1,3 @@
template {
source = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm.ctmpl"
destination = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm"
}

exec {
command = "start_musicbrainz_server.sh"
splay = "0s"
Expand Down
3 changes: 0 additions & 3 deletions docker/musicbrainz-sitemaps/sitemaps.service

This file was deleted.

2 changes: 1 addition & 1 deletion docker/musicbrainz-tests/run_selenium_tests.sh
Expand Up @@ -52,7 +52,7 @@ sv start artwork-indexer artwork-redirect ssssss
# Compile static resources.
sudo -E -H -u musicbrainz yarn
sudo -E -H -u musicbrainz make -C po all_quiet deploy
NODE_ENV=test WEBPACK_MODE=development \
NODE_ENV=test WEBPACK_MODE=development NO_PROGRESS=1 \
sudo -E -H -u musicbrainz carton exec -- ./script/compile_resources.sh

# Add mbtest host alias to work around NO_PROXY restriction.
Expand Down
5 changes: 0 additions & 5 deletions docker/musicbrainz-webservice/consul-template-webservice.conf
@@ -1,8 +1,3 @@
template {
source = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm.ctmpl"
destination = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm"
}

exec {
command = "start_musicbrainz_server.sh"
splay = "60s"
Expand Down
2 changes: 1 addition & 1 deletion docker/musicbrainz-webservice/webservice.service
@@ -1,3 +1,3 @@
#!/usr/bin/env bash

exec run-consul-template -config /etc/consul-template-webservice.conf
exec /usr/local/bin/start_musicbrainz_server.sh
13 changes: 0 additions & 13 deletions docker/musicbrainz-website/consul-template-template-renderer.conf

This file was deleted.

6 changes: 0 additions & 6 deletions docker/musicbrainz-website/consul-template-website.conf
@@ -1,9 +1,3 @@
template {
source = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm.ctmpl"
destination = "/home/musicbrainz/musicbrainz-server/lib/DBDefs.pm"
command = "dbdefs_to_js.sh"
}

exec {
command = "start_musicbrainz_server.sh"
splay = "60s"
Expand Down
2 changes: 1 addition & 1 deletion docker/musicbrainz-website/template-renderer.service
Expand Up @@ -2,4 +2,4 @@

export RENDERER_WORKERS=${RENDERER_WORKERS:-10}

exec run-consul-template -config /etc/consul-template-template-renderer.conf
exec /usr/local/bin/start_template_renderer.sh
4 changes: 3 additions & 1 deletion docker/musicbrainz-website/website.service
@@ -1,3 +1,5 @@
#!/usr/bin/env bash

exec run-consul-template -config /etc/consul-template-website.conf
/usr/local/bin/dbdefs_to_js.sh

exec /usr/local/bin/start_musicbrainz_server.sh

0 comments on commit b193952

Please sign in to comment.