Okay, now that I've given a quick breeze through the TODO (Thanks Benjamin for pointing it out!), I feel somewhat confident that my suggestions are at least vaguely novel, so here we go! :)
I first started using Unison for the sake of keeping my remote home directory synced with my home computer so I could do programming work from home without having to pipe everything over SSH. This is exactly the kind of thing Unison was designed for, and it works in this realm extremely well!
Later, however, I got the bright idea of using Unison to keep the music files on my primary computer and my media center PC synced. It seemed like a great idea, but I was sorely disappointed by how poorly Unison handled the task. First of all, Unison had to compute and compare checksums for thousands of files (15GB worth!), which was a complete waste of time since I will never "edit" my mp3s (yes, changing tags is a concern, but adding tags to untagged files would change the file size, which is easily detected, and I can live with a few missed tag changes if it means syncing doesn't take hours). Also, one of the reasons I wanted to synchronize was so I could tidy my directory layout on one computer and then propagate the changes to the other. This is a pain because rename
d files are seen as creations and deletions and Unison's default policy (which you have to change file by file) seems to be to make sure both roots have copies of the old and new filenames.
So, basically, this boils down to two feature requests:
1) Let the user customize the diff engine. Something like this was mentioned in the TODO, but not in quite the same context. The user should be able to specify any arbitrary program for computing diffs between files, but he should also be able to specify lighter-weight diff mechanisms that don't require transferring whole files or even computing checksums. For instance, I would love it if I could just tell Unision to treat two files with the same name and file size as identical. This improvement alone would probably be enough to make handling lots of large binary files feasible. I was sure Unison must already support this, but a few hours of hunting turned up no leads. :(
2) Rename detection. This is pretty tricky, but it can be reduced to a couple of very well studied problems. There are lots of interesting cues you could use, including directory tree similarities, filename overlap, file size, etc. Obviously this isn't a very common case, but Unison is normally so good at guessing the correct change to make, it would be so nice if it could recognize this sort of thing, too. If I'm mistaken and Unison already tries to do this, the current algorithm really wasn't working well for me and my mp3s.
So, yeah, two features I'd really love to see! I'd also love to hear any thoughts/comments you guys might have about them, or techniques for using Unison to synchronize media libraries or the like. I've given up on this for now, but I really do love Unison and I'd be thrilled if I could use it for this sort of thing.