Here's the thing that I really miss in the Mercurial based version control I am currently using; i.e. here is something that CVS used to do really well, that Mercurial makes a pain.
Here's the output of a shell scruipt that goes and looks at 4 of the hg repos/clone/workspaces that I am normally working in:
hg root: /home/glew
hg root: /home/glew/work/work.mips
hg root: /home/glew/work/work.mips/uarch-perf-sim/psim+stuff
hg root: /home/imp_scratch_perf/glew
It's not too bad - I've only made coordinated changes in two repos. Sometimes I have made changes in 4 or 5, that are all coordinated in some sense.
Back in my CVS days I could build a composite workspace, and check them all in at the same time, with a single command and checkin message. I could even tag them together.
In Mercurial, I have to go to each repo and check in separately.
Don't say "subrepos": I am already using Mercurial subrepos: psim+stuff is actually a super-repo with 2 subrepos. Subrepos get part of the way there, but are nowhere as easy and convenient to use as the compositeworkspaces I could set up with CVS.
I am reasonably certain that the above excerpt is non sensitive: it's pretty well known that I work for MIPS, on performance simulators, and with RTL. I sanitized any product names.
One big reason to want composite checkins: I work better when I am keeping track in a log. E.g. ~/LOG -> ~/mips/LOG.
(Let's skip over issues about why UNIX text files are lousy for logs.)
So nearly always I want to check in both my LOG, and my project work, at the same time. But they are in different repos.
I don't make my project work a subrepo of my home directory, ~, or of my company work area under my home directory, ~/work or ~/work/work.mips, because I frequently create new ad-hoc clones, i.e. task branches. It is a pain to have to edit Mercurial's subrepo file whenever I want an ad-hoc branch.
The nice thing about CVS composite workspaces was that, in some existing workspace, I could just say "cvs -d SOME-OTHER-CVSROOT co repo" and it just worked. I.e. connecting an ad hoc subrepo trivial.
In an ideal world, I might want to make the distinction
(1) clone into a new subdirectory of an existing workspace, implicitly making it an ad hoc subrepo for the workspace checking out into
(2) clone, without linking into the enclosing workspace.
Almost what I want:
# Script to run Mercurial commands on tghe usual places I run them
for i in ~/. ~/mips/. ~/mips/uarch-perf-sim/psim+stuff/. ~/mips/rtl/. ~/mips/rtl/current/.
hg --cwd $i root 2>&1 | sed -e 's/^/ hg root: /'
hg --cwd $i "$@" 2>&1 | sed -e 's/^/ /'
although "hgu ci" does not automatically copy checkin message between repos.