Skip to content

Commit 5ace9c2

Browse files
committed
[misc] correct user suffix for CI
1 parent be9eb58 commit 5ace9c2

File tree

6 files changed

+131
-95
lines changed

6 files changed

+131
-95
lines changed

README.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# MariaDB Node.js connector
88

99
[![npm package][npm-image]][npm-url]
10-
[![Test Build][travis-image]][travis-url]
10+
[![CI Tests][ci-image]][ci-url]
1111
[![License (LGPL version 2.1)][licence-image]][licence-url]
1212
[![codecov][codecov-image]][codecov-url]
1313

@@ -18,13 +18,13 @@ MariaDB and MySQL client, 100% JavaScript, with TypeScript definition, with the
1818

1919
## Documentation
2020

21-
See [promise documentation](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md) for detailed API.
21+
See [promise documentation](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md) for detailed API.
2222

2323
[Callback documentation](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/callback-api.md) describe the callback wrapper for compatibility with existing drivers.
2424

2525
See [dedicated part](https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md#migrating-from-2x-or-mysqlmysql2-to-3x) for migration from mysql/mysql2 or from 2.x version.
2626

27-
27+
2828
## Why a New Client?
2929

3030
While there are existing MySQL clients that work with MariaDB, (such as the [`mysql`](https://www.npmjs.com/package/mysql) and [`mysql2`](https://www.npmjs.com/package/mysql2) clients), the MariaDB Node.js Connector offers new functionality, like [Insert Streaming](#insert-streaming), [Pipelining](#pipelining), [ed25519 plugin authentication](https://mariadb.org/history-of-mysql-mariadb-authentication-protocols/) while making no compromises on performance.
@@ -41,7 +41,7 @@ Connector is production grade quality, with multiple features:
4141

4242
see some of those features:
4343

44-
### Insert Streaming
44+
### Insert Streaming
4545

4646
Using a Readable stream in your application, you can stream `INSERT` statements to MariaDB through the Connector.
4747

@@ -52,7 +52,7 @@ Using a Readable stream in your application, you can stream `INSERT` statements
5252
connection.query("INSERT INTO myTable VALUE (?)", [readableStream]);
5353
});
5454
```
55-
55+
5656
### Pipelining
5757

5858
With Pipelining, the Connector sends commands without waiting for server results, preserving order. For instance, consider the use of executing two `INSERT` statements.
@@ -64,7 +64,7 @@ With Pipelining, the Connector sends commands without waiting for server results
6464
The Connector doesn't wait for query results before sending the next `INSERT` statement. Instead, it sends queries one after the other, avoiding much of the network latency.
6565

6666
For more information, see the [Pipelining](/documentation/pipelining.md) documentation.
67-
67+
6868
### Bulk insert
6969

7070
Some use cases require a large amount of data to be inserted into a database table. By using batch processing, these queries can be sent to the database in one call, thus improving performance.
@@ -74,7 +74,7 @@ For more information, see the [Batch](/documentation/batch.md) documentation.
7474

7575
## Benchmarks
7676

77-
MariaDB provides benchmarks comparing the Connector with other Node.js MariaDB/MySQL clients, including:
77+
MariaDB provides benchmarks comparing the Connector with other Node.js MariaDB/MySQL clients, including:
7878

7979
* [`promise-mysql`](https://www.npmjs.com/package/promise-mysql) version 5.2.0 + [`mysql`](https://www.npmjs.com/package/mysql) version 2.18.1
8080
* [`mysql2`](https://www.npmjs.com/package/mysql2) version 3.1.0
@@ -139,15 +139,15 @@ A big thanks to all contributors
139139
<img src="https://contrib.rocks/image?repo=mariadb-corporation/mariadb-connector-nodejs&max=180&columns=15" alt="contributors list"/>
140140
</a>
141141

142-
## Contributing
142+
## Contributing
143143

144144
If you would like to contribute to the MariaDB Node.js Connector, please follow the instructions given in the [contributing guide.](/CONTRIBUTING.md)
145145

146146
To file an issue or follow the development, see [JIRA](https://jira.mariadb.org/projects/CONJS/issues/).
147147

148148

149-
[travis-image]:https://travis-ci.com/mariadb-corporation/mariadb-connector-nodejs.svg?branch=master
150-
[travis-url]:https://app.travis-ci.com/github/mariadb-corporation/mariadb-connector-nodejs
149+
[ci-image]:https://github.com/mariadb-corporation/mariadb-connector-nodejs/actions/workflows/ci.yml/badge.svg?branch=master
150+
[ci-url]:https://github.com/mariadb-corporation/mariadb-connector-nodejs/actions/workflows/ci.yml
151151
[npm-image]:https://img.shields.io/npm/v/mariadb.svg
152152
[npm-url]:http://npmjs.org/package/mariadb
153153
[licence-image]:https://img.shields.io/badge/license-GNU%20LGPL%20version%202.1-green.svg?style=flat-square

test/base.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,10 @@ module.exports.utf8Collation = () => {
126126
const collation = Collations.fromName(collationString.toUpperCase());
127127
return collation.charset === 'utf8' || collation.charset === 'utf8mb4';
128128
};
129+
130+
module.exports.getHostSuffix = function getHostSuffix() {
131+
if (process.env.LOCAL_DB === 'local') {
132+
return "@'localhost'";
133+
}
134+
return "@'%'";
135+
};

test/integration/test-auth-plugin.js

Lines changed: 54 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const Conf = require('../conf');
99
const fs = require('fs');
1010
const os = require('os');
1111
const path = require('path');
12-
const { isMaxscale } = require('../base');
12+
const { isMaxscale, getHostSuffix } = require('../base');
1313

1414
describe('authentication plugin', () => {
1515
let rsaPublicKey = process.env.TEST_RSA_PUBLIC_KEY;
@@ -36,37 +36,41 @@ describe('authentication plugin', () => {
3636
}
3737
}
3838

39-
await shareConn.query("DROP USER IF EXISTS 'sha256User'@'%'").catch((e) => {});
40-
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User'@'%'").catch((e) => {});
41-
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User2'@'%'").catch((e) => {});
42-
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User3'@'%'").catch((e) => {});
43-
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User4'@'%'").catch((e) => {});
39+
await shareConn.query("DROP USER IF EXISTS 'sha256User'" + getHostSuffix()).catch((e) => {});
40+
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User'" + getHostSuffix()).catch((e) => {});
41+
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User2'" + getHostSuffix()).catch((e) => {});
42+
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User3'" + getHostSuffix()).catch((e) => {});
43+
await shareConn.query("DROP USER IF EXISTS 'cachingSha256User4'" + getHostSuffix()).catch((e) => {});
4444

4545
if (!shareConn.info.isMariaDB()) {
4646
if (shareConn.info.hasMinVersion(8, 0, 0)) {
47-
await shareConn.query("CREATE USER 'sha256User'@'%' IDENTIFIED WITH sha256_password BY 'password'");
48-
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'sha256User'@'%'");
47+
await shareConn.query(
48+
"CREATE USER 'sha256User'" + getHostSuffix() + " IDENTIFIED WITH sha256_password BY 'password'"
49+
);
50+
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'sha256User'" + getHostSuffix());
4951

5052
await shareConn.query(
51-
"CREATE USER 'cachingSha256User'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'"
53+
"CREATE USER 'cachingSha256User'" + getHostSuffix() + " IDENTIFIED WITH caching_sha2_password BY 'password'"
5254
);
53-
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User'@'%'");
55+
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User'" + getHostSuffix());
5456
await shareConn.query(
55-
"CREATE USER 'cachingSha256User2'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'"
57+
"CREATE USER 'cachingSha256User2'" + getHostSuffix() + " IDENTIFIED WITH caching_sha2_password BY 'password'"
5658
);
57-
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User2'@'%'");
59+
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User2'" + getHostSuffix());
5860
await shareConn.query(
59-
"CREATE USER 'cachingSha256User3'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'"
61+
"CREATE USER 'cachingSha256User3'" + getHostSuffix() + " IDENTIFIED WITH caching_sha2_password BY 'password'"
6062
);
61-
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User3'@'%'");
63+
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User3'" + getHostSuffix());
6264
await shareConn.query(
63-
"CREATE USER 'cachingSha256User4'@'%' IDENTIFIED WITH caching_sha2_password BY 'password'"
65+
"CREATE USER 'cachingSha256User4'" + getHostSuffix() + " IDENTIFIED WITH caching_sha2_password BY 'password'"
6466
);
65-
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User4'@'%'");
67+
await shareConn.query("GRANT ALL PRIVILEGES ON *.* TO 'cachingSha256User4'" + getHostSuffix());
6668
} else {
67-
await shareConn.query("CREATE USER 'sha256User'@'%'");
69+
await shareConn.query("CREATE USER 'sha256User'" + getHostSuffix());
6870
await shareConn.query(
69-
"GRANT ALL PRIVILEGES ON *.* TO 'sha256User'@'%' IDENTIFIED WITH sha256_password BY 'password'"
71+
"GRANT ALL PRIVILEGES ON *.* TO 'sha256User'" +
72+
getHostSuffix() +
73+
" IDENTIFIED WITH sha256_password BY 'password'"
7074
);
7175
}
7276
}
@@ -81,20 +85,24 @@ describe('authentication plugin', () => {
8185
if (res[0].a === 1 && !shareConn.info.hasMinVersion(10, 4, 0)) self.skip();
8286
try {
8387
await shareConn.query("INSTALL SONAME 'auth_ed25519'");
84-
await shareConn.query("drop user IF EXISTS verificationEd25519AuthPlugin@'%'");
88+
await shareConn.query('drop user IF EXISTS verificationEd25519AuthPlugin' + getHostSuffix());
8589
if (shareConn.info.hasMinVersion(10, 4, 0)) {
8690
await shareConn.query(
87-
"CREATE USER verificationEd25519AuthPlugin@'%' IDENTIFIED " +
91+
'CREATE USER verificationEd25519AuthPlugin@' +
92+
getHostSuffix() +
93+
' IDENTIFIED ' +
8894
"VIA ed25519 USING PASSWORD('MySup8%rPassw@ord')"
8995
);
9096
} else {
9197
await shareConn.query(
92-
"CREATE USER verificationEd25519AuthPlugin@'%' IDENTIFIED " +
98+
'CREATE USER verificationEd25519AuthPlugin' +
99+
getHostSuffix() +
100+
' IDENTIFIED ' +
93101
"VIA ed25519 USING '6aW9C7ENlasUfymtfMvMZZtnkCVlcb1ssxOLJ0kj/AA'"
94102
);
95103
}
96104
await shareConn.query(
97-
'GRANT SELECT on `' + Conf.baseConfig.database + "`.* to verificationEd25519AuthPlugin@'%'"
105+
'GRANT SELECT on `' + Conf.baseConfig.database + '`.* to verificationEd25519AuthPlugin' + getHostSuffix()
98106
);
99107
} catch (e) {
100108
this.skip();
@@ -227,11 +235,15 @@ describe('authentication plugin', () => {
227235
await shareConn.query("INSTALL PLUGIN pam SONAME 'auth_pam'");
228236
} catch (error) {}
229237
try {
230-
await shareConn.query("DROP USER IF EXISTS '" + process.env.TEST_PAM_USER + "'@'%'");
238+
await shareConn.query("DROP USER IF EXISTS '" + process.env.TEST_PAM_USER + "'" + getHostSuffix());
231239
} catch (error) {}
232240

233-
await shareConn.query("CREATE USER '" + process.env.TEST_PAM_USER + "'@'%' IDENTIFIED VIA pam USING 'mariadb'");
234-
await shareConn.query("GRANT SELECT ON *.* TO '" + process.env.TEST_PAM_USER + "'@'%' IDENTIFIED VIA pam");
241+
await shareConn.query(
242+
"CREATE USER '" + process.env.TEST_PAM_USER + "'" + getHostSuffix() + " IDENTIFIED VIA pam USING 'mariadb'"
243+
);
244+
await shareConn.query(
245+
"GRANT SELECT ON *.* TO '" + process.env.TEST_PAM_USER + "'" + +getHostSuffix() + ' IDENTIFIED VIA pam'
246+
);
235247
await shareConn.query('FLUSH PRIVILEGES');
236248

237249
let testPort = Conf.baseConfig.port;
@@ -258,18 +270,15 @@ describe('authentication plugin', () => {
258270
await shareConn.query("INSTALL PLUGIN pam SONAME 'auth_pam'");
259271
} catch (error) {}
260272
try {
261-
await shareConn.query("DROP USER IF EXISTS '" + process.env.TEST_PAM_USER + "'@'%'");
262-
} catch (error) {}
263-
try {
264-
await shareConn.query("DROP USER IF EXISTS '" + process.env.TEST_PAM_USER + "'@'localhost'");
273+
await shareConn.query("DROP USER IF EXISTS '" + process.env.TEST_PAM_USER + "'" + getHostSuffix());
265274
} catch (error) {}
266275

267-
await shareConn.query("CREATE USER '" + process.env.TEST_PAM_USER + "'@'%' IDENTIFIED VIA pam USING 'mariadb'");
268-
await shareConn.query("GRANT SELECT ON *.* TO '" + process.env.TEST_PAM_USER + "'@'%' IDENTIFIED VIA pam");
269276
await shareConn.query(
270-
"CREATE USER '" + process.env.TEST_PAM_USER + "'@'localhost' IDENTIFIED VIA pam USING 'mariadb'"
277+
"CREATE USER '" + process.env.TEST_PAM_USER + "'" + +getHostSuffix() + " IDENTIFIED VIA pam USING 'mariadb'"
278+
);
279+
await shareConn.query(
280+
"GRANT SELECT ON *.* TO '" + process.env.TEST_PAM_USER + "'" + +getHostSuffix() + ' IDENTIFIED VIA pam'
271281
);
272-
await shareConn.query("GRANT SELECT ON *.* TO '" + process.env.TEST_PAM_USER + "'@'localhost' IDENTIFIED VIA pam");
273282
await shareConn.query('FLUSH PRIVILEGES');
274283

275284
let testPort = Conf.baseConfig.port;
@@ -291,12 +300,14 @@ describe('authentication plugin', () => {
291300
shareConn.query("drop user IF EXISTS mysqltest1@'%'").catch((err) => {});
292301
shareConn
293302
.query(
294-
"CREATE USER mysqltest1@'%' IDENTIFIED " +
303+
'CREATE USER mysqltest1' +
304+
getHostSuffix() +
305+
' IDENTIFIED ' +
295306
"VIA ed25519 as password('!Passw0rd3') " +
296307
" OR mysql_native_password as password('!Passw0rd3Works')"
297308
)
298309
.then(() => {
299-
return shareConn.query('grant SELECT on `' + Conf.baseConfig.database + "`.* to mysqltest1@'%'");
310+
return shareConn.query('grant SELECT on `' + Conf.baseConfig.database + '`.* to mysqltest1' + getHostSuffix());
300311
})
301312
.then(() => {
302313
return base.createConnection({
@@ -635,13 +646,15 @@ describe('authentication plugin', () => {
635646
this.skip();
636647
}
637648

638-
await shareConn.query("drop user verifParsec@'%'").catch(() => {});
639-
await shareConn.query("CREATE USER verifParsec@'%' IDENTIFIED VIA parsec USING PASSWORD('MySup8%rPassw@ord')");
640-
await shareConn.query('GRANT SELECT on `' + Conf.baseConfig.database + "`.* to verifParsec@'%'");
649+
await shareConn.query('drop user verifParsec' + getHostSuffix()).catch(() => {});
650+
await shareConn.query(
651+
'CREATE USER verifParsec' + getHostSuffix() + " IDENTIFIED VIA parsec USING PASSWORD('MySup8%rPassw@ord')"
652+
);
653+
await shareConn.query('GRANT SELECT on `' + Conf.baseConfig.database + '`.* to verifParsec' + getHostSuffix());
641654

642-
await shareConn.query("drop user verifParsec2@'%'").catch(() => {});
643-
await shareConn.query("CREATE USER verifParsec2@'%' IDENTIFIED VIA parsec USING PASSWORD('')");
644-
await shareConn.query('GRANT SELECT on `' + Conf.baseConfig.database + "`.* to verifParsec2@'%'");
655+
await shareConn.query('drop user verifParsec2' + getHostSuffix()).catch(() => {});
656+
await shareConn.query('CREATE USER verifParsec2' + getHostSuffix() + " IDENTIFIED VIA parsec USING PASSWORD('')");
657+
await shareConn.query('GRANT SELECT on `' + Conf.baseConfig.database + '`.* to verifParsec2' + getHostSuffix());
645658

646659
let conn = await base.createConnection({
647660
user: 'verifParsec',

test/integration/test-change-user.js

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,41 @@
11
// SPDX-License-Identifier: LGPL-2.1-or-later
2-
// Copyright (c) 2015-2024 MariaDB Corporation Ab
2+
// Copyright (c) 2015-2025 MariaDB Corporation Ab
33

44
'use strict';
55

66
const base = require('../base.js');
77
const { assert } = require('chai');
88
const ServerStatus = require('../../lib/const/server-status');
99
const Conf = require('../conf');
10-
const { isMaxscale } = require('../base');
10+
const { isMaxscale, getHostSuffix } = require('../base');
1111
const path = require('path');
1212
const os = require('os');
1313
const fs = require('fs');
1414
const winston = require('winston');
1515

1616
describe('change user', () => {
1717
before(async () => {
18-
await shareConn.query("DROP USER ChangeUser@'%'").catch((e) => {});
19-
await shareConn.query("DROP USER ChangeUser2@'%'").catch((e) => {});
18+
await shareConn.query('DROP USER ChangeUser' + getHostSuffix()).catch((e) => {});
19+
await shareConn.query('DROP USER ChangeUser2' + getHostSuffix()).catch((e) => {});
2020
await shareConn.query('CREATE DATABASE IF NOT EXISTS test');
21-
await shareConn.query("CREATE USER ChangeUser@'%' IDENTIFIED BY 'm1P4ssw0@rd'");
22-
await shareConn.query('GRANT SELECT,EXECUTE ON `' + Conf.baseConfig.database + "`.* TO ChangeUser@'%'");
23-
await shareConn.query("CREATE USER ChangeUser2@'%' IDENTIFIED BY 'm1SecondP@rd'");
21+
await shareConn.query('CREATE USER ChangeUser' + getHostSuffix() + " IDENTIFIED BY 'm1P4ssw0@rd'");
2422
await shareConn.query(
25-
'GRANT SELECT,EXECUTE ON `' + Conf.baseConfig.database + "`.* TO ChangeUser2@'%' with grant option"
23+
'GRANT SELECT,EXECUTE ON `' + Conf.baseConfig.database + '`.* TO ChangeUser' + getHostSuffix()
24+
);
25+
await shareConn.query('CREATE USER ChangeUser2' + getHostSuffix() + " IDENTIFIED BY 'm1SecondP@rd'");
26+
await shareConn.query(
27+
'GRANT SELECT,EXECUTE ON `' +
28+
Conf.baseConfig.database +
29+
'`.* TO ChangeUser2' +
30+
getHostSuffix() +
31+
' with grant option'
2632
);
2733
await shareConn.query('FLUSH PRIVILEGES');
2834
});
2935

3036
after(async () => {
31-
await shareConn.query("DROP USER ChangeUser@'%'").catch((e) => {});
32-
await shareConn.query("DROP USER ChangeUser2@'%'").catch((e) => {});
37+
await shareConn.query('DROP USER ChangeUser' + getHostSuffix()).catch((e) => {});
38+
await shareConn.query('DROP USER ChangeUser2' + getHostSuffix()).catch((e) => {});
3339
});
3440

3541
it('mysql change user error', async function () {
@@ -84,7 +90,7 @@ describe('change user', () => {
8490
} else {
8591
conn.query('SELECT CURRENT_USER', (err, res) => {
8692
const user = res[0]['CURRENT_USER'];
87-
assert.equal(user, 'ChangeUser@%');
93+
assert.equal(user, 'ChangeUser' + getHostSuffix());
8894
assert(user !== currUser);
8995
conn.end();
9096
done();
@@ -234,7 +240,7 @@ describe('change user', () => {
234240
})
235241
.then((res) => {
236242
const user = res[0]['CURRENT_USER'];
237-
assert.equal(user, 'ChangeUser@%');
243+
assert.equal(user, 'ChangeUser' + getHostSuffix());
238244
return conn.changeUser({
239245
user: 'ChangeUser2',
240246
password: 'm1SecondP@rd',
@@ -246,7 +252,7 @@ describe('change user', () => {
246252
})
247253
.then((res) => {
248254
const user = res[0]['CURRENT_USER'];
249-
assert.equal(user, 'ChangeUser2@%');
255+
assert.equal(user, 'ChangeUser2' + getHostSuffix());
250256
conn.end();
251257
done();
252258
})
@@ -272,7 +278,7 @@ describe('change user', () => {
272278
})
273279
.then((res) => {
274280
const user = res[0]['CURRENT_USER'];
275-
assert.equal(user, 'ChangeUser@%');
281+
assert.equal(user, 'ChangeUser' + getHostSuffix());
276282
return conn.changeUser({
277283
user: 'ChangeUser2',
278284
password: 'm1SecondP@rd',
@@ -284,7 +290,7 @@ describe('change user', () => {
284290
})
285291
.then((res) => {
286292
const user = res[0]['CURRENT_USER'];
287-
assert.equal(user, 'ChangeUser2@%');
293+
assert.equal(user, 'ChangeUser2' + getHostSuffix());
288294
conn.end();
289295
done();
290296
})
@@ -311,7 +317,7 @@ describe('change user', () => {
311317
})
312318
.then((res) => {
313319
const user = res[0]['CURRENT_USER'];
314-
assert.equal(user, 'ChangeUser@%');
320+
assert.equal(user, 'ChangeUser' + getHostSuffix());
315321
return conn.changeUser({
316322
user: 'ChangeUser2',
317323
password: 'm1SecondP@rd',
@@ -323,7 +329,7 @@ describe('change user', () => {
323329
})
324330
.then((res) => {
325331
const user = res[0]['CURRENT_USER'];
326-
assert.equal(user, 'ChangeUser2@%');
332+
assert.equal(user, 'ChangeUser2' + getHostSuffix());
327333
conn.end();
328334
done();
329335
})
@@ -348,7 +354,7 @@ describe('change user', () => {
348354
})
349355
.then((res) => {
350356
const user = res[0]['CURRENT_USER'];
351-
assert.equal(user, 'ChangeUser@%');
357+
assert.equal(user, 'ChangeUser' + getHostSuffix());
352358
assert.equal(conn.__tests.getCollation().name, 'UTF8MB4_PERSIAN_CI');
353359
conn.end();
354360
done();

0 commit comments

Comments
 (0)