Commit 3479f428 authored by unknown's avatar unknown

fixed bug in mysqltest

updated mysql-test-run with features from 4.0
added a test case for broken load data from master for MyISAM tables
with checksum


client/mysqltest.c:
  fixed parser bug
mysql-test/mysql-test-run.sh:
  backported changes from 4.0 ( needed to be able to run client in gdb)
mysql-test/t/rpl000006.test:
  updated test case for a bug
parent 45ea63fe
...@@ -1359,6 +1359,10 @@ int read_line(char* buf, int size) ...@@ -1359,6 +1359,10 @@ int read_line(char* buf, int size)
*p = 0; *p = 0;
return 0; return 0;
} }
else if (c == '\'')
state = R_Q1;
else if (c == '"')
state = R_Q2;
else else
state = R_NORMAL; state = R_NORMAL;
break; break;
......
...@@ -99,8 +99,9 @@ export MYSQL_TEST_DIR ...@@ -99,8 +99,9 @@ export MYSQL_TEST_DIR
STD_DATA=$MYSQL_TEST_DIR/std_data STD_DATA=$MYSQL_TEST_DIR/std_data
hostname=`hostname` # Installed in the mysql privilege table hostname=`hostname` # Installed in the mysql privilege table
TESTDIR="$MYSQL_TEST_DIR/t/" TESTDIR="$MYSQL_TEST_DIR/t"
TESTSUFFIX=test TESTSUFFIX=test
TOT_SKIP=0
TOT_PASS=0 TOT_PASS=0
TOT_FAIL=0 TOT_FAIL=0
TOT_TEST=0 TOT_TEST=0
...@@ -108,6 +109,7 @@ USERT=0 ...@@ -108,6 +109,7 @@ USERT=0
SYST=0 SYST=0
REALT=0 REALT=0
MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp MYSQL_TMP_DIR=$MYSQL_TEST_DIR/var/tmp
SLAVE_LOAD_TMPDIR=../../var/tmp #needs to be same length to test logging
RES_SPACE=" " RES_SPACE=" "
MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \ MYSQLD_SRC_DIRS="strings mysys include extra regex isam merge myisam \
myisammrg heap sql" myisammrg heap sql"
...@@ -124,6 +126,7 @@ USE_RUNNING_SERVER=1 ...@@ -124,6 +126,7 @@ USE_RUNNING_SERVER=1
DO_GCOV="" DO_GCOV=""
DO_GDB="" DO_GDB=""
DO_DDD="" DO_DDD=""
DO_CLIENT_GDB=""
SLEEP_TIME=2 SLEEP_TIME=2
DBUSER="" DBUSER=""
...@@ -135,10 +138,33 @@ while test $# -gt 0; do ...@@ -135,10 +138,33 @@ while test $# -gt 0; do
--tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;; --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
--master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;; --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
--slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;; --slave_port=*) SLAVE_MYPORT=`$ECHO "$1" | $SED -e "s;--slave_port=;;"` ;;
--with-openssl)
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
--ssl-ca=$BASEDIR/SSL/cacert.pem \
--ssl-cert=$BASEDIR/SSL/server-cert.pem \
--ssl-key=$BASEDIR/SSL/server-key.pem"
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
--ssl-ca=$BASEDIR/SSL/cacert.pem \
--ssl-cert=$BASEDIR/SSL/server-cert.pem \
--ssl-key=$BASEDIR/SSL/server-key.pem" ;;
--skip-innobase)
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-innobase"
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-innobase" ;;
--skip-bdb)
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-bdb"
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-bdb" ;;
--skip-rpl) NO_SLAVE=1 ;; --skip-rpl) NO_SLAVE=1 ;;
--skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
--do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
--record) --record)
RECORD=1; RECORD=1;
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;; EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
--bench)
DO_BENCH=1
NO_SLAVE=1
;;
--big*) # Actually --big-test
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
--sleep=*) --sleep=*)
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"` SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
...@@ -160,18 +186,22 @@ while test $# -gt 0; do ...@@ -160,18 +186,22 @@ while test $# -gt 0; do
;; ;;
--gdb ) --gdb )
if [ x$BINARY_DIST = x1 ] ; then if [ x$BINARY_DIST = x1 ] ; then
$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with -gdb option" $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
fi fi
DO_GDB=1 DO_GDB=1
USE_RUNNING_SERVER="" USE_RUNNING_SERVER=""
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-stack" ;;
--client-gdb )
if [ x$BINARY_DIST = x1 ] ; then
$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --client-gdb option"
fi
DO_CLIENT_GDB=1
;; ;;
--ddd ) --ddd )
if [ x$BINARY_DIST = x1 ] ; then if [ x$BINARY_DIST = x1 ] ; then
$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with -gdb option" $ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --ddd option"
fi fi
DO_DDD=1 DO_DDD=1
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-stack"
USE_RUNNING_SERVER="" USE_RUNNING_SERVER=""
;; ;;
--skip-*) --skip-*)
...@@ -180,9 +210,9 @@ while test $# -gt 0; do ...@@ -180,9 +210,9 @@ while test $# -gt 0; do
;; ;;
--debug) --debug)
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \ EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
--debug=d:t:O,$MYSQL_TMP_DIR/master.trace" --debug=d:t:O,$MYSQL_TEST_DIR/var/log/master.trace"
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \ EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
--debug=d:t:O,$MYSQL_TMP_DIR/slave.trace" --debug=d:t:O,$MYSQL_TEST_DIR/var/log/slave.trace"
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT --debug"
;; ;;
-- ) shift; break ;; -- ) shift; break ;;
...@@ -231,16 +261,23 @@ fi ...@@ -231,16 +261,23 @@ fi
[ -z "$COLUMNS" ] && COLUMNS=80 [ -z "$COLUMNS" ] && COLUMNS=80
E=`$EXPR $COLUMNS - 8` E=`$EXPR $COLUMNS - 8`
#DASH72=`expr substr '------------------------------------------------------------------------' 1 $E` #DASH72=`$EXPR substr '------------------------------------------------------------------------' 1 $E`
DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E` DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E`
# on source dist, we pick up freshly build executables # on source dist, we pick up freshly build executables
# on binary, use what is installed # on binary, use what is installed
if [ x$SOURCE_DIST = x1 ] ; then if [ x$SOURCE_DIST = x1 ] ; then
MYSQLD="$BASEDIR/sql/mysqld" MYSQLD="$BASEDIR/sql/mysqld"
if [ -e "$BASEDIR/client/.libs/mysqltest" ] ; then
[ -e "$BASEDIR/client/.libs/lt-mysqltest" ] || $BASEDIR/client/mysqltest -V
MYSQL_TEST="$BASEDIR/client/.libs/lt-mysqltest"
else
MYSQL_TEST="$BASEDIR/client/mysqltest" MYSQL_TEST="$BASEDIR/client/mysqltest"
fi
MYSQLADMIN="$BASEDIR/client/mysqladmin" MYSQLADMIN="$BASEDIR/client/mysqladmin"
MYSQL="$BASEDIR/client/mysql" MYSQL="$BASEDIR/client/mysql"
LANGUAGE="$BASEDIR/sql/share/english/"
CHARSETSDIR="$BASEDIR/sql/share/charsets"
INSTALL_DB="./install_test_db" INSTALL_DB="./install_test_db"
else else
MYSQLD="$BASEDIR/bin/mysqld" MYSQLD="$BASEDIR/bin/mysqld"
...@@ -248,6 +285,14 @@ else ...@@ -248,6 +285,14 @@ else
MYSQLADMIN="$BASEDIR/bin/mysqladmin" MYSQLADMIN="$BASEDIR/bin/mysqladmin"
MYSQL="$BASEDIR/bin/mysql" MYSQL="$BASEDIR/bin/mysql"
INSTALL_DB="./install_test_db -bin" INSTALL_DB="./install_test_db -bin"
if test -d "$BASEDIR/share/mysql/english"
then
LANGUAGE="$BASEDIR/share/mysql/english/"
CHARSETSDIR="$BASEDIR/share/mysql/charsets"
else
LANGUAGE="$BASEDIR/share/english/"
CHARSETSDIR="$BASEDIR/share/charsets"
fi
fi fi
# If we should run all tests cases, we will use a local server for that # If we should run all tests cases, we will use a local server for that
...@@ -272,7 +317,10 @@ then ...@@ -272,7 +317,10 @@ then
fi fi
MYSQL_TEST="$MYSQL_TEST --no-defaults --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent -v --tmpdir=$MYSQL_TMP_DIR" MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB --user=$DBUSER --password=$DBPASSWD --silent -v --tmpdir=$MYSQL_TMP_DIR"
MYSQL_TEST_BIN=$MYSQL_TEST
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out GCOV_MSG=$MYSQL_TMP_DIR/mysqld-gcov.out
...@@ -303,11 +351,18 @@ show_failed_diff () ...@@ -303,11 +351,18 @@ show_failed_diff ()
{ {
reject_file=r/$1.reject reject_file=r/$1.reject
result_file=r/$1.result result_file=r/$1.result
eval_file=r/$1.eval
if [ -f $eval_file ]
then
result_file=$eval_file
fi
if [ -x "$DIFF" ] && [ -f $reject_file ] if [ -x "$DIFF" ] && [ -f $reject_file ]
then then
echo "Below are the diffs between actual and expected results:" echo "Below are the diffs between actual and expected results:"
echo "-------------------------------------------------------" echo "-------------------------------------------------------"
$DIFF -c $result_file $reject_file $DIFF -c -a $result_file $reject_file
echo "-------------------------------------------------------" echo "-------------------------------------------------------"
echo "Please follow the instructions outlined at" echo "Please follow the instructions outlined at"
echo "http://www.mysql.com/doc/R/e/Reporting_mysqltest_bugs.html" echo "http://www.mysql.com/doc/R/e/Reporting_mysqltest_bugs.html"
...@@ -315,6 +370,15 @@ show_failed_diff () ...@@ -315,6 +370,15 @@ show_failed_diff ()
fi fi
} }
do_gdb_test ()
{
mysql_test_args="$MYSQL_TEST_ARGS $1"
$ECHO "set args $mysql_test_args < $2" > $GDB_CLIENT_INIT
echo "Set breakpoints ( if needed) and type 'run' in gdb window"
#this xterm should not be backgrounded
xterm -title "Client" -e gdb -x $GDB_CLIENT_INIT $MYSQL_TEST_BIN
}
error () { error () {
$ECHO "Error: $1" $ECHO "Error: $1"
exit 1 exit 1
...@@ -435,19 +499,38 @@ start_master() ...@@ -435,19 +499,38 @@ start_master()
# Remove old berkeley db log files that can confuse the server # Remove old berkeley db log files that can confuse the server
$RM -f $MASTER_MYDDIR/log.* $RM -f $MASTER_MYDDIR/log.*
#start master #start master
if [ -z "$DO_BENCH" ]
then
master_args="--no-defaults --log-bin=master-bin \ master_args="--no-defaults --log-bin=master-bin \
--server-id=1 \ --server-id=1 \
--basedir=$MY_BASEDIR \
--port=$MASTER_MYPORT \
--exit-info=256 \
--datadir=$MASTER_MYDDIR \
--pid-file=$MASTER_MYPID \
--socket=$MASTER_MYSOCK \
--log=$MASTER_MYLOG \
--character-sets-dir=$CHARSETSDIR \
--tmpdir=$MYSQL_TMP_DIR \
--language=$LANGUAGE \
--innodb_data_file_path=ibdata1:50M \
$SMALL_SERVER \
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
else
master_args="--no-defaults --log-bin=master-bin --server-id=1 \
--basedir=$MY_BASEDIR \ --basedir=$MY_BASEDIR \
--port=$MASTER_MYPORT \ --port=$MASTER_MYPORT \
--datadir=$MASTER_MYDDIR \ --datadir=$MASTER_MYDDIR \
--pid-file=$MASTER_MYPID \ --pid-file=$MASTER_MYPID \
--socket=$MASTER_MYSOCK \ --socket=$MASTER_MYSOCK \
--log=$MASTER_MYLOG --default-character-set=latin1 \ --default-character-set=$CHARACTER_SET \
--core \
--tmpdir=$MYSQL_TMP_DIR \ --tmpdir=$MYSQL_TMP_DIR \
--language=english \ --language=$LANGUAGE \
--innodb_data_file_path=ibdata1:50M \ --innodb_data_file_path=ibdata1:50M \
$SMALL_SERVER \ $SMALL_SERVER \
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT" $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
fi
if [ x$DO_DDD = x1 ] if [ x$DO_DDD = x1 ]
then then
$ECHO "set args $master_args" > $GDB_MASTER_INIT $ECHO "set args $master_args" > $GDB_MASTER_INIT
...@@ -496,10 +579,11 @@ start_slave() ...@@ -496,10 +579,11 @@ start_slave()
--pid-file=$SLAVE_MYPID \ --pid-file=$SLAVE_MYPID \
--port=$SLAVE_MYPORT \ --port=$SLAVE_MYPORT \
--socket=$SLAVE_MYSOCK \ --socket=$SLAVE_MYSOCK \
--log=$SLAVE_MYLOG --default-character-set=latin1 \ --log=$SLAVE_MYLOG \
--character-sets-dir=$CHARSETSDIR \
--core \ --core \
--tmpdir=$MYSQL_TMP_DIR \ --tmpdir=$MYSQL_TMP_DIR \
--language=english \ --language=$LANGUAGE \
--skip-innodb --skip-slave-start \ --skip-innodb --skip-slave-start \
$SMALL_SERVER \ $SMALL_SERVER \
$EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
...@@ -507,7 +591,7 @@ start_slave() ...@@ -507,7 +591,7 @@ start_slave()
then then
$ECHO "set args $master_args" > $GDB_SLAVE_INIT $ECHO "set args $master_args" > $GDB_SLAVE_INIT
ddd --debugger "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD & ddd --debugger "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD &
prompt_user "Hit enter to continue after you've started the master" prompt_user "Hit enter to continue after you've started the slave"
elif [ x$DO_GDB = x1 ] elif [ x$DO_GDB = x1 ]
then then
$ECHO "set args $slave_args" > $GDB_SLAVE_INIT $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
...@@ -609,6 +693,22 @@ run_testcase () ...@@ -609,6 +693,22 @@ run_testcase ()
slave_init_script=$TESTDIR/$tname-slave.sh slave_init_script=$TESTDIR/$tname-slave.sh
slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0` SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
if [ -n "$SKIP_TEST" ] ; then
SKIP_THIS_TEST=`$EXPR \( $tname : "$SKIP_TEST" \) != 0`
if [ x$SKIP_THIS_TEST = x1 ] ;
then
return;
fi
fi
if [ -n "$DO_TEST" ] ; then
DO_THIS_TEST=`$EXPR \( $tname : "$DO_TEST" \) != 0`
if [ x$DO_THIS_TEST = x0 ] ;
then
return;
fi
fi
if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ; if [ x${NO_SLAVE}x$SKIP_SLAVE = x1x0 ] ;
then then
...@@ -616,9 +716,9 @@ run_testcase () ...@@ -616,9 +716,9 @@ run_testcase ()
SYST=" ...." SYST=" ...."
REALT=" ...." REALT=" ...."
timestr="$USERT $SYST $REALT" timestr="$USERT $SYST $REALT"
pname=`$ECHO "$tname "|$CUT -c 1-16` pname=`$ECHO "$tname "|$CUT -c 1-24`
RES="$pname $timestr" RES="$pname $timestr"
pass_inc skip_inc
$ECHO "$RES$RES_SPACE [ skipped ]" $ECHO "$RES$RES_SPACE [ skipped ]"
return return
fi fi
...@@ -672,8 +772,13 @@ run_testcase () ...@@ -672,8 +772,13 @@ run_testcase ()
if [ -f $tf ] ; then if [ -f $tf ] ; then
$RM -f r/$tname.*reject $RM -f r/$tname.*reject
mytime=`$TIME -p $MYSQL_TEST -R r/$tname.result $EXTRA_MYSQL_TEST_OPT \ mysql_test_args="-R r/$tname.result $EXTRA_MYSQL_TEST_OPT"
< $tf 2> $TIMEFILE` if [ -z "$DO_CLIENT_GDB" ] ; then
mytime=`$TIME -p $MYSQL_TEST $mysql_test_args < $tf 2> $TIMEFILE`
else
do_gdb_test "$mysql_test_args" "$tf"
fi
res=$? res=$?
if [ $res = 0 ]; then if [ $res = 0 ]; then
...@@ -692,7 +797,7 @@ run_testcase () ...@@ -692,7 +797,7 @@ run_testcase ()
fi fi
timestr="$USERT $SYST $REALT" timestr="$USERT $SYST $REALT"
pname=`$ECHO "$tname "|$CUT -c 1-16` pname=`$ECHO "$tname "|$CUT -c 1-24`
RES="$pname $timestr" RES="$pname $timestr"
if [ $res = 0 ]; then if [ $res = 0 ]; then
...@@ -700,7 +805,11 @@ run_testcase () ...@@ -700,7 +805,11 @@ run_testcase ()
pass_inc pass_inc
$ECHO "$RES$RES_SPACE [ pass ]" $ECHO "$RES$RES_SPACE [ pass ]"
else else
if [ $res = 1 ]; then # why the following ``if'' ? That is why res==1 is special ?
if [ $res = 2 ]; then
skip_inc
$ECHO "$RES$RES_SPACE [ skipped ]"
else
total_inc total_inc
fail_inc fail_inc
$ECHO "$RES$RES_SPACE [ fail ]" $ECHO "$RES$RES_SPACE [ fail ]"
...@@ -724,9 +833,6 @@ run_testcase () ...@@ -724,9 +833,6 @@ run_testcase ()
fi fi
$ECHO "Resuming Tests" $ECHO "Resuming Tests"
$ECHO "" $ECHO ""
else
pass_inc
$ECHO "$RES$RES_SPACE [ skipped ]"
fi fi
fi fi
fi fi
...@@ -763,6 +869,28 @@ fi ...@@ -763,6 +869,28 @@ fi
$ECHO "Starting Tests" $ECHO "Starting Tests"
if [ "$DO_BENCH" = 1 ]
then
BENCHDIR=$BASEDIR/sql-bench/
savedir=`pwd`
cd $BENCHDIR
if [ -z "$1" ]
then
./run-all-tests --socket=$MASTER_MYSOCK --user=root
else
if [ -x "./$1" ]
then
./$1 --socket=$MASTER_MYSOCK --user=root
else
echo "benchmark $1 not found"
fi
fi
cd $savedir
mysql_stop
exit
fi
$ECHO $ECHO
$ECHO " TEST USER SYSTEM ELAPSED RESULT" $ECHO " TEST USER SYSTEM ELAPSED RESULT"
$ECHO $DASH72 $ECHO $DASH72
......
...@@ -15,3 +15,21 @@ drop table foo; ...@@ -15,3 +15,21 @@ drop table foo;
save_master_pos; save_master_pos;
connection slave; connection slave;
sync_with_master; sync_with_master;
connection master;
set SQL_LOG_BIN=1;
CREATE TABLE t1 (
a int not null
) TYPE=MyISAM MAX_ROWS=4000 CHECKSUM=1;
INSERT INTO t1 VALUES (1);
save_master_pos;
connection slave;
sync_with_master;
drop table t1;
load table t1 from master;
check table t1;
connection master;
drop table t1;
save_master_pos;
connection slave;
sync_with_master;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment