#!/usr/bin/awk -f
# $Id: list-patches,v 1.1 2003/12/21 05:37:17 herbert Exp $

function find_chain(ver, forward) {
	if (ver == upstream) {
		return
	}

	if (!(ver in prev)) {
		print "Patch for " ver " is not available" > "/dev/stderr"
		exit 1
	}

	do {
		forward[prev[ver]] = ver
		ver = prev[ver]
	} while (ver != upstream)
}

BEGIN {
	old = ARGV[1]
	delete ARGV[1]
	new = ARGV[2]
	delete ARGV[2]

	upstream = old
	sub(/-[^-]*$/, "", upstream)
}

/^#/ || NF < 1 {
	next
}

{
	prev[$3] = $2
	file[$2, $3] = $1
}

END {
	if (new == old) {
		exit
	}

	find_chain(old, oldforward)
	find_chain(new, newforward)

	common = upstream
	while (oldforward[common] == newforward[common]) {
		common = oldforward[common]
	}

	while (common != old) {
		print file[prev[old], old]
		old = prev[old]
	}

	print "/"

	while (common != new) {
		print file[common, newforward[common]]
		common = newforward[common]
	}
}
