~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transform.py

Updated docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
        self.__done = False
38
38
 
39
39
    def finalize(self):
 
40
        """Release the working tree lock, if held."""
40
41
        if self._tree is None:
41
42
            return
42
43
        self._tree.unlock()
151
152
        return new_paths
152
153
 
153
154
    def tree_kind(self, trans_id):
 
155
        """Determine the file kind in the working tree.
 
156
 
 
157
        Raises NoSuchFile if the file does not exist
 
158
        """
154
159
        path = self._tree_id_paths.get(trans_id)
155
160
        if path is None:
156
161
            raise NoSuchFile(None)
210
215
            return self.get_tree_parent(trans_id)
211
216
 
212
217
    def final_name(self, trans_id):
 
218
        """Determine the final filename, after all changes are applied."""
213
219
        try:
214
220
            return self._new_name[trans_id]
215
221
        except KeyError:
216
222
            return os.path.basename(self._tree_id_paths[trans_id])
217
223
 
218
224
    def _by_parent(self):
 
225
        """Return a map of parent: children for known parents.
 
226
        
 
227
        Only new paths and parents of tree files with assigned ids are used.
 
228
        """
219
229
        by_parent = {}
220
230
        items = list(self._new_parent.iteritems())
221
231
        items.extend((t, self.final_parent(t)) for t in self._tree_id_paths)
226
236
        return by_parent
227
237
 
228
238
    def find_conflicts(self):
229
 
        """Find any violations of inventory of filesystem invariants"""
 
239
        """Find any violations of inventory or filesystem invariants"""
230
240
        if self.__done is True:
231
241
            raise ReusingTransform()
232
242
        conflicts = []
243
253
        return conflicts
244
254
 
245
255
    def _add_tree_children(self):
 
256
        """\
 
257
        Add all the children of all active parents to the known paths.
 
258
 
 
259
        Active parents are those which gain children, and those which are
 
260
        removed.  This is a necessary first step in detecting conflicts.
 
261
        """
246
262
        parents = self._by_parent().keys()
247
263
        parents.extend([t for t in self._removed_contents if 
248
264
                        self.tree_kind(t) == 'directory'])
311
327
        return conflicts
312
328
 
313
329
    def _executability_conflicts(self):
 
330
        """Check for bad executability changes.
 
331
        
 
332
        Only versioned files may have their executability set, because
 
333
        1. only versioned entries can have executability under windows
 
334
        2. only files can be executable.  (The execute bit on a directory
 
335
           does not indicate searchability)
 
336
        """
314
337
        conflicts = []
315
338
        for trans_id in self._new_executability:
316
339
            if self.final_file_id(trans_id) is None:
452
475
            # requires files and inventory entries to be in place
453
476
            if trans_id in self._new_executability:
454
477
                self._set_executability(path, inv, trans_id)
 
478
 
455
479
    def _set_executability(self, path, inv, trans_id):
 
480
        """Set the executability of versioned files """
456
481
        file_id = inv.path2id(path)
457
482
        new_executability = self._new_executability[trans_id]
458
483
        inv[file_id].executable = new_executability
523
548
        return trans_id
524
549
 
525
550
def joinpath(parent, child):
 
551
    """Join tree-relative paths, handling the tree root specially"""
526
552
    if parent is None or parent == "":
527
553
        return child
528
554
    else:
557
583
        return self._known_paths[trans_id]
558
584
 
559
585
def topology_sorted_ids(tree):
 
586
    """Determine the topological order of the ids in a tree"""
560
587
    file_ids = list(tree)
561
588
    file_ids.sort(key=tree.id2path)
562
589
    return file_ids
563
590
 
564
591
def build_tree(branch, tree):
 
592
    """Create working tree for a branch, using a Transaction."""
565
593
    file_trans_id = {}
566
594
    wt = branch.working_tree()
567
595
    tt = TreeTransform(wt)