~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: Robert Collins
  • Date: 2005-08-23 06:44:54 UTC
  • mto: (974.1.50) (1185.1.10) (1092.3.1)
  • mto: This revision was merged to the branch mainline in revision 1139.
  • Revision ID: robertc@robertcollins.net-20050823064454-830ef7d426be03f6
move log and temp dir setup foo into the TestSuite we use

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
18
 
19
 
 
 
19
def _update_store_entry(obj, obj_id, branch, store_name, store):
 
20
    """This is just a meta-function, which handles both revision entries
 
21
    and inventory entries.
 
22
    """
 
23
    from bzrlib.trace import mutter
 
24
    import tempfile, os, errno
 
25
    from osutils import rename
 
26
    obj_tmp = tempfile.TemporaryFile()
 
27
    obj.write_xml(obj_tmp)
 
28
    obj_tmp.seek(0)
 
29
 
 
30
    tmpfd, tmp_path = tempfile.mkstemp(prefix=obj_id, suffix='.gz',
 
31
        dir=branch.controlfilename(store_name))
 
32
    os.close(tmpfd)
 
33
    try:
 
34
        orig_obj_path = branch.controlfilename([store_name, obj_id+'.gz'])
 
35
        # Remove the old entry out of the way
 
36
        rename(orig_obj_path, tmp_path)
 
37
        try:
 
38
            # TODO: We may need to handle the case where the old
 
39
            # entry was not compressed (and thus did not end with .gz)
 
40
 
 
41
            store.add(obj_tmp, obj_id) # Add the new one
 
42
            os.remove(tmp_path) # Remove the old name
 
43
            mutter('    Updated %s entry {%s}' % (store_name, obj_id))
 
44
        except:
 
45
            # On any exception, restore the old entry
 
46
            rename(tmp_path, orig_obj_path)
 
47
            raise
 
48
    finally:
 
49
        if os.path.exists(tmp_path):
 
50
            # Unfortunately, the next command might throw
 
51
            # an exception, which will mask a previous exception.
 
52
            os.remove(tmp_path)
 
53
        obj_tmp.close()
 
54
 
 
55
def _update_revision_entry(rev, branch):
 
56
    """After updating the values in a revision, make sure to
 
57
    write out the data, but try to do it in an atomic manner.
 
58
 
 
59
    :param rev:    The Revision object to store
 
60
    :param branch: The Branch object where this Revision is to be stored.
 
61
    """
 
62
    _update_store_entry(rev, rev.revision_id, branch,
 
63
            'revision-store', branch.revision_store)
 
64
 
 
65
def _update_inventory_entry(inv, inv_id, branch):
 
66
    """When an inventory has been modified (such as by adding a unique tree root)
 
67
    this atomically re-generates the file.
 
68
 
 
69
    :param inv:     The Inventory
 
70
    :param inv_id:  The inventory id for this inventory
 
71
    :param branch:  The Branch where this entry will be stored.
 
72
    """
 
73
    _update_store_entry(inv, inv_id, branch,
 
74
            'inventory-store', branch.inventory_store)
20
75
 
21
76
def check(branch):
22
77
    """Run consistency checks on a branch.
29
84
    from bzrlib.errors import BzrCheckError
30
85
    from bzrlib.osutils import fingerprint_file
31
86
    from bzrlib.progress import ProgressBar
 
87
    from bzrlib.inventory import ROOT_ID
 
88
    from bzrlib.branch import gen_root_id
32
89
 
33
90
    branch.lock_read()
34
91
 
167
224
    if missing_revision_sha_cnt:
168
225
        print '%d parent links are missing revision_sha1' % missing_revision_sha_cnt
169
226
 
170
 
    if (missing_inventory_sha_cnt
171
 
        or missing_revision_sha_cnt):
172
 
        print '  (use "bzr upgrade" to fix them)'
 
227
    # stub this out for now because the main bzr branch has references
 
228
    # to revisions that aren't present in the store -- mbp 20050804
 
229
#    if (missing_inventory_sha_cnt
 
230
#        or missing_revision_sha_cnt):
 
231
#        print '  (use "bzr upgrade" to fix them)'
173
232
 
174
233
    if mismatch_inv_id:
175
234
        print '%d revisions have mismatched inventory ids:' % len(mismatch_inv_id)