On 12/28/20 5:09 PM, Zac Medico wrote:
> On 12/28/20 3:15 PM, Matt Turner wrote:
>> +def apply_keyword_changes(ebuild: str, pathname: str,
>> +                          changes: List[Tuple[Optional[str],
>> +                                              Optional[str]]]) -> int:
>> +    result: int = 0
>> +
>> +    # ekeyword will only modify files named *.ebuild, so make a symlink
>> +    ebuild_symlink: str = os.path.basename(pathname)
>> +    os.symlink(ebuild, ebuild_symlink)
> 
> Are we sure that the current working directory is an entirely safe place
> to create this symlink? A simple fix would be to use
> tempfile.TemporaryDirectory to create a temporary directory to hold the
> symlink. Or, we could change ekeyword to assume that an argument is an
> ebuild if os.path.isfile(arg) succeeds.
> 
>> +    for removals, additions in changes:
>> +        args = []
>> +        for rem in removals:
>> +            # Drop leading '~' and '-' characters and prepend '^'
>> +            i = 1 if rem[0] in ('~', '-') else 0
>> +            args.append('^' + rem[i:])
>> +        if additions:
>> +            args.extend(additions)
>> +        args.append(ebuild_symlink)
>> +
>> +        result = ekeyword.main(args)

Another option is to bypass the ekeyword.main function, like this:

try:
   ekeyword.process_ebuild(pathname, list(map(ekeyword.arg_to_op, args))
except Exception:
   result = 1
   traceback.print_exc()
else:
   result = 0


>> +        if result != 0:
>> +            break
>> +
>> +    os.remove(ebuild_symlink)
>> +    return result
> 
> 


-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to