[RFC] Joining of annotated and plain knits

Ian Clatworthy ian.clatworthy at internode.on.net
Tue Sep 25 00:58:06 BST 2007

Robert Collins wrote:

>> +    if 'fulltext' in options:
>> +        return [line.split(' ', 1)[1] for line in lines]
>> +    else:
>> +        # line delta - leave 1st line alone
>> +        return [lines[0]] + [line.split(' ', 1)[1] for line in
>> lines[1:]]
> This is a bit naughty - the KnitFactory class currently has the parsing
> and serialisation code, layer wise it would be better to do something
> like

Agreed. I'll clean that up.

>> +def _plain_to_anno_converter(lines, version_id, options):
>> +    """Convert plain lines to annotated lines."""
>> +    if 'fulltext' in options:
>> +        return ['%s %s' % (version_id,line) for line in lines]
>> +    else:
>> +        # line delta - leave 1st line alone
>> +        return [lines[0]] + ['%s %s' % (version_id,line) for line in
>> lines[1:]]
> This case fails because you are claiming to know the annotations, but
> this is bogus - you don't.
> So, the simplest thing when converting from plain to annotated, the
> 'right thing' to do is probably to reconstruct the full text always,
> then to call self.target.add_lines_with_ghosts - you can pass in the
> convert parent records to speed this up (the last element of the return
> value of add_lines_with_ghosts can be put in a dict and passed back in).

Thanks. I'll get my head around that and try that now.

> A more complex solution would be to take advantage of the deltas in the
> chain of the merged parents to reduce the amount of data processing; but
> honestly, lets get this robust and visibly correct, and see how long it
> takes, before stressing.


Ian C.

More information about the bazaar mailing list