Re: [PATCH gentoolkit] bin: Add merge-driver-ekeyword

Zac Medico <[email protected]> Mon, 28 Dec 2020 21:54:25 -0800
Newsgroups gmane.linux.gentoo.portage.devel
Message-ID <[email protected]>
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
signature.asc (application/pgp-signature, 981 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQKTBAEBCgB9FiEE8OgXaltWzqgSupCu0HX7jBBKPSAFAl/qxJFfFIAAAAAALgAo
aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEYw
RTgxNzZBNUI1NkNFQTgxMkJBOTBBRUQwNzVGQjhDMTA0QTNEMjAACgkQ0HX7jBBK
PSAWvBAAvaLYz9tfDGemIxAnBPy0AjKIdowjVP4kWVI1BthpxVo7zwmpL/iLZrzZ
tm7pqKkxXP+LW7++DvjbP0NZMDE7C/G1JyGRBy5AHEq0OZXmcWDK0h05nL+R/ZDx
I8v8H2FnARcgl3ghbjzEOTRygmSNDXETWCWIOylIAQc1JP5zwsbyFtiIAm/NpbdW
DbKT/hh2uGjx2l0pfkmSCTB17/nQrHZ7JJq1z0+s+CP/6LV2kxXKYr2/DcKtcN+O
UNIKDZ7fpDct77PjkXBZI7sTtYkMb2KNAqzyvFtYSk8RY3+GYGeAx4gLv78/Xf2m
43vbFLoR6bmnceEG8FvbyCsibY8vhsCR6md43mbJKN/SsjEy4jI4rq9OhaLITP+I
vn5CuSfb3UY9OC4yMMBF1V+0xv13YoWtCBJIAeLflkwIrpKiRDs6ZOgmC68cQGSW
4/QXLj3gnO685rRPKQxZoE3AK3V4shJaTI9BSdvh8boIQzxf6HfYgRb5mUSERXJ2
cxYIu9GuNsJjhDrCvceqHx8LaddbF3uRgL7VvdPGueUGpBrknx0CsPbAc7wxEysa
dzPSAvcgRaTCiqSoPneFdfM9Wq5U+dDYHR8DgDWyDEWaQsM+6hnQvIBucrADHr6X
qv5VcwrsqO2VZlVArwz1OqdM/raIjydqRVv80/upGHYR2zmX9kA=
=v/jM
-----END PGP SIGNATURE-----