gitpython-developers / gitdb

IO of git-style object databases
http://gitdb.readthedocs.org
Other
218 stars 65 forks source link

Windows with_rw-directory TC helper fails to delete repos #32

Open ankostis opened 8 years ago

ankostis commented 8 years ago

On Windows, os.rmtree cannot not remove directories with read-only files; such are the git db directories.

The fix is something like this:

           ...
        finally:
            # Need to collect here to be sure all handles have been closed. It appears
            # a windows-only issue. In fact things should be deleted, as well as
            # memory maps closed, once objects go out of scope. For some reason
            # though this is not the case here unless we collect explicitly.
            if not keep:
                gc.collect()

                # From http://stackoverflow.com/a/4829285/548792
                def on_rm_error(func, path, exc_info):
                    import stat
                    os.chmod(path, stat.S_IWRITE)
                    func(path)

                shutil.rmtree(path, onerror=on_rm_error)
Byron commented 8 years ago

I assume that this one could be fixed in conjunction with this PR ? In any case, thanks for reporting, it's good to keep track of the issue and a possible solution.