~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

  • Committer: Robert Collins
  • Date: 2005-10-18 13:11:57 UTC
  • mfrom: (1185.16.72) (0.2.1)
  • Revision ID: robertc@robertcollins.net-20051018131157-76a9970aa78e927e
Merged Martin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
16
16
 
17
 
# TODO: Don't allow WorkingTrees to be constructed for remote branches.
 
17
"""WorkingTree object and friends.
 
18
 
 
19
A WorkingTree represents the editable working copy of a branch.
 
20
Operations which represent the WorkingTree are also done here, 
 
21
such as renaming or adding files.  The WorkingTree has an inventory 
 
22
which is updated by these operations.  A commit produces a 
 
23
new revision based on the workingtree and its inventory.
 
24
 
 
25
At the moment every WorkingTree has its own branch.  Remote
 
26
WorkingTrees aren't supported.
 
27
 
 
28
To get a WorkingTree, call Branch.working_tree():
 
29
"""
 
30
 
 
31
 
 
32
# TODO: Don't allow WorkingTrees to be constructed for remote branches if 
 
33
# they don't work.
18
34
 
19
35
# FIXME: I don't know if writing out the cache from the destructor is really a
20
 
# good idea, because destructors are considered poor taste in Python, and
21
 
# it's not predictable when it will be written out.
 
36
# good idea, because destructors are considered poor taste in Python, and it's
 
37
# not predictable when it will be written out.
 
38
 
 
39
# TODO: Give the workingtree sole responsibility for the working inventory;
 
40
# remove the variable and references to it from the branch.  This may require
 
41
# updating the commit code so as to update the inventory within the working
 
42
# copy, and making sure there's only one WorkingTree for any directory on disk.
 
43
# At the momenthey may alias the inventory and have old copies of it in memory.
22
44
 
23
45
import os
24
46
import stat
27
49
from bzrlib.branch import Branch, needs_read_lock, needs_write_lock, quotefn
28
50
import bzrlib.tree
29
51
from bzrlib.osutils import appendpath, file_kind, isdir, splitpath, relpath
30
 
from bzrlib.errors import BzrCheckError, DivergedBranches
 
52
from bzrlib.errors import BzrCheckError, DivergedBranches, NotVersionedError
31
53
from bzrlib.trace import mutter
32
54
 
33
55
class TreeEntry(object):
105
127
        """
106
128
        from bzrlib.hashcache import HashCache
107
129
        from bzrlib.trace import note, mutter
108
 
 
 
130
        assert isinstance(basedir, basestring), \
 
131
            "base directory %r is not a string" % basedir
109
132
        if branch is None:
110
133
            branch = Branch.open(basedir)
 
134
        assert isinstance(branch, Branch), \
 
135
            "branch %r is not a Branch" % branch
111
136
        self._inventory = branch.inventory
112
137
        self.path2id = self._inventory.path2id
113
138
        self.branch = branch
454
479
        for f in files:
455
480
            fid = inv.path2id(f)
456
481
            if not fid:
457
 
                raise BzrError("cannot remove unversioned file %s" % quotefn(f))
 
482
                # TODO: Perhaps make this just a warning, and continue?
 
483
                # This tends to happen when 
 
484
                raise NotVersionedError(path=f)
458
485
            mutter("remove inventory entry %s {%s}" % (quotefn(f), fid))
459
486
            if verbose:
460
487
                # having remove it, it must be either ignored or unknown