Python script to delete old SVN files lacks permission
Question: I'm trying to delete old SVN files from directory tree. `shutil.rmtree` and
`os.unlink` raise `WindowsError`s, because the script doesn't have permissions
to delete them. How can I get around that?

Here is the script:

    
    
    # Delete all files of a certain type from a direcotry
    
    import os
    import shutil
    
    dir = "c:\\"
    
    verbosity = 0;
    
    def printCleanMsg(dir_path):
        if verbosity:
            print "Cleaning %s\n" % dir_path
    
    def cleandir(dir_path):
        printCleanMsg(dir_path)
        toDelete = []
        dirwalk = os.walk(dir_path)
        for root, dirs, files in dirwalk:
            printCleanMsg(root)
            toDelete.extend([root + os.sep + dir for dir in dirs if '.svn' == dir])
            toDelete.extend([root + os.sep + file for file in files if 'svn' in file])
    
        print "Items to be deleted:"
        for candidate in toDelete:
            print candidate
        print "Delete all %d items? [y|n]" % len(toDelete)
    
        choice = raw_input()
    
        if choice == 'y':
            deleted = 0
            for filedir in toDelete:
                if os.path.exists(filedir): # could have been deleted already by rmtree
                    try:
                        if os.path.isdir(filedir):
                            shutil.rmtree(filedir)
                        else:
                            os.unlink(filedir)
                        deleted += 1
                    except WindowsError:
                        print "WindowsError: Couldn't delete '%s'" % filedir
    
        print "\nDeleted %d/%d files." % (deleted, len(toDelete))
        exit()
    
    if __name__ == "__main__":
        cleandir(dir)
    

Not a single file is able to be deleted. What am I doing wrong?


Answer: Subversion usually makes all the `.svn` directories (and everything in them)
write protected. Probably you have to remove the write protection before you
can remove the files.

I'm not really sure how to do this best with Windows, but you should be able
to use
[`os.chmod()`](http://docs.python.org/library/os.html?highlight=chmod#os.chmod)
with the `stat.S_IWRITE` flag. Probably you have to iterate through all the
files in the `.svn` directories and make them all writable individually.

