14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
from os.path import dirname
19
import bzrlib.errors as errors
20
from bzrlib.inventory import InventoryEntry
17
21
from bzrlib.trace import mutter, note, warning
18
22
from bzrlib.errors import NotBranchError
19
23
from bzrlib.branch import Branch
20
24
from bzrlib.osutils import quotefn
22
26
def glob_expand_for_win32(file_list):
25
30
expanded_file_list = []
26
31
for possible_glob in file_list:
27
32
glob_files = glob.glob(possible_glob)
63
68
Returns the number of files added.
65
70
file_list = _prepare_file_list(file_list)
66
b = Branch(file_list[0], find_root=True)
71
b = Branch.open_containing(file_list[0])[0]
67
72
return smart_add_branch(b, file_list, recurse, reporter)
78
83
Returns the number of files added.
82
from bzrlib.osutils import quotefn
83
86
from bzrlib.errors import BadFileKindError, ForbiddenFileError
84
87
import bzrlib.branch
87
89
assert isinstance(recurse, bool)
89
91
file_list = _prepare_file_list(file_list)
90
92
user_list = file_list[:]
91
inv = branch.read_working_inventory()
92
93
tree = branch.working_tree()
94
inv = tree.read_working_inventory()
95
97
for f in file_list:
96
rf = branch.relpath(f)
97
99
af = branch.abspath(rf)
99
101
kind = bzrlib.osutils.file_kind(af)
101
if kind != 'file' and kind != 'directory':
103
if not InventoryEntry.versionable_kind(kind):
102
104
if f in user_list:
103
105
raise BadFileKindError("cannot add %s of type %s" % (f, kind))
105
107
warning("skipping %s (can't add file of kind '%s')", f, kind)
108
mutter("smart add of %r, abs=%r" % (f, af))
110
mutter("smart add of %r, abs=%r", f, af)
110
112
if bzrlib.branch.is_control_file(af):
111
113
raise ForbiddenFileError('cannot add control file %s' % f)
125
129
mutter("branch root doesn't need to be added")
128
mutter("%r is already versioned" % f)
132
mutter("%r is already versioned", f)
130
mutter("%r is a bzr tree" %f)
134
mutter("%r is a bzr tree", f)
132
entry = inv.add_path(rf, kind=kind)
133
mutter("added %r kind %r file_id={%s}" % (rf, kind, entry.file_id))
135
reporter(rf, kind, entry)
136
count += __add_one(branch, inv, rf, kind, reporter)
137
138
if kind == 'directory' and recurse and not sub_tree:
138
139
for subf in os.listdir(af):
139
140
subp = os.path.join(rf, subf)
140
141
if subf == bzrlib.BZRDIR:
141
mutter("skip control directory %r" % subp)
142
mutter("skip control directory %r", subp)
142
143
elif tree.is_ignored(subp):
143
mutter("skip ignored sub-file %r" % subp)
144
mutter("skip ignored sub-file %r", subp)
145
mutter("queue to add sub-file %r" % subp)
146
mutter("queue to add sub-file %r", subp)
146
147
file_list.append(branch.abspath(subp))
149
150
mutter('added %d entries', count)
152
branch._write_inventory(inv)
153
branch.working_tree()._write_inventory(inv)
157
def __add_one(branch, inv, path, kind, reporter):
158
"""Add a file or directory, automatically add unversioned parents."""
160
# Nothing to do if path is already versioned.
161
# This is safe from infinite recursion because the branch root is
163
if inv.path2id(path) != None:
167
count = __add_one(branch, inv, dirname(path), 'directory', reporter)
169
entry = inv.add_path(path, kind=kind)
170
mutter("added %r kind %r file_id={%s}", path, kind, entry.file_id)
171
reporter(path, kind, entry)