On 01/10/13 15:18, Chris Larson wrote: > > On Thu, Jan 10, 2013 at 7:11 AM, Chris Larson > wrote: > > > On Thu, Jan 10, 2013 at 7:10 AM, Chris Larson > wrote: > > On Thu, Jan 10, 2013 at 1:46 AM, Martin Ertsaas > > wrote: > > On mac, os.unlink does not remove directories, and we > therefor have > to explicitly use shutil.rmtree if the path is a directory. > --- > lib/bb/utils.py | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/lib/bb/utils.py b/lib/bb/utils.py > index cef0fdd..8b6d3f5 100644 > --- a/lib/bb/utils.py > +++ b/lib/bb/utils.py > @@ -561,7 +561,10 @@ def remove(path, recurse=False): > import os, errno, shutil, glob > for name in glob.glob(path): > try: > - os.unlink(name) > + if os.path.isdir(name): > + shutil.rmtree(name) > + else: > + os.unlink(name) > except OSError as exc: > if recurse and exc.errno == errno.EISDIR: > shutil.rmtree(name) > > > > Look 2 lines down, where it checks to see if the os.unlink > failed due to it being a directory and runs shutil.rmtree if > that's the case. > > > I'm guessing you're trying to use it without passing recurse=True. > > > Having through about it further, I think it might be best to be alter > the code to also handle the case where recurse==False and the path is > a directory by calling os.rmdir(). Perhaps this would reduce confusion. > -- > Christopher Larson You think to recursively call remove on the children of the directory? Wouldn't something like: for name in glob.glob(path): if os.path.isdir(name) and recurse: shutil.rmtree(name) elif os.path.isdir(name): os.rmdir(name) else: os.unlink(name) Then we will possibly get an exception from os.rmdir, which we can catch. But this also avoids the need to use the exception as a control flow structure as it is used today. At least in my mind, that is a lot easier to grasp than the if statement in the exception handling, which I totally overlooked as it is an exception. - Martin