#!/usr/bin/env python
# -*- coding: iso-8859-2 -*-
# $Date: 2009-03-08 13:46:04 $, $Revision: 1.2 $
#
# Simple utility to remove empty dirs
# 
# Author: Wojciech Muła
# e-mail: wojciech_mula@poczta.onet.pl
# www:    http://0x80.pl/
#
# License: public domain


def remove_empty_dirs(rootdir, dont_delete):
	from os.path import exists, join, walk

	for root, dirs, files in walk(rootdir, topdown=False):
		if not dont_delete:
			# in-place modify dirs - it is needed when deleting, because
			# os.walk caches directory/files listings
			existing = [dir for dir in dirs if exists(join(root, dir))]
			del dirs[:]
			dirs.extend(existing)

		if len(dirs) == 0 and len(files) == 0:
			print root,
			if not dont_delete:
				try:
					os.rmdir(root)
					print " - removed"
				except IOError, e:
					print " - error: %s" % str(e)
			else:
				print
		#if
	#for


if __name__ == '__main__':
	import sys
	from os.path import basename, exists, isdir

	def help():
		print "Usage: %s [--dry-run] directory" % basename(sys.argv[0])

	# first arg
	dry_run = False
	try:
		if sys.argv[1] == "--dry-run":
			dry_run = True
			sys.argv.pop(1)
	except IndexError:
		pass
	
	# second arg
	try:
		if not exists(sys.argv[1]):
			print "Directory '%s' does not exists" % sys.argv[1]
			sys.exit(1)
		if not isdir(sys.argv[1]):
			print "'%s' is not a directory" % sys.argv[1]
			sys.exit(1)
	
		directory = sys.argv[1]

	except IndexError:
		help()
		sys.exit(1)

	# do this!
	remove_empty_dirs(directory, dry_run)

# vim: ts=4 sw=4 nowrap noexpandtab

