Jorey Bump wrote:
Jamie Webb wrote:
On Mon, Nov 06, 2006 at 12:33:58PM -0500, Jorey Bump wrote:
I have a nice little repository of source code to which I added a huge directory of binary resources. I then worked on several revisions of the source code and decided that I didn't need the binaries, after all. None of the source code is dependent on the existence of the binary files in any of the revisions. Unfortunately, this leaves me with a HUGE repository for what was once efficient text. How can I erase all evidence of the unused directory containing the binaries without losing my record of changes? Is there a simple way to do this, or must I pull up to the unwanted patch and repeat the process, copying only the desired code and recording the patches with each step?

If there are no dependencies, you can just 'darcs obliterate' the
patch in which you added the binaries. Otherwise, yes you'll need to
remove the depending patches too and re-record them.

I've tried this out on a test repository with the following patches:

Initial import
Revision 1
Revision 2
Revision 3
Add BIG binary directory
Revision 4
Revision 5

I ran this command:

 darcs obliterate -p "Add BIG binary directory"

After consuming most of my memory and swap space for over an hour (but not using much CPU), it finally finished. It removed the big directory from both my working copy and _darcs/current, but it didn't remove the actual patch file. The patch no longer appears in changes:

Initial import
Revision 1
Revision 2
Revision 3
Revision 4
Revision 5

Is it safe to  delete the corresponding (and huge) patch file, now?

Also, this procedure was so memory intensive, it made my workstation almost unusable. I can offload the repository to another machine for processing, but could I have achieved the same thing by simply deleting the large patch, removing the directory from working & current, and deleting the corresponding line from _darcs/inventory? Once again, we're assuming there are no dependencies.

Well, to answer my own question, I tried it out, and it seemed to work:

 cd repo
 rm _darcs/patches/20061105223741-really-big-patch.gz
 rm bigdir
 rm _darcs/current/bigdir
 vim _darcs/inventory   # delete lines relating to patch
 darcs check

 Applying patch 42 of 42... done.
 The repo is consistent!

Obviously, this won't work in any case where there are dependencies, but I was lucky this time (or so it seems). I'm sure there a lot of nasty implications, but it's a nice shortcut until I get a quantum computer (fitting for a program allegedly having roots in quantum mechanics). :)


_______________________________________________
darcs-users mailing list
[email protected]
http://www.abridgegame.org/mailman/listinfo/darcs-users

Reply via email to