Skip to content

Commit

Permalink
app: config: Add support for appending to the config string
Browse files Browse the repository at this point in the history
In some cases, and specifically in the manifest.group-filter and
manifest.project-filter options, it is sometimes useful to be able to
append to a value instead of replacing it completely.

For example, assuming one wants to add to an existing group filter,
without this patch the user needs to do:

(assuming the group filter is currently +unstable,-optional, and the
user wants to add +extras).
> west config manifest.group-filter
> west config manifest.group-filter +unstable,-optional,+extras

With this patch instead:

> west config -a manifest.group-filter ,+extras

Signed-off-by: Carles Cufi <[email protected]>
  • Loading branch information
carlescufi committed Nov 14, 2024
1 parent d6b34df commit 7a7c2e3
Showing 1 changed file with 28 additions and 9 deletions.
37 changes: 28 additions & 9 deletions src/west/app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@
To set a value for <name>, type:
west config <name> <value>
To append to a value for <name>, type:
west config -a <name> <value>
To list all options and their values:
west config -l
Expand Down Expand Up @@ -111,6 +114,8 @@ def do_add_parser(self, parser_adder):
help='delete an option in one config file')
parser.add_argument('-D', '--delete-all', action='store_true',
help="delete an option everywhere it's set")
parser.add_argument('-a', '--append', action='store_true',
help='append to an existing value')

group = parser.add_argument_group(
'configuration file to use (give at most one)')
Expand All @@ -135,11 +140,18 @@ def do_run(self, args, user_args):
self.parser.error('-l cannot be combined with name argument')
elif delete:
self.parser.error('-l cannot be combined with -d or -D')
elif args.append:
self.parser.error('-l cannot be combined with -a')
elif not args.name:
self.parser.error('missing argument name '
'(to list all options and values, use -l)')
elif args.delete and args.delete_all:
self.parser.error('-d cannot be combined with -D')
elif args.delete:
if args.delete_all:
self.parser.error('-d cannot be combined with -D')
elif args.append:
self.parser.error('-d cannot be combined with -a')
elif args.value is None and args.append:
self.parser.error('-a requires a value')

if args.list:
self.list(args)
Expand Down Expand Up @@ -182,20 +194,27 @@ def check_config(self, option):
self.die(f'invalid configuration option "{option}"; '
'expected "section.key" format')

def _read(self, name, configfile):
value = self.config.get(name, configfile=configfile)
if value is None:
self.dbg(f'{name} is unset')
raise CommandError(returncode=1)

def read(self, args):
self.check_config(args.name)
value = self.config.get(args.name, configfile=args.configfile or ALL)
if value is not None:
self.inf(value)
else:
self.dbg(f'{args.name} is unset')
raise CommandError(returncode=1)
value = self._read(args.name, args.configfile or ALL)
self.inf(value)

def write(self, args):
self.check_config(args.name)
what = args.configfile or LOCAL
if args.append:
value = self._read(args.name, args.configfile or ALL) or ''
value += args.value
else:
value = args.value
try:
self.config.set(args.name, args.value, configfile=what)
self.config.set(args.name, value, configfile=what)
except PermissionError as pe:
self._perm_error(pe, what, args.name)

Expand Down

0 comments on commit 7a7c2e3

Please sign in to comment.