# $Id: move7,v 1.5 2002/10/07 09:39:07 herbert Exp $

function read(file) {
	err = getline < file
	if (err < 0) {
		print "getline failed on " file > "/dev/stderr"
		exit 1
	} else if (err == 0) {
		eof = 1
		return
	}

	curname = $1
	curfile = $2
	curver = $3
}

function process(dir, i, a) {
	if (best == "") {
		return
	}

	if (!eof && curname == name) {
		print "1 u " curfile
	}

	dir = bestlink
	sub(/\/[^\/]*$/, "", dir)
	print "2\tD " dir
	print "3\tl " bestfile " " bestlink

	split(besttail, a)
	for (i in a) {
		usecnt[a[i]] = 1
	}
}

function moveskip(i) {
	for (i in usecnt) {
		if (usecnt[i]) {
			print i > movef
		} else {
			print i > skipf
		}
	}
}

BEGIN {
	curf = ARGV[1]
	skipf = ARGV[2]
	movef = ARGV[3]
	ARGC = 1

	read(curf)
	printf "" > skipf
	printf "" > movef
}

{
	name = $1
	split($1, a, /\//)
	key = a[1]
}

prevname != name {
	process()
	best = ""
}

prevkey != key {
	moveskip()
	split("", usecnt)
	prevkey = key
}

{
	link = $2
	ver = $3
	file = $4
	tail = ""
	for (i = 5; i <= NF; i++) {
		tail = tail " " $i
		usecnt[$i] += 0
	}
}

prevname != name {
	while (!eof && curname < name) {
		read(curf)
	}
	prevname = name
}

!eof && curname == name && cmpversion(ver, curver) <= 0 {
	next
}

best == "" || cmpversion(ver, best) > 0 {
	best = ver
	bestlink = link
	bestfile = file
	besttail = tail
}

END {
	process()
	moveskip()
}
