#!/usr/bin/python -O
# Copyright 1999-2013 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
portage._internal_caller = True
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)
