~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 12:53:07 UTC
  • mfrom: (1442.1.70)
  • Revision ID: robertc@robertcollins.net-20051018125307-730e47c1a034cb6f
Merge in various improvements to pull, testing and configuration.

* 'bzr pull' now accepts '--clobber' which will discard local changes
  and make this branch identical to the source branch. (Robert Collins)

* There is a new method for TestCaseInTempDir, assertFileEqual, which
  will check that a given content is equal to the content of the named
  file. (Robert Collins)

* 'pull' has been factored out of the command as WorkingTree.pull().
  A new option to WorkingTree.pull has been added, clobber, which will
  ignore diverged history and pull anyway.
  (Robert Collins)

* config.Config has a 'get_user_option' call that accepts an option name.
  This will be looked up in branches.conf and bazaar.conf as normal.
  It is intended that this be used by plugins to support options -
  options of built in programs should have specific methods on the config.
  (Robert Collins)

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
from bzrlib.branch import Branch, needs_read_lock, needs_write_lock, quotefn
28
28
import bzrlib.tree
29
29
from bzrlib.osutils import appendpath, file_kind, isdir, splitpath, relpath
30
 
from bzrlib.errors import BzrCheckError
 
30
from bzrlib.errors import BzrCheckError, DivergedBranches
31
31
from bzrlib.trace import mutter
32
32
 
33
33
class TreeEntry(object):
305
305
                conflicted.add(stem)
306
306
                yield stem
307
307
 
 
308
    @needs_write_lock
 
309
    def pull(self, source, remember=False, clobber=False):
 
310
        from bzrlib.merge import merge
 
311
        source.lock_read()
 
312
        try:
 
313
            old_revno = self.branch.revno()
 
314
            old_revision_history = self.branch.revision_history()
 
315
            try:
 
316
                self.branch.update_revisions(source)
 
317
            except DivergedBranches:
 
318
                if not clobber:
 
319
                    raise
 
320
                self.branch.set_revision_history(source.revision_history())
 
321
            new_revision_history = self.branch.revision_history()
 
322
            if new_revision_history != old_revision_history:
 
323
                merge((self.basedir, -1), (self.basedir, old_revno), check_clean=False)
 
324
            if self.branch.get_parent() is None or remember:
 
325
                self.branch.set_parent(source.base)
 
326
        finally:
 
327
            source.unlock()
 
328
 
308
329
    def extras(self):
309
330
        """Yield all unknown files in this WorkingTree.
310
331