[MERGE][BUG #233817] Missing shows merged revisions with --include-merges

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Sep 12 10:36:59 BST 2008


>>>>> "john" == John Arbash Meinel <john at arbash-meinel.com> writes:

    john> Vincent Ladeuil wrote:
    >>>>>>> "john" == John Arbash Meinel <john at arbash-meinel.com> writes:
    >> 
    >> <snip/>
    >> 
    john> So the primary issue is that (as of yet) we can't do
    john> dotted revno numbering without accessing the full
    john> revision graph. And your work here:
    >> 
    >> <snip/>
    >> 
    john> ^- Will give wrong numbers for anything resembling
    john> complex history. I can give specific graphs that it
    john> will break, or you can just trust me. :)
    >> 
    >> Trusting you, I propose this patch.
    >> 
    >> Vincent
    >> 
    >> 

    john> I'm a bit concerned about this line:

    john> -    for revno, rev_id in revisions:
    john> +    for rev in revisions:
    john> +        # We need the following for backward compatibilty (hopefully
    john> +        # this will be deprecated soon :-/) -- vila 080911
    john> +        if len(rev) == 2:
    john> +            revno, rev_id = rev
    john> +            merge_depth = 0
    john> +        else:
    john> +            revno, rev_id, merge_depth = rev

    john> I really don't like sometimes passing in 2 values and sometimes passing
    john> in 3. Is there something we can do better here?

Yes. Two possible solutions:

1) Always pass 3 values.

2) Rework the whole thing to use LogRevision objects (since this
   is where we take care of the problem *today*).

I did try (1) put it required updating tests and breaking
backward compatibility. As I intend to do (2), I punted.

    john> ...
    john> -        mainline.append((cur_revno, cur))
    john> +        mainline.append((str(cur_revno), cur))

    john> ^- Since you are changing the signature, what about setting
    john> "merge_depth=0" here for all mainline revisions. So something like:

This was a drive-by fix, doing (2) will get rid of it.

    john> mainline.append((str(cur_revno), cur, 0))

    john> ...

    john> +    def test_include_merges(self):
    john> +        tree = self.make_branch_and_tree('tree')
    john> +        rev1 = tree.commit('one', rev_id='rev1')

    john> ^- It would be nice to use the "BranchBuilder" api for this. Just as a
    john> way to encourage new tests to be written without hitting disk unless
    john> they are testing that portion of code.

Hmm, what I need here is the ability to create a branch from
another existing one and then merge. This is not (yet?) provided
by branch_builder and adding that is outside the scope of a tweak
I think. I filed https://bugs.edge.launchpad.net/bzr/+bug/269319.

    john> ...

    john> +        self.assertUnmerged([], [('2', 'rev2', 0), ('3', 'rev3',0 ),
    john> +                                 ('4', 'rev6', 0),
    john> +                                 ('3.1.1', 'rev4', 1), ('3.1.2',
    john> 'rev5', 1),
    john> +                                 ],

    john> ^- Just a quick check that we are sure this order is correct.

    john> Also, you don't have a check if we set "backward=True".

Right.

On the other hand, if you look at that patch history, you will
notice quite a few errors encountered before getting the
'backward' right :) So I can guarantee that if anybody mess with
that, they will notice quickly.

But I'll add tests anyway.

    john> BB:tweak

Thanks,

        Vincent



More information about the bazaar mailing list