~abentley/bzrtools/bzrtools.dev

« back to all changes in this revision

Viewing changes to upstream_import.py

  • Committer: Aaron Bentley
  • Date: 2006-12-28 16:53:29 UTC
  • Revision ID: aaron.bentley@utoronto.ca-20061228165329-f4jb007cgegcdoih
upstream imports honour the execute bit

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
import tarfile
8
8
import zipfile
9
9
 
 
10
from bzrlib import generate_ids
10
11
from bzrlib.bzrdir import BzrDir
11
12
from bzrlib.errors import NoSuchFile, BzrCommandError, NotBranchError
12
 
from bzrlib.osutils import pathjoin, isdir, file_iterator
 
13
from bzrlib.osutils import pathjoin, isdir, file_iterator, basename
13
14
from bzrlib.trace import warning
14
15
from bzrlib.transform import TreeTransform, resolve_conflicts, cook_conflicts
15
16
from bzrlib.workingtree import WorkingTree
44
45
        self.type = None
45
46
        self.name = info.filename
46
47
        self.zipfile = zipfile
 
48
        self.mode = 0666
47
49
 
48
50
    def isdir(self):
49
51
        # Really? Eeeew!
140
142
        added.add(relative_path.rstrip('/'))
141
143
        path = tree.abspath(relative_path)
142
144
        if member.name in seen:
 
145
            if tt.final_kind(trans_id) == 'file':
 
146
                tt.set_executability(None, trans_id)
143
147
            tt.cancel_creation(trans_id)
144
148
        seen.add(member.name)
145
149
        if member.isreg():
146
150
            tt.create_file(file_iterator(archive_file.extractfile(member)), 
147
151
                           trans_id)
 
152
            executable = (member.mode & 0111) != 0
 
153
            tt.set_executability(executable, trans_id)
148
154
        elif member.isdir():
149
155
            do_directory(tt, trans_id, tree, relative_path, path)
150
156
        elif member.issym():
151
157
            tt.create_symlink(member.linkname, trans_id)
 
158
        else:
 
159
            continue
 
160
        if tt.tree_file_id(trans_id) is None:
 
161
            name = basename(member.name.rstrip('/'))
 
162
            file_id = generate_ids.gen_file_id(name)
 
163
            tt.version_file(file_id, trans_id)
152
164
 
153
165
    for relative_path in implied_parents.difference(added):
154
166
        if relative_path == "":
156
168
        trans_id = tt.trans_id_tree_path(relative_path)
157
169
        path = tree.abspath(relative_path)
158
170
        do_directory(tt, trans_id, tree, relative_path, path)
 
171
        if tt.tree_file_id(trans_id) is None:
 
172
            tt.version_file(trans_id, trans_id)
159
173
        added.add(relative_path)
160
174
 
 
175
    for path in removed.difference(added):
 
176
        tt.unversion_file(tt.trans_id_tree_path(path))
 
177
 
161
178
    for conflict in cook_conflicts(resolve_conflicts(tt), tt):
162
179
        warning(conflict)
163
180
    tt.apply()
164
 
    update_ids(tree, added, removed)
165
 
 
166
 
 
167
 
def update_ids(tree, added, removed):
168
 
    """Make sure that all present files files have file_ids.
169
 
    """
170
 
    # XXX detect renames
171
 
    new = added.difference(removed)
172
 
    deleted = removed.difference(added)
173
 
    tree.add(sorted(new))
174
 
    tree.remove(sorted(deleted, reverse=True))
175
181
 
176
182
 
177
183
def do_import(source, tree_directory=None):