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

from __future__ import print_function

import sys, errno
from os import path as osp
pym_path = osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym")
sys.path.insert(0, pym_path)
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 as 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)
