~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to read_changeset.py

  • Committer: John Arbash Meinel
  • Date: 2005-07-16 16:22:04 UTC
  • mto: (1185.82.1 bzr-w-changeset) (0.5.98)
  • mto: This revision was merged to the branch mainline in revision 1738.
  • Revision ID: john@arbash-meinel.com-20050716162204-ca86975b99b2742e
Handling international characters, added more test cases.

Show diffs side-by-side

added added

removed removed

Lines of Context:
342
342
 
343
343
    def _read_header(self):
344
344
        """Read the bzr header"""
345
 
        import common
346
 
        header = common.get_header()
 
345
        from common import decode, get_header, header_str
 
346
        header = get_header()
347
347
        found = False
348
348
        for line in self._next():
349
349
            if found:
351
351
                if line == '#\n':
352
352
                    line = '# \n'
353
353
                if (line[:2] != '# ' or line[-1:] != '\n'
354
 
                        or line[2:-1] != header[0]):
 
354
                        or decode(line[2:-1]) != header[0]):
355
355
                    raise MalformedHeader('Found a header, but it'
356
356
                        ' was improperly formatted')
357
357
                header.pop(0) # We read this line.
358
358
                if not header:
359
359
                    break # We found everything.
360
360
            elif (line[:1] == '#' and line[-1:] == '\n'):
361
 
                line = line[1:-1].strip()
362
 
                if line[:len(common.header_str)] == common.header_str:
 
361
                line = decode(line[1:-1].strip())
 
362
                if line[:len(header_str)] == header_str:
363
363
                    if line == header[0]:
364
364
                        found = True
365
365
                    else:
379
379
    def _read_next_entry(self, line, indent=1):
380
380
        """Read in a key-value pair
381
381
        """
 
382
        from common import decode
382
383
        if line[:1] != '#':
383
384
            raise MalformedHeader('Bzr header did not start with #')
384
 
        line = line[1:-1] # Remove the '#' and '\n'
 
385
        line = decode(line[1:-1]) # Remove the '#' and '\n'
385
386
        if line[:indent] == ' '*indent:
386
387
            line = line[indent:]
387
388
        if not line:
427
428
        This detects the end of the list, because it will be a line that
428
429
        does not start properly indented.
429
430
        """
 
431
        from common import decode
430
432
        values = []
431
433
        start = '#' + (' '*indent)
432
434
 
434
436
            return values
435
437
 
436
438
        for line in self._next():
437
 
            values.append(line[len(start):-1])
 
439
            values.append(decode(line[len(start):-1]))
438
440
            if self._next_line is None or self._next_line[:len(start)] != start:
439
441
                break
440
442
        return values
445
447
 
446
448
        :return: action, lines, do_continue
447
449
        """
 
450
        from common import decode
448
451
        #mutter('_read_one_patch: %r' % self._next_line)
449
452
        # Peek and see if there are no patches
450
453
        if self._next_line is None or self._next_line[:1] == '#':
458
461
                    raise MalformedPatches('The first line of all patches'
459
462
                        ' should be a bzr meta line "***"'
460
463
                        ': %r' % line)
461
 
                action = line[4:-1]
 
464
                action = decode(line[4:-1])
462
465
            if self._next_line is not None and self._next_line[:3] == '***':
463
466
                return action, lines, True
464
467
            elif self._next_line is None or self._next_line[:1] == '#':
543
546
            if len(info) < 2:
544
547
                raise BzrError('renamed action lines need both a from and to'
545
548
                        ': %r' % extra)
546
 
            old_path = decode(info[0])
 
549
            old_path = info[0]
547
550
            if info[1][:3] == '=> ':
548
 
                new_path = decode(info[1][3:])
 
551
                new_path = info[1][3:]
549
552
            else:
550
 
                new_path = decode(info[1])
 
553
                new_path = info[1]
551
554
 
552
555
            file_id = tree.path2id(new_path)
553
556
            if len(info) > 2:
556
559
                text_id = get_text_id(None, file_id, kind)
557
560
            tree.note_rename(old_path, new_path)
558
561
            if lines:
559
 
                tree.note_patch(new_path, ''.join(lines), text_id)
 
562
                tree.note_patch(new_path, ''.join(lines))
560
563
 
561
564
        def removed(kind, extra, lines):
562
565
            info = extra.split(' // ')
565
568
                # given for removed entries
566
569
                raise BzrError('removed action lines should only have the path'
567
570
                        ': %r' % extra)
568
 
            path = decode(info[0])
 
571
            path = info[0]
569
572
            tree.note_deletion(path)
570
573
 
571
574
        def added(kind, extra, lines):
576
579
            elif len(info) > 3:
577
580
                raise BzrError('add action lines have fewer than 3 entries.'
578
581
                        ': %r' % extra)
579
 
            path = decode(info[0])
 
582
            path = info[0]
580
583
            if info[1][:8] != 'file-id:':
581
584
                raise BzrError('The file-id should follow the path for an add'
582
585
                        ': %r' % extra)
583
 
            file_id = decode(info[1][8:])
 
586
            file_id = info[1][8:]
584
587
 
585
588
            tree.note_id(file_id, path, kind)
586
589
            if kind == 'directory':
596
599
            if len(info) < 1:
597
600
                raise BzrError('modified action lines have at least'
598
601
                        'the path in them: %r' % extra)
599
 
            path = decode(info[0])
 
602
            path = info[0]
600
603
 
601
604
            file_id = tree.path2id(path)
602
605
            if len(info) > 1: