4848# ===----------------------------------------------------------------------=== #
4949
5050import argparse
51+ import configparser
5152import json
5253import os
5354import re
@@ -1230,33 +1231,41 @@ def command_view(args: CommonArgs):
12301231# ===----------------------------------------------------------------------=== #
12311232
12321233
1233- def create_argparser () -> argparse .ArgumentParser :
1234+ def create_argparser (
1235+ config : configparser .ConfigParser ,
1236+ ) -> argparse .ArgumentParser :
12341237 """Helper for CL option definition and parsing logic."""
12351238 parser = argparse .ArgumentParser ()
12361239 subparsers = parser .add_subparsers (help = "sub-command help" , dest = "command" )
12371240
12381241 common_parser = argparse .ArgumentParser (add_help = False )
12391242 common_parser .add_argument (
1240- "-R" , "--remote" , default = "origin" , help = "Remote name"
1243+ "-R" ,
1244+ "--remote" ,
1245+ default = config .get ("repo" , "remote" , fallback = "origin" ),
1246+ help = "Remote name" ,
12411247 )
12421248 common_parser .add_argument ("-B" , "--base" , help = "Local base branch" )
12431249 common_parser .add_argument (
12441250 "-H" , "--head" , default = "HEAD" , help = "Local head branch"
12451251 )
12461252 common_parser .add_argument (
1247- "-T" , "--target" , default = "main" , help = "Remote target branch"
1253+ "-T" ,
1254+ "--target" ,
1255+ default = config .get ("repo" , "target" , fallback = "main" ),
1256+ help = "Remote target branch" ,
12481257 )
12491258 common_parser .add_argument (
12501259 "--hyperlinks" ,
12511260 action = argparse .BooleanOptionalAction ,
1252- default = True ,
1261+ default = config . getboolean ( "common" , "hyperlinks" , fallback = True ) ,
12531262 help = "Enable or disable hyperlink support." ,
12541263 )
12551264 common_parser .add_argument (
12561265 "-V" ,
12571266 "--verbose" ,
12581267 action = "store_true" ,
1259- default = False ,
1268+ default = config . getboolean ( "common" , "verbose" , fallback = False ) ,
12601269 help = "Enable verbose output from Git subcommands." ,
12611270 )
12621271
@@ -1269,14 +1278,14 @@ def create_argparser() -> argparse.ArgumentParser:
12691278 parser_submit .add_argument (
12701279 "--keep-body" ,
12711280 action = "store_true" ,
1272- default = False ,
1281+ default = config . getboolean ( "common" , "keep_body" , fallback = False ) ,
12731282 help = "Keep current PR body and only add/update cross links" ,
12741283 )
12751284 parser_submit .add_argument (
12761285 "-d" ,
12771286 "--draft" ,
12781287 action = "store_true" ,
1279- default = False ,
1288+ default = config . getboolean ( "common" , "draft" , fallback = False ) ,
12801289 help = "Submit PRs in draft mode" ,
12811290 )
12821291 parser_submit .add_argument (
@@ -1287,7 +1296,10 @@ def create_argparser() -> argparse.ArgumentParser:
12871296 )
12881297 parser_submit .add_argument (
12891298 "--reviewer" ,
1290- default = os .getenv ("STACK_PR_DEFAULT_REVIEWER" , default = "" ),
1299+ default = os .getenv (
1300+ "STACK_PR_DEFAULT_REVIEWER" ,
1301+ default = config .get ("repo" , "reviewer" , fallback = "" ),
1302+ ),
12911303 help = "List of reviewers for the PR" ,
12921304 )
12931305
@@ -1310,8 +1322,18 @@ def create_argparser() -> argparse.ArgumentParser:
13101322 return parser
13111323
13121324
1325+ def load_config (config_file ):
1326+ config = configparser .ConfigParser ()
1327+ if os .path .isfile (config_file ):
1328+ config .read (config_file )
1329+ return config
1330+
1331+
13131332def main ():
1314- parser = create_argparser ()
1333+ config_file = os .getenv ("STACKPR_CONFIG" , ".stack-pr.cfg" )
1334+ config = load_config (config_file )
1335+
1336+ parser = create_argparser (config )
13151337 args = parser .parse_args ()
13161338
13171339 if not args .command :
0 commit comments