Brought to you courtesy Panoptic, these are some little scripts that came about by following ThreeStrikesAndYouAutomate.
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