Thanks for the review. I've committed a few changes as r1902722. More below.

Den ons 13 juli 2022 kl 15:57 skrev Daniel Shahaf <d...@daniel.shahaf.name>:

> dsahlb...@apache.org wrote on Fri, Jul 08, 2022 at 20:47:42 -0000:
> > +++ subversion/trunk/tools/dist/release.py Fri Jul  8 20:47:42 2022
> > @@ -980,7 +979,12 @@ def roll_tarballs(args):
> >          # from a committer's LDAP profile down the road)
> >          basename = 'subversion-%s.KEYS' % (str(args.version),)
> >          filepath = os.path.join(get_tempdir(args.base_dir), basename)
> > -        download_file(KEYS, filepath, None)
> > +        # The following code require release.py to be executed within a
> > +        # complete wc, not a shallow wc as indicated in HACKING as one
> option.
> > +        # We /could/ download COMMITTERS from /trunk if it doesn't
> exist...
>
> Well, could you please either change HACKING or download COMMITTERS?
> The code for the latter is basically the tempfile+urlopen mechanics from
> the next hunk of this very diff.
>

I prefer to have less variations in the process to make it easier for new
RMs. I've removed this from HACKING in r1902723 (only on site/staging so
far).

But while I was at it, I changed make-keys.sh to accept the full filename
for the COMMITTERS file, to prepare for someone updating release.py to
download the file to a tempfile.


> > +        subprocess.check_call([os.path.dirname(__file__) +
> '/make-keys.sh',
> > +                               '-c', os.path.dirname(__file__) +
> '/../..',
> > +                               '-o', filepath])
> >          shutil.move(filepath, get_target(args))
> >
> >      # And we're done!
> > @@ -1465,12 +1469,11 @@ def check_sigs(args):
> >
> >  def get_keys(args):
> >      'Import the LDAP-based KEYS file to gpg'
> > -    # We use a tempfile because urlopen() objects don't have a .fileno()
> > -    with tempfile.SpooledTemporaryFile() as fd:
> > -        fd.write(urlopen(KEYS).read())
> > -        fd.flush()
> > -        fd.seek(0)
> > -        subprocess.check_call(['gpg', '--import'], stdin=fd)
> > +    with tempfile.NamedTemporaryFile(delete=False) as tmpfile:
> > +      keyspath = tmpfile.name
> > +    subprocess.check_call([os.path.dirname(__file__) + '/make-keys.sh',
> '-c', os.path.dirname(__file__) + '/../..', '-o', keyspath])
> > +    subprocess.check_call(['gpg', '--import', keyspath])
> > +    os.remove(keyspath)
>
> That's not how one uses NamedTemporaryFile().
>
> Generally, all uses of the file should be inside the «with» block, and
> unlinking the file should be left to block's implicit handling
> (tmpfile.__exit__()).
>
> As written, however, NamedTemporaryFile() is used as though it were
> a "generate a safe temporary name" API.  That means the file is not
> created atomically and won't be cleaned up if subprocess.check_call()
> raises an exception.
>
> Could you rewrite so the file isn't used outside its «with» block?
>

Tried my best. I was afraid of the notice in the docs that a opened a
second time, but since we don't support running the RM process on Windows
it should be alright.

Kind regards,
Daniel

Reply via email to