merging
This commit is contained in:
commit
eed928808e
@ -393,6 +393,7 @@ id c1 cnt
|
|||||||
1 0 3
|
1 0 3
|
||||||
2 2 1
|
2 2 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
create table t1(f1 int primary key,
|
create table t1(f1 int primary key,
|
||||||
f2 timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);
|
f2 timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP);
|
||||||
insert into t1(f1) values(1);
|
insert into t1(f1) values(1);
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
drop function if exists bug23333|
|
||||||
|
drop table if exists t1,t2|
|
||||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM|
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM|
|
||||||
CREATE TABLE t2 (a int NOT NULL auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB|
|
CREATE TABLE t2 (a int NOT NULL auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB|
|
||||||
insert into t2 values (1,1)|
|
insert into t2 values (1,1)|
|
||||||
@ -20,4 +22,5 @@ master-bin.000001 # Query 1 # #
|
|||||||
select count(*),@a from t1 /* must be 1,1 */|
|
select count(*),@a from t1 /* must be 1,1 */|
|
||||||
count(*) @a
|
count(*) @a
|
||||||
1 1
|
1 1
|
||||||
drop table t1, t2|
|
drop table t1,t2;
|
||||||
|
drop function if exists bug23333;
|
||||||
|
@ -78,6 +78,7 @@ alter table t1 modify a varchar(255);
|
|||||||
select length(a) from t1;
|
select length(a) from t1;
|
||||||
length(a)
|
length(a)
|
||||||
6
|
6
|
||||||
|
drop table t1;
|
||||||
select 0b01000001;
|
select 0b01000001;
|
||||||
0b01000001
|
0b01000001
|
||||||
A
|
A
|
||||||
|
@ -12,7 +12,7 @@ INSERT t1 VALUES (8,4,50) ON DUPLICATE KEY UPDATE c=c+1000;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
INSERT t1 VALUES (1,4,60) ON DUPLICATE KEY UPDATE c=c+10000;
|
INSERT t1 VALUES (1,4,60) ON DUPLICATE KEY UPDATE c=c+10000;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
-- error 1062
|
-- error ER_DUP_ENTRY
|
||||||
INSERT t1 VALUES (1,9,70) ON DUPLICATE KEY UPDATE c=c+100000, b=4;
|
INSERT t1 VALUES (1,9,70) ON DUPLICATE KEY UPDATE c=c+100000, b=4;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
@ -63,7 +63,7 @@ INSERT t1 SELECT 8,4,50 FROM DUAL ON DUPLICATE KEY UPDATE c=c+1000;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
INSERT t1 SELECT 1,4,60 FROM DUAL ON DUPLICATE KEY UPDATE c=c+10000;
|
INSERT t1 SELECT 1,4,60 FROM DUAL ON DUPLICATE KEY UPDATE c=c+10000;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
-- error 1062
|
-- error ER_DUP_ENTRY
|
||||||
INSERT t1 SELECT 1,9,70 FROM DUAL ON DUPLICATE KEY UPDATE c=c+100000, b=4;
|
INSERT t1 SELECT 1,9,70 FROM DUAL ON DUPLICATE KEY UPDATE c=c+100000, b=4;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
TRUNCATE TABLE t1;
|
TRUNCATE TABLE t1;
|
||||||
@ -76,7 +76,7 @@ INSERT t1 SELECT a,b,c FROM t2 WHERE d=1 ON DUPLICATE KEY UPDATE c=t1.c+100;
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
INSERT t1 SET a=5 ON DUPLICATE KEY UPDATE b=0;
|
INSERT t1 SET a=5 ON DUPLICATE KEY UPDATE b=0;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
--error 1052
|
--error ER_NON_UNIQ_ERROR
|
||||||
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
|
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
|
||||||
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=t1.c+VALUES(t1.a);
|
INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=t1.c+VALUES(t1.a);
|
||||||
SELECT *, VALUES(a) FROM t1;
|
SELECT *, VALUES(a) FROM t1;
|
||||||
@ -95,9 +95,9 @@ insert ignore into t1 select a from t1 as t2 on duplicate key update a=t1.a+1 ;
|
|||||||
select * from t1;
|
select * from t1;
|
||||||
insert into t1 select 1 on duplicate key update a=2;
|
insert into t1 select 1 on duplicate key update a=2;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
--error 1052
|
--error ER_NON_UNIQ_ERROR
|
||||||
insert into t1 select a from t1 on duplicate key update a=a+1 ;
|
insert into t1 select a from t1 on duplicate key update a=a+1 ;
|
||||||
--error 1052
|
--error ER_NON_UNIQ_ERROR
|
||||||
insert ignore into t1 select a from t1 on duplicate key update a=t1.a+1 ;
|
insert ignore into t1 select a from t1 on duplicate key update a=t1.a+1 ;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
@ -171,13 +171,13 @@ SET SQL_MODE = 'TRADITIONAL';
|
|||||||
|
|
||||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL);
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT NOT NULL);
|
||||||
|
|
||||||
--error 1364
|
--error ER_NO_DEFAULT_FOR_FIELD
|
||||||
INSERT INTO t1 (a) VALUES (1);
|
INSERT INTO t1 (a) VALUES (1);
|
||||||
|
|
||||||
--error 1364
|
--error ER_NO_DEFAULT_FOR_FIELD
|
||||||
INSERT INTO t1 (a) VALUES (1) ON DUPLICATE KEY UPDATE a = b;
|
INSERT INTO t1 (a) VALUES (1) ON DUPLICATE KEY UPDATE a = b;
|
||||||
|
|
||||||
--error 1364
|
--error ER_NO_DEFAULT_FOR_FIELD
|
||||||
INSERT INTO t1 (a) VALUES (1) ON DUPLICATE KEY UPDATE b = b;
|
INSERT INTO t1 (a) VALUES (1) ON DUPLICATE KEY UPDATE b = b;
|
||||||
|
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
@ -278,7 +278,7 @@ INSERT INTO t1 (id,c1) VALUES (1,10);
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
CREATE TABLE t2 (id INT, c1 INT);
|
CREATE TABLE t2 (id INT, c1 INT);
|
||||||
INSERT INTO t2 VALUES (1,NULL), (2,2);
|
INSERT INTO t2 VALUES (1,NULL), (2,2);
|
||||||
--error 1048
|
--error ER_BAD_NULL_ERROR
|
||||||
INSERT INTO t1 (id,c1) SELECT 1,NULL
|
INSERT INTO t1 (id,c1) SELECT 1,NULL
|
||||||
ON DUPLICATE KEY UPDATE c1=NULL;
|
ON DUPLICATE KEY UPDATE c1=NULL;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
@ -290,6 +290,7 @@ INSERT IGNORE INTO t1 (id,c1) SELECT * FROM t2
|
|||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#28904: INSERT .. ON DUPLICATE was silently updating rows when it
|
# Bug#28904: INSERT .. ON DUPLICATE was silently updating rows when it
|
||||||
|
@ -4,11 +4,15 @@
|
|||||||
delimiter |;
|
delimiter |;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #13270 INSERT,UPDATE,etc that calls func with side-effect does not binlog
|
# Bug#13270 INSERT,UPDATE,etc that calls func with side-effect does not binlog
|
||||||
# Bug #23333 stored function + non-transac table + transac table =
|
# Bug#23333 stored function + non-transac table + transac table =
|
||||||
# breaks stmt-based binlog
|
# breaks stmt-based binlog
|
||||||
# Bug #27395 OPTION_STATUS_NO_TRANS_UPDATE is not preserved at the end of SF()
|
# Bug#27395 OPTION_STATUS_NO_TRANS_UPDATE is not preserved at the end of SF()
|
||||||
#
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop function if exists bug23333|
|
||||||
|
drop table if exists t1,t2|
|
||||||
|
--enable_warnings
|
||||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM|
|
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM|
|
||||||
CREATE TABLE t2 (a int NOT NULL auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB|
|
CREATE TABLE t2 (a int NOT NULL auto_increment, b int, PRIMARY KEY (a)) ENGINE=InnoDB|
|
||||||
|
|
||||||
@ -29,5 +33,10 @@ insert into t2 values (bug23333(),1)|
|
|||||||
--replace_column 2 # 5 # 6 #
|
--replace_column 2 # 5 # 6 #
|
||||||
show binlog events from 98 /* with fixes for #23333 will show there are 2 queries */|
|
show binlog events from 98 /* with fixes for #23333 will show there are 2 queries */|
|
||||||
select count(*),@a from t1 /* must be 1,1 */|
|
select count(*),@a from t1 /* must be 1,1 */|
|
||||||
drop table t1, t2|
|
|
||||||
|
|
||||||
|
delimiter ;|
|
||||||
|
|
||||||
|
# clean-up
|
||||||
|
|
||||||
|
drop table t1,t2;
|
||||||
|
drop function if exists bug23333;
|
||||||
|
@ -83,6 +83,7 @@ insert into t1 values("aaa ");
|
|||||||
select length(a) from t1;
|
select length(a) from t1;
|
||||||
alter table t1 modify a varchar(255);
|
alter table t1 modify a varchar(255);
|
||||||
select length(a) from t1;
|
select length(a) from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#35658 (An empty binary value leads to mysqld crash)
|
# Bug#35658 (An empty binary value leads to mysqld crash)
|
||||||
|
@ -49,11 +49,11 @@ $0 Ver $VERSION
|
|||||||
|
|
||||||
Usage: $0 db_name[./table_regex/] [new_db_name | directory]
|
Usage: $0 db_name[./table_regex/] [new_db_name | directory]
|
||||||
|
|
||||||
-?, --help display this helpscreen and exit
|
-?, --help display this help-screen and exit
|
||||||
-u, --user=# user for database login if not current user
|
-u, --user=# user for database login if not current user
|
||||||
-p, --password=# password to use when connecting to server (if not set
|
-p, --password=# password to use when connecting to server (if not set
|
||||||
in my.cnf, which is recommended)
|
in my.cnf, which is recommended)
|
||||||
-h, --host=# Hostname for local server when connecting over TCP/IP
|
-h, --host=# hostname for local server when connecting over TCP/IP
|
||||||
-P, --port=# port to use when connecting to local server with TCP/IP
|
-P, --port=# port to use when connecting to local server with TCP/IP
|
||||||
-S, --socket=# socket to use when connecting to local server
|
-S, --socket=# socket to use when connecting to local server
|
||||||
|
|
||||||
@ -86,7 +86,7 @@ sub usage {
|
|||||||
|
|
||||||
# Do not initialize user or password options; that way, any user/password
|
# Do not initialize user or password options; that way, any user/password
|
||||||
# options specified in option files will be used. If no values are specified
|
# options specified in option files will be used. If no values are specified
|
||||||
# all, the defaults will be used (login name, no password).
|
# at all, the defaults will be used (login name, no password).
|
||||||
|
|
||||||
my %opt = (
|
my %opt = (
|
||||||
noindices => 0,
|
noindices => 0,
|
||||||
@ -95,7 +95,7 @@ my %opt = (
|
|||||||
method => "cp",
|
method => "cp",
|
||||||
flushlog => 0,
|
flushlog => 0,
|
||||||
);
|
);
|
||||||
Getopt::Long::Configure(qw(no_ignore_case)); # disambuguate -p and -P
|
Getopt::Long::Configure(qw(no_ignore_case)); # disambiguate -p and -P
|
||||||
GetOptions( \%opt,
|
GetOptions( \%opt,
|
||||||
"help",
|
"help",
|
||||||
"host|h=s",
|
"host|h=s",
|
||||||
@ -453,7 +453,7 @@ else {
|
|||||||
printf "Locked $num_tables tables in %d seconds.\n", time-$start unless $opt{quiet};
|
printf "Locked $num_tables tables in %d seconds.\n", time-$start unless $opt{quiet};
|
||||||
$hc_started = time; # count from time lock is granted
|
$hc_started = time; # count from time lock is granted
|
||||||
|
|
||||||
# flush tables to make on-disk copy uptodate
|
# flush tables to make on-disk copy up to date
|
||||||
$start = time;
|
$start = time;
|
||||||
$dbh->do("FLUSH TABLES /*!32323 $hc_tables */");
|
$dbh->do("FLUSH TABLES /*!32323 $hc_tables */");
|
||||||
printf "Flushed tables ($hc_tables) in %d seconds.\n", time-$start unless $opt{quiet};
|
printf "Flushed tables ($hc_tables) in %d seconds.\n", time-$start unless $opt{quiet};
|
||||||
@ -895,7 +895,7 @@ tables and you don't want to have all the tables locked for the
|
|||||||
whole duration.
|
whole duration.
|
||||||
|
|
||||||
In this situation, I<if> you are happy for groups of tables to be
|
In this situation, I<if> you are happy for groups of tables to be
|
||||||
backed up separately (and thus possibly not be logically consistant
|
backed up separately (and thus possibly not be logically consistent
|
||||||
with one another) then you can run mysqlhotcopy several times on
|
with one another) then you can run mysqlhotcopy several times on
|
||||||
the same database each with different db_name./table_regex/.
|
the same database each with different db_name./table_regex/.
|
||||||
All but the first should use the --addtodest option so the tables
|
All but the first should use the --addtodest option so the tables
|
||||||
@ -920,7 +920,7 @@ server in a mutual replication setup.
|
|||||||
|
|
||||||
=item --regexp pattern
|
=item --regexp pattern
|
||||||
|
|
||||||
Copy all databases with names matching the pattern
|
Copy all databases with names matching the pattern.
|
||||||
|
|
||||||
=item --regexp /pattern1/./pattern2/
|
=item --regexp /pattern1/./pattern2/
|
||||||
|
|
||||||
@ -933,7 +933,7 @@ names begin with 'bar' from all databases which names end with 'foo':
|
|||||||
=item db_name./pattern/
|
=item db_name./pattern/
|
||||||
|
|
||||||
Copy only tables matching pattern. Shell metacharacters ( (, ), |, !,
|
Copy only tables matching pattern. Shell metacharacters ( (, ), |, !,
|
||||||
etc.) have to be escaped (e.g. \). For example, to select all tables
|
etc.) have to be escaped (e.g., \). For example, to select all tables
|
||||||
in database db1 whose names begin with 'foo' or 'bar':
|
in database db1 whose names begin with 'foo' or 'bar':
|
||||||
|
|
||||||
mysqlhotcopy --indices --method=cp db1./^\(foo\|bar\)/
|
mysqlhotcopy --indices --method=cp db1./^\(foo\|bar\)/
|
||||||
@ -947,19 +947,19 @@ that do not begin with foo nor bar:
|
|||||||
|
|
||||||
=item -?, --help
|
=item -?, --help
|
||||||
|
|
||||||
Display helpscreen and exit
|
Display help-screen and exit.
|
||||||
|
|
||||||
=item -u, --user=#
|
=item -u, --user=#
|
||||||
|
|
||||||
user for database login if not current user
|
User for database login if not current user.
|
||||||
|
|
||||||
=item -p, --password=#
|
=item -p, --password=#
|
||||||
|
|
||||||
password to use when connecting to the server. Note that you are strongly
|
Password to use when connecting to the server. Note that you are strongly
|
||||||
encouraged *not* to use this option as every user would be able to see the
|
encouraged *not* to use this option as every user would be able to see the
|
||||||
password in the process list. Instead use the '[mysqlhotcopy]' section in
|
password in the process list. Instead use the '[mysqlhotcopy]' section in
|
||||||
one of the config files, normally /etc/my.cnf or your personal ~/.my.cnf.
|
one of the config files, normally /etc/my.cnf or your personal ~/.my.cnf.
|
||||||
(See the chapter 'my.cnf Option Files' in the manual)
|
(See the chapter 'my.cnf Option Files' in the manual.)
|
||||||
|
|
||||||
=item -h, -h, --host=#
|
=item -h, -h, --host=#
|
||||||
|
|
||||||
@ -968,12 +968,12 @@ different from 'localhost' will trigger mysqlhotcopy to use TCP/IP connection.
|
|||||||
|
|
||||||
=item -P, --port=#
|
=item -P, --port=#
|
||||||
|
|
||||||
port to use when connecting to MySQL server with TCP/IP. This is only used
|
Port to use when connecting to MySQL server with TCP/IP. This is only used
|
||||||
when using the --host option.
|
when using the --host option.
|
||||||
|
|
||||||
=item -S, --socket=#
|
=item -S, --socket=#
|
||||||
|
|
||||||
UNIX domain socket to use when connecting to local server
|
UNIX domain socket to use when connecting to local server.
|
||||||
|
|
||||||
=item --noindices
|
=item --noindices
|
||||||
|
|
||||||
@ -983,7 +983,7 @@ on the backup.
|
|||||||
|
|
||||||
=item --method=#
|
=item --method=#
|
||||||
|
|
||||||
method for copy (only "cp" currently supported). Alpha support for
|
Method for copy (only "cp" currently supported). Alpha support for
|
||||||
"scp" was added in November 2000. Your experience with the scp method
|
"scp" was added in November 2000. Your experience with the scp method
|
||||||
will vary with your ability to understand how scp works. 'man scp'
|
will vary with your ability to understand how scp works. 'man scp'
|
||||||
and 'man ssh' are your friends.
|
and 'man ssh' are your friends.
|
||||||
@ -1000,15 +1000,15 @@ scp or rsync the files at your leisure.
|
|||||||
|
|
||||||
=item -q, --quiet
|
=item -q, --quiet
|
||||||
|
|
||||||
be silent except for errors
|
Be silent except for errors.
|
||||||
|
|
||||||
=item --debug
|
=item --debug
|
||||||
|
|
||||||
Debug messages are displayed
|
Debug messages are displayed.
|
||||||
|
|
||||||
=item -n, --dryrun
|
=item -n, --dryrun
|
||||||
|
|
||||||
Display commands without actually doing them
|
Display commands without actually doing them.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
@ -1030,18 +1030,18 @@ to be specified on the command line:
|
|||||||
mysqlhotcopy db newdb t1 t2 /^foo_/ : t3 /^bar_/ : +
|
mysqlhotcopy db newdb t1 t2 /^foo_/ : t3 /^bar_/ : +
|
||||||
|
|
||||||
where ":" delimits the subsets, the /^foo_/ indicates all tables
|
where ":" delimits the subsets, the /^foo_/ indicates all tables
|
||||||
with names begining with "foo_" and the "+" indicates all tables
|
with names beginning with "foo_" and the "+" indicates all tables
|
||||||
not copied by the previous subsets.
|
not copied by the previous subsets.
|
||||||
|
|
||||||
newdb is either another not existing database or a full path to a directory
|
'newdb' is either the name of the new database, or the full path name
|
||||||
where we can create a directory 'db'
|
of the new database file. The database should not already exist.
|
||||||
|
|
||||||
Add option to lock each table in turn for people who don\'t need
|
Add option to lock each table in turn for people who don\'t need
|
||||||
cross-table integrity.
|
cross-table integrity.
|
||||||
|
|
||||||
Add option to FLUSH STATUS just before UNLOCK TABLES.
|
Add option to FLUSH STATUS just before UNLOCK TABLES.
|
||||||
|
|
||||||
Add support for other copy methods (eg tar to single file?).
|
Add support for other copy methods (e.g., tar to single file?).
|
||||||
|
|
||||||
Add support for forthcoming MySQL ``RAID'' table subdirectory layouts.
|
Add support for forthcoming MySQL ``RAID'' table subdirectory layouts.
|
||||||
|
|
||||||
@ -1049,26 +1049,26 @@ Add support for forthcoming MySQL ``RAID'' table subdirectory layouts.
|
|||||||
|
|
||||||
Tim Bunce
|
Tim Bunce
|
||||||
|
|
||||||
Martin Waite - added checkpoint, flushlog, regexp and dryrun options
|
Martin Waite - Added checkpoint, flushlog, regexp and dryrun options.
|
||||||
Fixed cleanup of targets when hotcopy fails.
|
Fixed cleanup of targets when hotcopy fails.
|
||||||
Added --record_log_pos.
|
Added --record_log_pos.
|
||||||
RAID tables are now copied (don't know if this works over scp).
|
RAID tables are now copied (don't know if this works over scp).
|
||||||
|
|
||||||
Ralph Corderoy - added synonyms for commands
|
Ralph Corderoy - Added synonyms for commands.
|
||||||
|
|
||||||
Scott Wiersdorf - added table regex and scp support
|
Scott Wiersdorf - Added table regex and scp support.
|
||||||
|
|
||||||
Monty - working --noindex (copy only first 2048 bytes of index file)
|
Monty - Working --noindex (copy only first 2048 bytes of index file).
|
||||||
Fixes for --method=scp
|
Fixes for --method=scp.
|
||||||
|
|
||||||
Ask Bjoern Hansen - Cleanup code to fix a few bugs and enable -w again.
|
Ask Bjoern Hansen - Cleanup code to fix a few bugs and enable -w again.
|
||||||
|
|
||||||
Emil S. Hansen - Added resetslave and resetmaster.
|
Emil S. Hansen - Added resetslave and resetmaster.
|
||||||
|
|
||||||
Jeremy D. Zawodny - Removed depricated DBI calls. Fixed bug which
|
Jeremy D. Zawodny - Removed deprecated DBI calls. Fixed bug which
|
||||||
resulted in nothing being copied when a regexp was specified but no
|
resulted in nothing being copied when a regexp was specified but no
|
||||||
database name(s).
|
database name(s).
|
||||||
|
|
||||||
Martin Waite - Fix to handle database name that contains space.
|
Martin Waite - Fix to handle database name that contains space.
|
||||||
|
|
||||||
Paul DuBois - Remove end '/' from directory names
|
Paul DuBois - Remove end '/' from directory names.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user