Only create the config dir after parsing the CLI args.
This also switches to pathlib.Path instead of os.path for path manipulation.
This commit is contained in:
parent
5483cd40ee
commit
b80bb2fcfc
3 changed files with 30 additions and 25 deletions
|
@ -3,11 +3,11 @@ Module related to the argument parsing
|
|||
|
||||
There is a fallback to the deprecated optparse if argparse is not found
|
||||
"""
|
||||
from os import path
|
||||
from pathlib import Path
|
||||
from argparse import ArgumentParser, SUPPRESS
|
||||
|
||||
|
||||
def parse_args(CONFIG_PATH=''):
|
||||
def parse_args(CONFIG_PATH: Path):
|
||||
"""
|
||||
Parse the arguments from the command line
|
||||
"""
|
||||
|
@ -28,7 +28,8 @@ def parse_args(CONFIG_PATH=''):
|
|||
"-f",
|
||||
"--file",
|
||||
dest="filename",
|
||||
default=path.join(CONFIG_PATH, 'poezio.cfg'),
|
||||
default=CONFIG_PATH / 'poezio.cfg',
|
||||
type=Path,
|
||||
help="The config file you want to use",
|
||||
metavar="CONFIG_FILE")
|
||||
parser.add_argument(
|
||||
|
|
|
@ -506,20 +506,20 @@ def file_ok(filepath):
|
|||
return bool(val)
|
||||
|
||||
|
||||
def check_create_config_dir():
|
||||
def get_default_config_dir():
|
||||
"""
|
||||
create the configuration directory if it doesn't exist
|
||||
returns the default configuration directory path
|
||||
"""
|
||||
config_home = environ.get("XDG_CONFIG_HOME")
|
||||
if config_home is None or not Path(config_home).is_absolute():
|
||||
config_home = path.join(environ.get('HOME'), '.config')
|
||||
CONFIG_PATH = path.join(config_home, 'poezio')
|
||||
|
||||
try:
|
||||
makedirs(CONFIG_PATH)
|
||||
except OSError:
|
||||
config_home = Path(environ.get('XDG_CONFIG_HOME'))
|
||||
except TypeError:
|
||||
# XDG_CONFIG_HOME isn’t defined, fallback to ~/.config
|
||||
pass
|
||||
return CONFIG_PATH
|
||||
else:
|
||||
if config_home.is_absolute():
|
||||
return config_home / 'poezio'
|
||||
# HOME has already been checked to be non-None in test_env().
|
||||
return Path.home() / '.config' / 'poezio'
|
||||
|
||||
|
||||
def check_create_cache_dir():
|
||||
|
@ -575,27 +575,32 @@ def check_config():
|
|||
print(' \033[31m%s\033[0m' % option)
|
||||
|
||||
|
||||
def run_cmdline_args(CONFIG_PATH):
|
||||
def run_cmdline_args():
|
||||
"Parse the command line arguments"
|
||||
global options
|
||||
CONFIG_PATH = get_default_config_dir()
|
||||
options = parse_args(CONFIG_PATH)
|
||||
|
||||
# Copy a default file if none exists
|
||||
if not path.isfile(options.filename):
|
||||
default = path.join(
|
||||
path.dirname(__file__), '../data/default_config.cfg')
|
||||
other = pkg_resources.resource_filename('poezio', 'default_config.cfg')
|
||||
if path.isfile(default):
|
||||
if not options.filename.is_file():
|
||||
try:
|
||||
options.filename.parent.mkdir(parents=True, exist_ok=True)
|
||||
except OSError as e:
|
||||
sys.stderr.write('Poezio was unable to create the config directory: %s\n' % e)
|
||||
sys.exit(1)
|
||||
default = Path(__file__).parent / '..' / 'data' / 'default_config.cfg'
|
||||
other = Path(pkg_resources.resource_filename('poezio', 'default_config.cfg'))
|
||||
if default.is_file():
|
||||
copy2(default, options.filename)
|
||||
elif path.isfile(other):
|
||||
elif other.is_file():
|
||||
copy2(other, options.filename)
|
||||
|
||||
# Inside the nixstore and possibly other distributions, the reference
|
||||
# file is readonly, so is the copy.
|
||||
# Make it writable by the user who just created it.
|
||||
if os.path.exists(options.filename):
|
||||
os.chmod(options.filename,
|
||||
os.stat(options.filename).st_mode | stat.S_IWUSR)
|
||||
if options.filename.exists():
|
||||
options.filename.chmod(
|
||||
options.filename.stat().st_mode | stat.S_IWUSR)
|
||||
|
||||
global firstrun
|
||||
firstrun = True
|
||||
|
|
|
@ -77,8 +77,7 @@ def main():
|
|||
sys.stdout.write("\x1b]0;poezio\x07")
|
||||
sys.stdout.flush()
|
||||
from poezio import config
|
||||
config_path = config.check_create_config_dir()
|
||||
config.run_cmdline_args(config_path)
|
||||
config.run_cmdline_args()
|
||||
config.create_global_config()
|
||||
config.check_create_data_dir()
|
||||
config.check_create_log_dir()
|
||||
|
|
Loading…
Reference in a new issue