Brought to you courtesy Panoptic, these are some little scripts that came about by following ThreeStrikesAndYouAutomate. : http://panoptic.com/rking/pkg/cvstools.tgz If you work with CVS on the command line, you might find them useful. The current output of "make doc": * cvsREVERT - Blows away every change in your local repository. (Use with caution.) * cvsadd - Adds all unknown files (?'s) to the repository * cvsalldiff - Show the diffs going all the way back in time * cvsci - When you need a down-and-dirty ci. Meaningful commit messages are YAGNI. * cvsdiff - Colorize and page 'cvs diff' output * cvsignore - Adds all unknown files (?'s) to the .cvsignore * cvslastdiff - Show the most recent diff * cvslog - Just reverses the cvslog output * cvsmeaningfulci - For those not lazy enough to use cvsci, try this. Thanks to anon. for the idea/code * cvsmv - Go through the tedious steps of moving a file in CVS. Don't forget to fully qualify the second arg (i.e.: "cvsmv a.rb dir/a.rb", because "cvsmv a.rb dir/" won't work as expected) * Rkcvs.pm - Just a couple functions I don't want to copy and paste * cvsu - Just a typo-workaround. * cvsup - Just a typo-workaround. * rwgrep - http://c2.com/cgi/wiki?ReadWriteGrep (This doesn't have anything to do with CVS, but it's handy to have around.) Please give me any other feedback you might have. Some semisignificant updates: * No longer depends on ruby and perl - just perl. More people have it, and I can't say that the now-perl files are that much uglier. * Removed "vim-pager", "cdiff", and "pdiff" - ColorDiff takes care of me now. I like it. * Removed the need for "bin/lib", which was an annoying symlink. ---- ''Why do you say that meaningful commit messages are YAGNI? How else can you easily tell what the purpose for a set of changes was, without diffing and examining the files (which is kind of time consuming)?'' I have found that I commit changes about 50 times more often than I need to know what the purpose for an old set of changes was, and that about 80% of the commit comments that were "meaningful" at the time are now unhelpful. ''My experience has been different. I use commit messages not to determine what changes have occurred in a commit, but to locate the origin of a specific change I'm looking for (e.g. using cvs log). If I spent more than 30 seconds writing a commit message, I spent too long. Mind you, I haven't done any math on this.'' I don't always skip the commit messages. If there's a really good way to describe it, I'll cvs ci -m "...". But blamelog's really do tell a lot, for the times I might overzealously use cvsci. ---- See also CvsToys ---- For a long long time I've been depending on a pair of one-liners I call diffprep and diffcommit to help me generate sensible cvs log messages. diffprep simply runs 'cvs diff ' and prepends a comment character to each line. I redirect its output to a file, which I then visit in my editor and read through. As I see each change, I can write the appropriate description into the file (without the comment character), then when done I pipe the annotated diff file into diffcommit, which discards the original diff, spits the annotations into per-file commit messages, and runs the appropriate cvs commands :; cat ~/scripts/diffprep #!/bin/sh cvs diff -u $* | sed 's/^/# /g' echo '# Index: done' :; cat ~/scripts/diffcommit perl -ne 'if(/^\# Index: (.+)$/) { if($fn) { $out=~s/\047/\047\\\047\047/g; $out=~s/^\n+//s;$out=~s/\n+$//s; print "cvs commit -m \047$out\047 $fn\n"}; $out="";$fn=$1}; if(! /^\#/) { $out.=$_ };' ''I subsumed this into cvsmeaningfulci, above. Thanks for the great tip! (Hopefully we'll all use cvsci one day, but this is an excellent bridge.)'' ---- A suggestion for cvsmv: how about automatically create log texts "renamed from ... to ..."? --SlavenRezic (2003-03-21) ''Actually, version 1 of cvsmv had exactly that. But the scary thing is that it automatically commits the changes. So, the next best thing is to output a cvs ci -m "..." line, that can then be pasted back into the shell... but for some reason I decided against it. Lately, I've been using SubVersion, which as a real move command.'' --RyanKing