~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Martin Pool
  • Date: 2005-05-09 08:27:49 UTC
  • Revision ID: mbp@sourcefrog.net-20050509082749-22b1a6f4af329f7b
- bzr log and bzr root now accept an http URL
- new RemoteBranch.relpath()
- new find_branch factory method

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
import bzrlib
25
25
from inventory import Inventory
26
26
from trace import mutter, note
27
 
from tree import Tree, EmptyTree, RevisionTree
 
27
from tree import Tree, EmptyTree, RevisionTree, WorkingTree
28
28
from inventory import InventoryEntry, Inventory
29
29
from osutils import isdir, quotefn, isfile, uuid, sha_file, username, \
30
30
     format_date, compact_date, pumpfile, user_email, rand_bytes, splitpath, \
41
41
 
42
42
 
43
43
def find_branch(f, **args):
44
 
    if f and (f.startswith('http://') or f.startswith('https://')):
 
44
    if f.startswith('http://') or f.startswith('https://'):
45
45
        import remotebranch 
46
46
        return remotebranch.RemoteBranch(f, **args)
47
47
    else:
63
63
        f = os.path.realpath(f)
64
64
    else:
65
65
        f = os.path.abspath(f)
66
 
    if not os.path.exists(f):
67
 
        raise BzrError('%r does not exist' % f)
68
 
        
69
66
 
70
67
    orig_f = f
71
68
 
213
210
        and binary.  binary files are untranslated byte streams.  Text
214
211
        control files are stored with Unix newlines and in UTF-8, even
215
212
        if the platform or locale defaults are different.
216
 
 
217
 
        Controlfiles should almost never be opened in write mode but
218
 
        rather should be atomically copied and replaced using atomicfile.
219
213
        """
220
214
 
221
215
        fn = self.controlfilename(file_or_path)
785
779
 
786
780
    def working_tree(self):
787
781
        """Return a `Tree` for the working copy."""
788
 
        from workingtree import WorkingTree
789
782
        return WorkingTree(self.base, self.read_working_inventory())
790
783
 
791
784
 
923
916
 
924
917
 
925
918
 
 
919
    def show_status(self, show_all=False, file_list=None):
 
920
        """Display single-line status for non-ignored working files.
 
921
 
 
922
        The list is show sorted in order by file name.
 
923
 
 
924
        >>> b = ScratchBranch(files=['foo', 'foo~'])
 
925
        >>> b.show_status()
 
926
        ?       foo
 
927
        >>> b.add('foo')
 
928
        >>> b.show_status()
 
929
        A       foo
 
930
        >>> b.commit("add foo")
 
931
        >>> b.show_status()
 
932
        >>> os.unlink(b.abspath('foo'))
 
933
        >>> b.show_status()
 
934
        D       foo
 
935
        """
 
936
        self._need_readlock()
 
937
 
 
938
        # We have to build everything into a list first so that it can
 
939
        # sorted by name, incorporating all the different sources.
 
940
 
 
941
        # FIXME: Rather than getting things in random order and then sorting,
 
942
        # just step through in order.
 
943
 
 
944
        # Interesting case: the old ID for a file has been removed,
 
945
        # but a new file has been created under that name.
 
946
 
 
947
        old = self.basis_tree()
 
948
        new = self.working_tree()
 
949
 
 
950
        items = diff_trees(old, new)
 
951
        # We want to filter out only if any file was provided in the file_list.
 
952
        if isinstance(file_list, list) and len(file_list):
 
953
            items = [item for item in items if item[3] in file_list]
 
954
 
 
955
        for fs, fid, oldname, newname, kind in items:
 
956
            if fs == 'R':
 
957
                show_status(fs, kind,
 
958
                            oldname + ' => ' + newname)
 
959
            elif fs == 'A' or fs == 'M':
 
960
                show_status(fs, kind, newname)
 
961
            elif fs == 'D':
 
962
                show_status(fs, kind, oldname)
 
963
            elif fs == '.':
 
964
                if show_all:
 
965
                    show_status(fs, kind, newname)
 
966
            elif fs == 'I':
 
967
                if show_all:
 
968
                    show_status(fs, kind, newname)
 
969
            elif fs == '?':
 
970
                show_status(fs, kind, newname)
 
971
            else:
 
972
                bailout("weird file state %r" % ((fs, fid),))
 
973
                
 
974
 
926
975
 
927
976
class ScratchBranch(Branch):
928
977
    """Special test class: a branch that cleans up after itself.