48
48
# ===----------------------------------------------------------------------=== #
49
49
50
50
import argparse
51
+ import configparser
51
52
import json
52
53
import os
53
54
import re
@@ -1230,33 +1231,41 @@ def command_view(args: CommonArgs):
1230
1231
# ===----------------------------------------------------------------------=== #
1231
1232
1232
1233
1233
- def create_argparser () -> argparse .ArgumentParser :
1234
+ def create_argparser (
1235
+ config : configparser .ConfigParser ,
1236
+ ) -> argparse .ArgumentParser :
1234
1237
"""Helper for CL option definition and parsing logic."""
1235
1238
parser = argparse .ArgumentParser ()
1236
1239
subparsers = parser .add_subparsers (help = "sub-command help" , dest = "command" )
1237
1240
1238
1241
common_parser = argparse .ArgumentParser (add_help = False )
1239
1242
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" ,
1241
1247
)
1242
1248
common_parser .add_argument ("-B" , "--base" , help = "Local base branch" )
1243
1249
common_parser .add_argument (
1244
1250
"-H" , "--head" , default = "HEAD" , help = "Local head branch"
1245
1251
)
1246
1252
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" ,
1248
1257
)
1249
1258
common_parser .add_argument (
1250
1259
"--hyperlinks" ,
1251
1260
action = argparse .BooleanOptionalAction ,
1252
- default = True ,
1261
+ default = config . getboolean ( "common" , "hyperlinks" , fallback = True ) ,
1253
1262
help = "Enable or disable hyperlink support." ,
1254
1263
)
1255
1264
common_parser .add_argument (
1256
1265
"-V" ,
1257
1266
"--verbose" ,
1258
1267
action = "store_true" ,
1259
- default = False ,
1268
+ default = config . getboolean ( "common" , "verbose" , fallback = False ) ,
1260
1269
help = "Enable verbose output from Git subcommands." ,
1261
1270
)
1262
1271
@@ -1269,14 +1278,14 @@ def create_argparser() -> argparse.ArgumentParser:
1269
1278
parser_submit .add_argument (
1270
1279
"--keep-body" ,
1271
1280
action = "store_true" ,
1272
- default = False ,
1281
+ default = config . getboolean ( "common" , "keep_body" , fallback = False ) ,
1273
1282
help = "Keep current PR body and only add/update cross links" ,
1274
1283
)
1275
1284
parser_submit .add_argument (
1276
1285
"-d" ,
1277
1286
"--draft" ,
1278
1287
action = "store_true" ,
1279
- default = False ,
1288
+ default = config . getboolean ( "common" , "draft" , fallback = False ) ,
1280
1289
help = "Submit PRs in draft mode" ,
1281
1290
)
1282
1291
parser_submit .add_argument (
@@ -1287,7 +1296,10 @@ def create_argparser() -> argparse.ArgumentParser:
1287
1296
)
1288
1297
parser_submit .add_argument (
1289
1298
"--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
+ ),
1291
1303
help = "List of reviewers for the PR" ,
1292
1304
)
1293
1305
@@ -1310,8 +1322,18 @@ def create_argparser() -> argparse.ArgumentParser:
1310
1322
return parser
1311
1323
1312
1324
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
+
1313
1332
def 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 )
1315
1337
args = parser .parse_args ()
1316
1338
1317
1339
if not args .command :
0 commit comments