[bitbake-devel] [PATCH] utils: Use rm -rf in remove()

Martin Ertsås martiert at gmail.com
Sat Feb 16 13:51:02 UTC 2013


On 02/15/13 17:00, Richard Purdie wrote:
> On Thu, 2013-02-07 at 18:08 -0700, Chris Larson wrote:
>> On Thu, Feb 7, 2013 at 4:55 PM, Richard Purdie
>> <richard.purdie at linuxfoundation.org> wrote:
>>          -                shutil.rmtree(name)
>>          +                # shutil.rmtree(name) would be ideal but its
>>          too slow
>>          +                subprocess.call('rm -rf %s' % path,
>>          shell=True)
>>
>> This is a good idea, but I'm curious about forking off a shell process
>> for it. I'd think this would work as well: subprocess.call(['rm',
>> '-rf', path])
> path can have wildcards in it. The code wasn't entirely obvious so I've
> tweaked it after your/Peter's comments. I'm hoping it will help the
> problems Martin was seeing too.
>
> Cheers,
>
> Richard
>
>
I think this is a good idea as well. One thing I would question though, 
is to have this in the except clause. Why not:

     for name in glob.glob(path):
         try:
	    if recurse and os.path.isdir(path):
	       subprocess.call('rm -rf %s' % path, shell=True)
	       return
	    os.unlink(name)
         except OSError as exc:
             if exc.errno != errno.ENOENT:
                 raise


Personally I feel it is cleaner to have all the remove possibilities in 
the try, and let the exceptions be in except. Kind of feel it is wrong 
to let the recursive case be handled in the exception, as I don't see it 
being an exceptional case to delete a folder.

Also, unfortunately your patch would not fix osx, as EISDIR is not the 
error that is returned there. What I get is either a EPERM or an EACCES 
(not on a mac now, so can't check it until monday). So osx would still 
fall through to the raise.




More information about the bitbake-devel mailing list