~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/versionedfile.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-06 06:48:25 UTC
  • mfrom: (4070.8.6 debug-config)
  • Revision ID: pqm@pqm.ubuntu.com-20090306064825-kbpwggw21dygeix6
(mbp) debug_flags configuration option

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
#
16
16
# You should have received a copy of the GNU General Public License
17
17
# along with this program; if not, write to the Free Software
18
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
18
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
19
 
20
20
"""Versioned text file storage api."""
21
21
 
31
31
 
32
32
from bzrlib import (
33
33
    errors,
34
 
    groupcompress,
35
34
    index,
36
35
    knit,
37
36
    osutils,
795
794
        check_content=True):
796
795
        """Add a text to the store.
797
796
 
798
 
        :param key: The key tuple of the text to add. If the last element is
799
 
            None, a CHK string will be generated during the addition.
 
797
        :param key: The key tuple of the text to add.
800
798
        :param parents: The parents key tuples of the text to add.
801
799
        :param lines: A list of lines. Each line must be a bytestring. And all
802
800
            of them except the last must be terminated with \n and contain no
1486
1484
        """See VersionedFile.iter_lines_added_or_present_in_versions()."""
1487
1485
        for i, (key,) in enumerate(keys):
1488
1486
            if pb is not None:
1489
 
                pb.update("Finding changed lines", i, len(keys))
 
1487
                pb.update("iterating texts", i, len(keys))
1490
1488
            for l in self._get_lines(key):
1491
1489
                yield (l, key)
1492
1490
 
1519
1517
            'knit-annotated-delta-gz':knit.knit_network_to_record,
1520
1518
            'knit-delta-closure':knit.knit_delta_closure_to_records,
1521
1519
            'fulltext':fulltext_network_to_record,
1522
 
            'groupcompress-block':groupcompress.network_block_to_records,
1523
1520
            }
1524
1521
 
1525
1522
    def read(self):
1558
1555
    record_content = record.get_bytes_as('fulltext')
1559
1556
    return "fulltext\n%s%s%s" % (
1560
1557
        _length_prefix(record_meta), record_meta, record_content)
1561
 
 
1562
 
 
1563
 
def sort_groupcompress(parent_map):
1564
 
    """Sort and group the keys in parent_map into groupcompress order.
1565
 
 
1566
 
    groupcompress is defined (currently) as reverse-topological order, grouped
1567
 
    by the key prefix.
1568
 
 
1569
 
    :return: A sorted-list of keys
1570
 
    """
1571
 
    # gc-optimal ordering is approximately reverse topological,
1572
 
    # properly grouped by file-id.
1573
 
    per_prefix_map = {}
1574
 
    for item in parent_map.iteritems():
1575
 
        key = item[0]
1576
 
        if isinstance(key, str) or len(key) == 1:
1577
 
            prefix = ''
1578
 
        else:
1579
 
            prefix = key[0]
1580
 
        try:
1581
 
            per_prefix_map[prefix].append(item)
1582
 
        except KeyError:
1583
 
            per_prefix_map[prefix] = [item]
1584
 
 
1585
 
    present_keys = []
1586
 
    for prefix in sorted(per_prefix_map):
1587
 
        present_keys.extend(reversed(tsort.topo_sort(per_prefix_map[prefix])))
1588
 
    return present_keys