Keiron Liddle wrote:

> Actually projects like mozilla have branches for maintanence but the key
> is that they are short lived, this didn't work out like that.

I don't know this, but I'll bet that the maintenance branch that you refer
to here is for bug fixes, while the main development line progresses
*incrementally* on the trunk. The reason why ours didn't work out that way
(I suspect) is because we tried to do a chasm-type change on the trunk,
where we had to break the code to go forward. With 20/20 hindsight, it is
easy to see that the chasm change would have been more convenient to manage
on a branch. In this respect, it is no different from a normal patch. For a
normal patch, your sandbox is a kind of branch. Only after the code is
completed and tested do you commit it. The only difference with a chasm-type
change is that, because it is so big, you want to be able to put incremental
changes into source code control so that can keep a history. The principle
still remains that only after it is completed and tested should it be merged
(committed, if you will) to the trunk. As you correctly point out elsewhere,
this is all water under the bridge. I mention it only because I suspect that
it explains the difference with mozilla.

> I think you have misunderstood something. There has been a great number
> of changes across many packages and classes in trunk. The reason being
> that the code was (and still is in the branch) in a bad way, this
> occured gradually more because it wasn't prevented from hapenning.
> For example the link support, pdf library, image handling.
> It becomes quite obvious when you understand why there are so many bugs
> with link positioning, image handling and further causes of memory
> leaks, excess memory usage.

I think I understand. However, the question is not the quantity or even
location of the changes that have been made, but the scope. The real
question is how many of the changes that have taken place in the trunk are
changes that were applicable only to the trunk -- in other words, are a lot
of them changes that would have helped or at least not hurt the maintenance
branch?

> This is what seems to be the real problem. You think that the branch is
> mostly okay and only some of it has changed in the trunk. This isn't
> really the case.

I didn't mean to imply that the branch is mostly OK, but I understand your
point.

> The code in the trunk is more advanced in a number of ways. Such as
> transparency, link handling, image handling, gstate, graphic state.
> Now if you are to improve the code in the branch it will mean either it
> has already been done or that the changes will need to be brought across
> from old code to new changed code. In some cases the changes will
> compound old problems (for example you used the MessageHandler).
> Now if the improvements are made in trunk this is more likely to be
> handled better, the code could then go across to improve the branch.

This seems to support my point that some of the files were unnecessarily
forked, but I sure might be missing something again.

Also, it is possible that, even if the unnecessary forks could have been
prevented in the past, the fact that they took place has led to unfixable
differences. For example, if one branch was refactored for X, and the other
was not, it will be more difficult to merge them now. I suspect that your
MessageHandler citation is such an example, as I was imitating other
maintenance branch code.

> There isn't really that much on the branch that is relevant to the
> trunk. The thing the branch has is that the layout works (sort of) and
> it is a complex beast to do properly.
>
>
> Maybe the simplest is to move the old layout to the trunk, get that
> working and put the new layout in a branch. But it needs to be agreed
> upon.

The key here is to divide the differences between the two branches into two
groups: 1) those that *must* be different between the branches or that
cannot be efficiently reconciled, 2) those that can (efficiently) be merged
without breaking either branch. If the differences are heavily in the first
class, we should just continue on from where we are. If they fall
substantially in the second class, then the plan you propose above makes a
lot of sense.

While we are in a brainstorming mode, please forgive me for throwing out
another wild hare to consider. (This only makes sense if most of the
differences are in the second class): Is it at all feasible to maintain both
layout managers in one set of code? In other words, for the choice to be
selectable or pluggable? Perhaps put the old logic into an oldlayout
package. If there is a lot of potential commonality between the code, this
would give us an opportunity to reunify the two branches right now, and
simply blow the old stuff away at some point in the future when it is no
longer needed. It would be worth *a lot* to get the branches unified if at
all possible.

If it is not feasible to unify significant portions of the two branches,
either by switching them in the repository or by putting them into one
branch, then I propose that we clarify our terminology by using the term
"rewrite" instead of "redesign". This would signal that we are not merely
rebuilding an important module, but that the changes are pervasive, and that
the old code has been effectively abandoned.

Keiron, I'm sorry to keep asking you to answer the same question over and
over again. I guess I've never had to totally abandon useful code before
(however moderate the usefulness might be). If, after considering the above
points, you are sure that we are on the right track, I'll do what I can to
be useful on the trunk. Unless you have a better idea, I'll continue with
the font work -- just understand that the refactoring work will be much more
likely to introduce bugs when I am flying blind than it would be with
working code.

Thanks for your patience.

Victor Mote


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to