Well, you won’t hear them from me:-) But here is some background on my choice of commands in IsiSetup.
The CVS legacy
I’ve used quite a few SCM implementations. When CVS was the only viable tool, we were able to hate it’s interface, but weren’t able to dismiss it… Things have changed to the better. There’s healthy competition, nowadays.
Subversion sees itself as a successor to CVS. It tries to build on the experience developers and admins build with CVS. The command line mimmicks CVS’. As a dedication to CVS’ legacy, IsiSetup provides the following CVS style command aliases: add, remove, import, commit, update, diff, history, log.
I admit liking Darcs
Darcs was the first distributed, changeset based SCM I got to now. It was also the tools of choice in early IsiSetup versions. But some restrictions (mainly performance, missing link and permission tracking support and the fact that some commands couldn’t be run non-interactive) made the switch to Git/Cogito necessary.
But I’m still using Darcs to manage the source code of IsiSetup. Now, what exactly do I like about Darcs command line interface?
- It makes me feel good
- The command set feels coherent
- For most actions, there exists an ‘undo’ version
- It is interactive where it makes sense
And here’s the list of commands supported by IsiSetup: initialize, add, remove, mv, whatsnew, record, rollback, changes, pull, and get.
Use a porcelain
Git is promoted as providing only a low-level SCM command line interface. While Git comes with a few commands which let you manage your sources/configs, Git isn’t designed to give a userfriendly experience. In Git-speak, this is left to a porcelain. One such wrapper is Cogito. You may have already guessed so: IsiSetup another one.
IsiSetup is designed with configuration files in mind. This is what it seperates from other revision control tools. But this post is about the classic, low-level SCM operations. These are provided by the
The feature I miss most when working with one of Darcs’ competitors is the interactivity of recording commits, moving around patches and dropping changesets. I’ll try to provide some interactivity with IsiSetup, too. I’ve implemented it today for
shuerlimann@lappi:/etc$ sudo isisetup-module rollback Author: root Date: Sun Jun 11 16:50:29 2006 +0200 Mark package 'exim4-base' to install Do you want to rollback this change? [y/N]n Author: root Date: Sun Jun 11 16:50:29 2006 +0200 Imported package configuration version 4.60-3ubuntu3 for 'exim4-base' Do you want to rollback this change? [y/N]y First trying simple merge strategy to revert. Simple revert fails; trying Automatic revert. Removing cron.daily/exim4-base Removing init.d/exim4 Removing logrotate.d/exim4-base Finished one revert. shuerlimann@lappi:/etc$ isisetup-module history Author: root Date: Sun Jun 11 17:53:46 2006 +0200 Revert "Imported package configuration version 4.60-3ubuntu3 for 'exim4-base'" This reverts 0be946f6be2f5b79574a6dafe1eb9ef2abd7b6d0 commit. 000000 D cron.daily/exim4-base 000000 D init.d/exim4 000000 D logrotate.d/exim4-base