Age | Commit message (Collapse) | Author | Files | Lines |
|
Eliminated the previous/next holdover from the curses interface: it
made sense there because of the limited real estate and input
mechanisms, but in the GTK+ frontend it's much better to have a list
of the already-generated solutions and a button to make a new solution.
There are still a bunch of loose ends. The display of the current
solution doesn't adapt well to being narrow -- I think the "action"
column should be nuked and merged with "name", but I'm not sure what
else to do there. Display of actions is somewhat inconsistent. It
would be nice to unify them, but we should do that with an eye to the
fact that differing renders are also useful. At the very least, use
of text styles should be straightened out: I'm not sure that showing
version numbers in a larger font works, but we should either do it
everywhere or nowhere. It's scattershoot now partly because I wanted
to throw lots of stuff at the wall and see what stuck. I also would
not bet much money on the behavior being absolutely correct.
|
|
fact that if all the dependencies are fixed, the resolver tab will go away on its own.
This fixes a double-free bug that was crashing the program.
|
|
exits without getting a self pointer, it doesn't try to remove a bad pointer from the set of active threads.
|
|
modify them.
Arguably we should have better UI here, but at least the capability is
visible now.
|
|
package list uses, so other lists can consistently use the same colors.
|
|
Actually, I bet they could be static (doesn't really matter, though).
|
|
This is in preparation for backpropagating conflict/promotion
information, and in fact much of the code for that is already
implemented in this commit (just not activated yet). I decided to
use integer references into a deque to keep things a little more
compact instead of having a huge number of structures on the heap: the
resolver is already memory-hungry enough, no need to make things even
worse.
|
|
|
|
"safe-upgrade" does.
Since all upgrades are selected anyway, this won't have much effect,
except that there might be some upgrades that shouldn't be selected
at all, and those are no longer allowed. The main motivation here is
to make the program's behavior more consistent.
|
|
Right now the default tiers are:
10,000 -> "safe" solutions containing only new installs, upgrades
and "keeps".
20,000 -> solutions that cancel all the user's actions.
30,000 -> solutions that remove packages.
40,000 -> solutions that break holds.
50,000 -> solutions that install non-default versions of packages.
(the subordinate tier is the version priority)
60,000 -> solutions that remove Essential packages.
Still to do: add tier hints, add a way to set tier names, show tiers
and/or names in the UI (in place of the meaningless and confusing
score value).
|
|
choice_sets, rather than manually storing the different types of choices in the solution object.
This has two beneficial effects. First, it should make it a bit easier
to add a new choice type, although many parts of the program will still
have to be touched. Perhaps more importantly, this provides a cleaner
conceptual model of what the resolver does: it finds "choice points"
(that is to say, dependencies that need to be solved) and makes choices
at them.
This commit sneaks in a few optimizations that I came across in the
process of rewiring all the resolver logic. The big one is that testing
whether a solution violates a user constraint now requires steps
proportional to the size of the solution, not to the number of user
constraints. (each step is logarithmic in the number of constraints,
but that's still a big improvement)
|
|
|
|
done.
|
|
Fixes the issues with the previous changesets.
|
|
Make a note about regex-unsafe debtags.
I'm also eliminating the make_debtags_tab function. It used to be much more complicated but now a bound functor will do.
|
|
|
|
|
|
them before the cache is closed.
This eliminates the race condition / crash that was left over in the
last patch. It also annotates the background thread code in pkgview
with logging statements, which should help with future debugging.
|
|
This should improve responsiveness quite a bit, and make incremental
searching work better. It still has a bug: closing the cache when a
rebuild is in progress might crash the program. To solve this, we need
to support a mechanism for canceling rebuilds that waits until all
the outstanding rebuilds are complete; right now we just ask rebuilds
to stop and block their results, but return immediately (which is right
for when the UI needs to restart a rebuild, but wrong for when we're
destroying the cache structures and need to stop the threads before
they kill themselves).
|
|
|
|
|
|
preview tab if it was an upgrade resolver.
|
|
It looks like there's a pretty nast race condition I can't pinpoint. I'm doing exactly like if I'm clicking on the close tab but it crashes sometimes, but not alw
ays.
|
|
|
|
|
|
The user usually is going to edit something so make life easier for him.
|
|
The incremental search is now fired only after 200ms of inactivity. This should mitigate the Gtk caret issues and improve responsivity.
|
|
To use it, just provide an additional Gtk::ToggleButton to PackageSearchEntry::create(...). There are some kinks to smooth out because of the way Gtk handles the signals (see FIXME).
|
|
|
|
be upgraded.
This is done by creating a special resolver tab, in which the initial
state consists of all the upgrades that the safe upgrader could figure
out. The user can then work towards a resolution to these dependencies.
If the cache is closed while this resolver tab is open, it will be
disabled until a new safe upgrade is calculated, and then filled in with
that upgrade's information.
This commit also tweaks the "number to install" message to also show
how many upgrades are available. But it's still not really
satisfactory. I might just go for "N upgrades out of M available
upgrades" even at the cost of nested ngettext() calls (the horror!)
|
|
Because "hg record" can't split diff hunks, some places that need
logging are bound up in another pending commit, unfortunately.
|
|
|
|
changelog, jump to it.
This means the "selected package" tab is useless -- maybe it should
turn into a mini-info-view instead?
|
|
a package snuck into the list.
|
|
The makes the changelog downloads when the program starts up much less
annoying.
We might want to have some sort of support in the future for throttling
the number of simultaneous parses to, say, 3 or 4. Without this, the
program will be (even more) unfriendly on low-end systems where one
changelog can't be parsed before the next one is downloaded.
|
|
calculated.
We should probably arrange for the "really upgrade" notification to
have an upgrade icon. I also wonder if "view changes" is a bad idea...
|
|
up-front.
Still to do:
* a working Upgrade button (right now it doesn't do the right thing).
* show the user the solution that was applied and the reasons behind it.
* let the user jump straight to resolving dependencies by hand.
|
|
|
|
|
|
|
|
|
|
A callback to TabsManager::do_switch_page may happen (race condition) with a tab that has already been closed when the user closes a tab, leading to a segfault.
|
|
associated image.
I think we also need to do something about the fact that the background
color of the text contained in a notification is very slightly, but
noticably, different from the background color of the surrounding
widgets. It's a lot easier to see this with the new widget.
|
|
blocked on input from 30 to 120 seconds.
On my fairly fast computer, this triggered just from dpkg trying to
read its database; I imagine that slower computers would hit it
regularly. Hopefully 120 seconds is long enough for this to happen
rarely, but short enough that it doesn't take annoyingly long to alert
the user when it needs to.
|
|
lists), attach icons to the notification(s) that represent(s) the operation.
|
|
I played around a little with the format, but I finally went with just
stuffing the image into the notification's box. I also looked at adding
a separator between the image and the text / other widgets, but it just
seemed hard to make it visible without making the spacing look weird.
|
|
synaptic does (assume the subprocess is waiting for input if it goes 30 seconds, or whatever, without reading).
TODO: add a note in the user's manual about this.
|
|
error and abort.
I think the crash only happened with logging enabled, which IMO is
arguably worse than the alternative...
|
|
This will make it easier to find them in the widget tree; it also
eliminates all the tab labels, which weren't being used anyway but
looked like they were if you opened the glade file.
|
|
|