gsmanners said: Actually, the *best* that you could do is make Update Manager discern the difference between a good partial upgrade and a bad one. That would resolve the issue completely.
I agree... But while there are some bugs or annoyances, some specific features missing, etc in Ubuntu that we can link to programmers lack of time, focus, small mistakes, etc, I consider the apt apps and deb system one of the most complicated to play with. If a feature is not there, it probably is very hard to implement...
I know a guy who's working on something very similar for an ERP system: He's created a very basic framework for testing. There are only 10 packages (A, B, C, etc). Each package can have any number of versions. (A1, B1, C2, D1.0.1, etc). Then you start to input rules in a xml file saying stuff like: A depends on B. B depends on D. E conflicts with A, but E1 can be used with A as long as D version is > 2.0, D2.0 is not compatible with A<1.6, etc. Now, the remote server get their xml rules from a central server and must execute them in order. XML rule1, xml rule 2, etc. Now, suppose the central system is dispatching xml rules for 3 years and, it's on xml rule 1.000 and you install a new zeroed server that will receive these rules. Should the new server download, erase, redownload, apply, unapply, etc packages from xml rules 1,2,3,4,5...1000? No, of course not. It should calculate the best, fastest, using less bandwidth way to get to rule 1000.
It's not that one can't develop C code to solve the puzzle. The question is how to solve the puzzle efficiently: Fast, make use of packages that are already downloaded when possible, make sure local packages are OK (md5, etc) or re-download them, reinstall them, without breaking deps, etc. And then when you get to a unknown status (failed download, broken package, down server offline, wrong xml rule - all of these will eventually happen), know how to get back to the last possible status using resources efficiently, in a way that the system will never get broke.
From the standpoint of programming logic it might sound easy... pure mathematics - compare packages versions to rules. But just about any code you make would be criticized by a program manager, code optimization specialists, etc. It won't be truly efficient until a late and mature version.
So, in the case of update-manager, considering that developers should choose between something similar to that and commenting out a button... I'd comment out the button :)