Hi all,
I develop code for a RoboCup (robot soccer) team. Though I would love to move from cvs to darcs, I have a very specific use case that might be a showstopper. I am very new to darcs though, so it may be that I'm just not understanding something. Please feel free to correct me, as I'd love to switch. :)
FYI, (since I suspect the scability of darcs might be the issue here), I switched our repository from CVS to darcs using cvs2darcs 0.7. We have approximately 1400 files in version control, dating back to early 2000; cvs2darcs found approximately 3800 patchsets. I did run darcs optimize on the repository, but that didn't seem to do much.
What I need is the ability to easily revert a single file (or set of files submitted in a single patch) to an older version very quickly. The reason for this is that we have many parameters (vision calibration, walk files, motion files, odometry parameters, etc) that need to be tweaked potentially before every game. Since we work under time pressure between games, the ability to roll back the code quickly in case of an error is very important. (Also, it is possible for us to call a 5-minute timeout if we need to put new code on the robots, or we can wait until halftime, which is 10 minutes.)
In CVS, I would do something like the following:
$ cvs log walk_xy.prm [look at log, find out that I want rev. 1.10] $ cvs update -r 1.10 walk_xy.prm $ cp walk_xy.prm walk_xy_1.10.prm $ cvs update -A $ mv walk_xy_1.10.prm walk_xy.prm $ cvs commit
In darcs, I seem to have to do something like this:
$ darcs annotate agent/config/motion/ers7/walk_xy.prm
[look at log, find out I want the patch named "updated walk_xy.prm, walk_a.prm and odom.prm, Sab"]
Now, ideally, I think I would do a darcs unpull or darcs rollback, however, when I do either of them, I get a result like the following:
$ darcs unpull -v --match 'name "updated walk_xy.prm"'
Skipping depended-upon patch: Tue Mar 29 17:50:58 EST 2005 shauert * updated walk_xy.prm, walk_a.prm and odom.prm, Sab
Even though I specified -v, it's not giving me any useful info on *what* depends on this patch, so I apparently can't make darcs roll me back.
As a last resort, I can of course use "darcs get" to get the entire repository as it looked after that patch:
$ mkdir dogs-tmp $ cd dogs-tmp $ darcs get --to-match='name "updated walk_xy.prm"' ../dogs
This actually works, and then I can copy over the .prm file and do a darcs record/darcs push to actually commit the changes.
So this works, even though it seems just as hackish (or perhaps moreso) than the CVS solution. Also, it takes about 10 seconds to do the whole thing in CVS, whereas in darcs:
annotate took 2:54 minutes unpull took 2:11 before failing get took 0:59
So a common operation (one that we will undoubtedly have to do at
RoboCup) that takes 10 seconds in CVS takes several minutes in darcs.
And this is only for one file, where we knew the exact version that we
wanted... if we needed to try out (say) 5 different versions of walk params, it would take about 1 minute to grab the most recent ones out of CVS, but 15-30 minutes in darcs.
So if you know of a way to do this more properly or more efficiently, let me know... either I'm doing something fundamentally wrong, or darcs just doesn't seem to be a solution we can use in our case.
Thanks a lot for any help/suggestions you may have!
- Colin
_______________________________________________ darcs-users mailing list [email protected] http://www.abridgegame.org/mailman/listinfo/darcs-users
