1
# Copyright (C) 2005, 2006 Canonical Ltd
1
# Copyright (C) 2005-2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
17
"""Helper functions for adding files to working trees."""
24
import bzrlib.errors as errors
26
from bzrlib.symbol_versioning import *
27
from bzrlib.workingtree import WorkingTree
30
26
class AddAction(object):
36
32
:param to_file: The stream to write into. This is expected to take
37
33
Unicode paths. If not supplied, it will default to ``sys.stdout``.
38
:param should_print: If False, printing will be supressed.
34
:param should_print: If False, printing will be suppressed.
40
36
self._to_file = to_file
41
37
if to_file is None:
44
40
if should_print is not None:
45
41
self.should_print = should_print
47
def __call__(self, inv, parent_ie, path, kind, _quote=bzrlib.osutils.quotefn):
43
def __call__(self, inv, parent_ie, path, kind, _quote=osutils.quotefn):
48
44
"""Add path to inventory.
50
46
The default action does nothing.
73
69
file_id, base_path = self._get_base_file_id(path, parent_ie)
74
70
if file_id is not None:
75
71
if self.should_print:
76
self._to_file.write('added %s w/ file id from %s\n'
77
% (path.raw_path, base_path))
72
self._to_file.write('adding %s w/ file id from %s\n'
79
75
# we aren't doing anything special, so let the default
90
86
Else, we look for an entry in the base tree with the same path.
93
if (parent_ie.file_id in self.base_tree):
89
if self.base_tree.has_id(parent_ie.file_id):
94
90
base_parent_ie = self.base_tree.inventory[parent_ie.file_id]
95
base_child_ie = base_parent_ie.children.get(path.base_path)
91
base_child_ie = base_parent_ie.children.get(
92
osutils.basename(path))
96
93
if base_child_ie is not None:
97
94
return (base_child_ie.file_id,
98
95
self.base_tree.id2path(base_child_ie.file_id))
99
full_base_path = bzrlib.osutils.pathjoin(self.base_path, path.raw_path)
96
full_base_path = osutils.pathjoin(self.base_path, path)
100
97
# This may return None, but it is our last attempt
101
98
return self.base_tree.path2id(full_base_path), full_base_path
104
# TODO: jam 20050105 These could be used for compatibility
105
# however, they bind against the current stdout, not the
106
# one which exists at the time they are called, so they
107
# don't work for the test suite.
109
add_action_add = AddAction()
110
add_action_null = add_action_add
111
add_action_add_and_print = AddAction(should_print=True)
112
add_action_print = add_action_add_and_print