You take a program (foo-2.0) and make a series of modifications to it. Now you want to package up your modifications in a form that can be distributed to others.
The "CVS way" is to import the original package and make all of your modifications in CVS. Then do a cvs export of the repository at a certain moment in time (date, revision, tag) and package that exported directory. The advantage is that you have everything under version control and can see logs of who has worked on it, revert patches, branch, etc.
The "RPM way" is to have a pristing source of the original package, and then apply one or more patches to the original source. The advantage is that you can see precisely what has been modified in the patch files, and can potentially drop in a new version and patch that newer version.