#!/usr/bin/env python
import os
import os.path
import sys
import stat
import logging
def gen_feedback(data):
while True:
for pos in range(len(data)):
yield data[pos]
def fix_read_only(fname):
'''Removes read only attribute if file is read only'''
fileattr = os.stat(fname)[0]
if (not fileattr & stat.S_IWRITE):
logging.info('Fixing read only file: ' + fname)
os.chmod(fname, stat.S_IWRITE)
def clear_dir(dirname):
'''Deletes all files in the directory tree and then dirs'''
for root, dirs, files in os.walk(dirname):
for i in files:
tmpname = os.path.join(root,i)
logging.info('Deleting file: ' + tmpname)
try:
fix_read_only(tmpname)
os.remove(tmpname)
except Exception as e:
logging.exception(e)
for root, dirs, files in os.walk(dirname):
for j in dirs:
tmpname = os.path.join(root,j)
logging.info('Deleting dir: ' + tmpname)
try:
fix_read_only(tmpname)
os.rmdir(tmpname)
except Exception as e:
logging.exception(e)
try:
fix_read_only(dirname)
logging.info('Deleting dir:' + dirname)
os.rmdir(dirname)
except Exception as e:
logging.exception(e)
if __name__ == '__main__':
sys.stdout.write('SVN Directory Remover\n')
logging.basicConfig(level=logging.DEBUG)
if len(sys.argv) > 1:
basedir = sys.argv[1]
dirlist = []
fb = gen_feedback('\\|/-')
for root, dirs, files in os.walk(basedir):
for i in dirs:
sys.stdout.write(next(fb) + '\r')
if i == '.svn':
tmpname = os.path.join(root,i)
logging.info('Found: ' + tmpname)
dirlist.append(tmpname)
if len(dirlist):
for i in dirlist:
logging.info('Clearing dir:' + i)
clear_dir(i)
else:
sys.stdout.write('No .svn directories found\n')
else:
sys.stdout.write('usage: {0} <dirname>\n')