66import sys
77import os
88
9+ import importlib .metadata
10+
911from .config import Settings
1012from .db_replicator import DbReplicator
1113from .binlog_replicator import BinlogReplicator
@@ -145,11 +147,22 @@ def run_all(args, config: Settings):
145147
146148
147149def main ():
150+ # Get version information
151+ try :
152+ version = importlib .metadata .version ("mysql-ch-replicator" )
153+ except importlib .metadata .PackageNotFoundError :
154+ version = "unknown" # fallback version
155+
148156 parser = argparse .ArgumentParser ()
157+ parser .add_argument (
158+ "--version" , action = "version" , version = f"mysql-ch-replicator { version } "
159+ )
149160 parser .add_argument (
150161 "mode" , help = "run mode" ,
151162 type = str ,
152- choices = ["run_all" , "binlog_replicator" , "db_replicator" , "monitoring" , "db_optimizer" ])
163+ choices = ["run_all" , "binlog_replicator" , "db_replicator" , "monitoring" , "db_optimizer" ],
164+ nargs = "?"
165+ )
153166 parser .add_argument ("--config" , help = "config file path" , default = 'config.yaml' , type = str )
154167 parser .add_argument ("--db" , help = "source database(s) name" , type = str )
155168 parser .add_argument ("--target_db" , help = "target database(s) name, if not set will be same as source" , type = str )
@@ -176,6 +189,11 @@ def main():
176189 )
177190 args = parser .parse_args ()
178191
192+ # If no mode is provided, show help
193+ if not args .mode :
194+ parser .print_help ()
195+ return
196+
179197 config = Settings ()
180198 config .load (args .config )
181199 if args .mode == 'binlog_replicator' :
0 commit comments