~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/revision.py

  • Committer: Martin Pool
  • Date: 2005-04-15 01:31:21 UTC
  • Revision ID: mbp@sourcefrog.net-20050415013121-b18f1be12a735066
- Doc cleanups from Magnus Therning

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
2
 
# -*- coding: UTF-8 -*-
 
1
# (C) 2005 Canonical
3
2
 
4
3
# This program is free software; you can redistribute it and/or modify
5
4
# it under the terms of the GNU General Public License as published by
17
16
 
18
17
 
19
18
 
 
19
 
20
20
from xml import XMLMixin
21
 
from ElementTree import Element, ElementTree, SubElement
 
21
 
 
22
try:
 
23
    from cElementTree import Element, ElementTree, SubElement
 
24
except ImportError:
 
25
    from elementtree.ElementTree import Element, ElementTree, SubElement
 
26
 
 
27
from errors import BzrError
 
28
 
22
29
 
23
30
class Revision(XMLMixin):
24
31
    """Single revision on a branch.
27
34
    written out.  This is not stored because you cannot write the hash
28
35
    into the file it describes.
29
36
 
30
 
    :todo: Perhaps make predecessor be a child element, not an attribute?
 
37
    TODO: Perhaps make predecessor be a child element, not an attribute?
31
38
    """
32
39
    def __init__(self, **args):
33
40
        self.inventory_id = None
34
41
        self.revision_id = None
35
42
        self.timestamp = None
36
43
        self.message = None
 
44
        self.timezone = None
 
45
        self.committer = None
 
46
        self.precursor = None
37
47
        self.__dict__.update(args)
38
48
 
39
49
 
40
50
    def __repr__(self):
41
 
        if self.revision_id:
42
 
            return "<Revision id %s>" % self.revision_id
 
51
        return "<Revision id %s>" % self.revision_id
43
52
 
44
53
        
45
54
    def to_element(self):
46
 
        root = Element('changeset',
 
55
        root = Element('revision',
47
56
                       committer = self.committer,
48
 
                       timestamp = '%f' % self.timestamp,
 
57
                       timestamp = '%.9f' % self.timestamp,
49
58
                       revision_id = self.revision_id,
50
 
                       inventory_id = self.inventory_id)
 
59
                       inventory_id = self.inventory_id,
 
60
                       timezone = str(self.timezone))
51
61
        if self.precursor:
52
62
            root.set('precursor', self.precursor)
53
63
        root.text = '\n'
58
68
 
59
69
        return root
60
70
 
61
 
    def from_element(cls, root):
62
 
        cs = cls(committer = root.get('committer'),
63
 
                 timestamp = float(root.get('timestamp')),
64
 
                 precursor = root.get('precursor'),
65
 
                 revision_id = root.get('revision_id'),
66
 
                 inventory_id = root.get('inventory_id'))
67
 
 
68
 
        cs.message = root.findtext('message') # text of <message>
 
71
 
 
72
    def from_element(cls, elt):
 
73
        # <changeset> is deprecated...
 
74
        if elt.tag not in ('revision', 'changeset'):
 
75
            raise BzrError("unexpected tag in revision file: %r" % elt)
 
76
 
 
77
        cs = cls(committer = elt.get('committer'),
 
78
                 timestamp = float(elt.get('timestamp')),
 
79
                 precursor = elt.get('precursor'),
 
80
                 revision_id = elt.get('revision_id'),
 
81
                 inventory_id = elt.get('inventory_id'))
 
82
 
 
83
        v = elt.get('timezone')
 
84
        cs.timezone = v and int(v)
 
85
 
 
86
        cs.message = elt.findtext('message') # text of <message>
69
87
        return cs
70
88
 
71
89
    from_element = classmethod(from_element)