~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commit.py

  • Committer: Martin Pool
  • Date: 2005-09-14 06:07:43 UTC
  • Revision ID: mbp@sourcefrog.net-20050914060743-d686cab50e0adaa1
doc

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
## applies and recreates the right state.
27
27
 
28
28
 
 
29
## This is not quite safe if the working copy changes during the
 
30
## commit; for the moment that is simply not allowed.  A better
 
31
## approach is to make a temporary copy of the files before
 
32
## computing their hashes, and then add those hashes in turn to
 
33
## the inventory.  This should mean at least that there are no
 
34
## broken hash pointers.  There is no way we can get a snapshot
 
35
## of the whole directory at an instant.  This would also have to
 
36
## be robust against files disappearing, moving, etc.  So the
 
37
## whole thing is a bit hard.
 
38
 
 
39
## The newly committed revision is going to have a shape corresponding
 
40
## to that of the working inventory.  Files that are not in the
 
41
## working tree and that were in the predecessor are reported as
 
42
## removed -- this can include files that were either removed from the
 
43
## inventory or deleted in the working tree.  If they were only
 
44
## deleted from disk, they are removed from the working inventory.
 
45
 
 
46
## We then consider the remaining entries, which will be in the new
 
47
## version.  Directory entries are simply copied across.  File entries
 
48
## must be checked to see if a new version of the file should be
 
49
## recorded.  For each parent revision inventory, we check to see what
 
50
## version of the file was present.  If the file was present in at
 
51
## least one tree, and if it was the same version in all the trees,
 
52
## then we can just refer to that version.  Otherwise, a new version
 
53
## representing the merger of the file versions must be added.
 
54
 
 
55
 
 
56
 
29
57
 
30
58
 
31
59
import os
120
148
        store, then the inventory, then make a new revision pointing
121
149
        to that inventory and store that.
122
150
 
123
 
        This is not quite safe if the working copy changes during the
124
 
        commit; for the moment that is simply not allowed.  A better
125
 
        approach is to make a temporary copy of the files before
126
 
        computing their hashes, and then add those hashes in turn to
127
 
        the inventory.  This should mean at least that there are no
128
 
        broken hash pointers.  There is no way we can get a snapshot
129
 
        of the whole directory at an instant.  This would also have to
130
 
        be robust against files disappearing, moving, etc.  So the
131
 
        whole thing is a bit hard.
132
 
 
133
151
        This raises PointlessCommit if there are no changes, no new merges,
134
152
        and allow_pointless  is false.
135
153
 
148
166
        """
149
167
 
150
168
        self.branch = branch
151
 
        self.branch.lock_write()
152
169
        self.rev_id = rev_id
153
170
        self.specific_files = specific_files
154
171
        self.allow_pointless = allow_pointless
172
189
        assert isinstance(message, basestring), type(message)
173
190
        self.message = message
174
191
 
 
192
        self.branch.lock_write()
175
193
        try:
176
194
            # First walk over the working inventory; and both update that
177
195
            # and also build a new revision inventory.  The revision
191
209
            if self.rev_id is None:
192
210
                self.rev_id = _gen_revision_id(self.branch, time.time())
193
211
 
 
212
            self._remove_deletions()
 
213
 
194
214
            # TODO: update hashcache
195
215
            self.delta = compare_trees(self.basis_tree, self.work_tree,
196
216
                                       specific_files=self.specific_files)
202
222
 
203
223
            self.new_inv = self.basis_inv.copy()
204
224
 
 
225
            ## FIXME: Don't write to stdout!
205
226
            self.delta.show(sys.stdout)
206
227
 
207
228
            self._remove_deleted()
220
241
            self.branch.unlock()
221
242
 
222
243
 
 
244
 
 
245
    def _remove_deletions(self):
 
246
        """Remove deleted files from the working inventory."""
 
247
        pass
 
248
 
 
249
 
 
250
 
223
251
    def _record_inventory(self):
224
252
        """Store the inventory for the new revision."""
225
253
        inv_tmp = StringIO()