~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/add.py

  • Committer: Alexander Belchenko
  • Date: 2012-03-29 08:34:13 UTC
  • mto: (6015.44.14 2.4)
  • mto: This revision was merged to the branch mainline in revision 6513.
  • Revision ID: bialix@ukr.net-20120329083413-d4bqqdtfn2yrxp4f
change st_dev, st_ino, st_uid, st_gid from int members to properties.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Helper functions for adding files to working trees."""
18
18
 
19
 
from __future__ import absolute_import
20
 
 
21
19
import sys
22
 
import os
23
20
 
24
21
from bzrlib import (
25
22
    osutils,
26
 
    ui, 
27
23
    )
28
 
from bzrlib.i18n import gettext
 
24
 
29
25
 
30
26
class AddAction(object):
31
27
    """A class which defines what action to take when adding a file."""
57
53
            self._to_file.write('adding %s\n' % _quote(path))
58
54
        return None
59
55
 
60
 
    def skip_file(self, tree, path, kind, stat_value = None):
61
 
        """Test whether the given file should be skipped or not.
62
 
        
63
 
        The default action never skips. Note this is only called during
64
 
        recursive adds
65
 
        
66
 
        :param tree: The tree we are working in
67
 
        :param path: The path being added
68
 
        :param kind: The kind of object being added.
69
 
        :param stat: Stat result for this file, if available already
70
 
        :return bool. True if the file should be skipped (not added)
71
 
        """
72
 
        return False
73
 
 
74
 
 
75
 
class AddWithSkipLargeAction(AddAction):
76
 
    """A class that can decide to skip a file if it's considered too large"""
77
 
 
78
 
    _maxSize = None
79
 
 
80
 
    def skip_file(self, tree, path, kind, stat_value = None):
81
 
        if kind != 'file':
82
 
            return False
83
 
        opt_name = 'add.maximum_file_size'
84
 
        if self._maxSize is None:
85
 
            config = tree.get_config_stack()
86
 
            self._maxSize = config.get(opt_name)
87
 
        if stat_value is None:
88
 
            file_size = os.path.getsize(path);
89
 
        else:
90
 
            file_size = stat_value.st_size;
91
 
        if self._maxSize > 0 and file_size > self._maxSize:
92
 
            ui.ui_factory.show_warning(gettext(
93
 
                "skipping {0} (larger than {1} of {2} bytes)").format(
94
 
                path, opt_name,  self._maxSize))
95
 
            return True
96
 
        return False
97
 
 
98
56
 
99
57
class AddFromBaseAction(AddAction):
100
58
    """This class will try to extract file ids from another tree."""
127
85
        we look for a file with the same name in that directory.
128
86
        Else, we look for an entry in the base tree with the same path.
129
87
        """
 
88
 
130
89
        if self.base_tree.has_id(parent_ie.file_id):
131
 
            base_path = osutils.pathjoin(
132
 
                self.base_tree.id2path(parent_ie.file_id),
 
90
            base_parent_ie = self.base_tree.inventory[parent_ie.file_id]
 
91
            base_child_ie = base_parent_ie.children.get(
133
92
                osutils.basename(path))
134
 
            base_id = self.base_tree.path2id(base_path)
135
 
            if base_id is not None:
136
 
                return (base_id, base_path)
 
93
            if base_child_ie is not None:
 
94
                return (base_child_ie.file_id,
 
95
                        self.base_tree.id2path(base_child_ie.file_id))
137
96
        full_base_path = osutils.pathjoin(self.base_path, path)
138
97
        # This may return None, but it is our last attempt
139
98
        return self.base_tree.path2id(full_base_path), full_base_path