You could run this for each module, but it'll tax the CVS server pretty heavily, and you'll have a mess on your end (sorting).
It'll work, though.. (tested very quickly; may be buggy).
#--CUT
EXTENSION=xml; SUFFIX="_REV-"; for f in find . -name '*.'$EXTENSION; do REV=cvs log $f | grep "^revision" | awk {'print $2'}; for
r in $REV; do cvs update -r $r -p $f > $f$SUFFIX$r; done; done;
#--CUT
Run it from the top level of each (previously checked out) module.
Enjoy.. remember.. it's probably buggy, and you're going to upset some admins. (-:
Play on your own server.
You will upset the admins and developers trying to work on PHP, so I suggest you only try to do such things on a very small set of files.
Goba