#!/usr/bin/python -O
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

import sys, errno
try:
	import portage
except ImportError:
	from os import path as osp
	sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
	import portage

from portage import os

if not sys.argv[1:] or "--help" in sys.argv or "-h" in sys.argv:
	import portage
	print
	print "You must specify directories with hardlink-locks to clean."
	print "You may optionally specify --force, which will remove all"
	print "of the locks, even if we can't establish if they are in use."
	print "Please attempt cleaning without force first."
	print
	print "%s %s/.locks" % (sys.argv[0], portage.settings["DISTDIR"])
	print "%s --force %s/.locks" % (sys.argv[0], portage.settings["DISTDIR"])
	print
	sys.exit(1)
	
force = False
if "--force" in sys.argv[1:]:
	force=True
	
for x in sys.argv[1:]:
	if x == "--force":
		continue
	try:
		for y in portage.locks.hardlock_cleanup(x, remove_all_locks=force):
			print y
		print
		
	except OSError, e:
		if e.errno in (errno.ENOENT, errno.ENOTDIR):
			print "!!! %s is not a directory or does not exist" % x
		else:
			raise
		sys.exit(e.errno)
