~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/commands.py

  • Committer: Martin Pool
  • Date: 2005-05-12 02:18:48 UTC
  • Revision ID: mbp@sourcefrog.net-20050512021848-d1a727373aee2c85
- WorkingTree loads statcache in constructor and holds
  it permanently

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
from bzrlib.revision import Revision
28
28
from bzrlib import Branch, Inventory, InventoryEntry, ScratchBranch, BZRDIR, \
29
29
     format_date
30
 
from bzrlib import merge
31
30
 
32
31
 
33
32
def _squish_command_name(cmd):
677
676
        b = Branch('.')
678
677
        ifn = b.abspath('.bzrignore')
679
678
 
 
679
        # FIXME: probably doesn't handle non-ascii patterns
 
680
 
680
681
        if os.path.exists(ifn):
681
 
            f = open(ifn, 'rt')
682
 
            try:
683
 
                igns = f.read().decode('utf-8')
684
 
            finally:
685
 
                f.close()
 
682
            f = b.controlfile(ifn, 'rt')
 
683
            igns = f.read()
 
684
            f.close()
686
685
        else:
687
686
            igns = ''
688
687
 
690
689
            igns += '\n'
691
690
        igns += name_pattern + '\n'
692
691
 
693
 
        try:
694
 
            f = AtomicFile(ifn, 'wt')
695
 
            f.write(igns.encode('utf-8'))
696
 
            f.commit()
697
 
        finally:
698
 
            f.close()
 
692
        f = AtomicFile(ifn, 'wt')
 
693
        f.write(igns)
 
694
        f.commit()
699
695
 
700
696
        inv = b.working_tree().inventory
701
697
        if inv.path2id('.bzrignore'):
778
774
class cmd_commit(Command):
779
775
    """Commit changes into a new revision.
780
776
 
781
 
    If selected files are specified, only changes to those files are
782
 
    committed.  If a directory is specified then its contents are also
783
 
    committed.
784
 
 
785
 
    A selected-file commit may fail in some cases where the committed
786
 
    tree would be invalid, such as trying to commit a file in a
787
 
    newly-added directory that is not itself committed.
 
777
    TODO: Commit only selected files.
788
778
 
789
779
    TODO: Run hooks on tree to-be-committed, and after commit.
790
780
 
791
781
    TODO: Strict commit that fails if there are unknown or deleted files.
792
782
    """
793
 
    takes_args = ['selected*']
794
783
    takes_options = ['message', 'file', 'verbose']
795
784
    aliases = ['ci', 'checkin']
796
785
 
797
 
    def run(self, message=None, file=None, verbose=True, selected_list=None):
 
786
    def run(self, message=None, file=None, verbose=False):
798
787
        from bzrlib.commit import commit
799
788
 
800
789
        ## Warning: shadows builtin file()
809
798
            message = codecs.open(file, 'rt', bzrlib.user_encoding).read()
810
799
 
811
800
        b = Branch('.')
812
 
        commit(b, message, verbose=verbose, specific_files=selected_list)
 
801
        commit(b, message, verbose=verbose)
813
802
 
814
803
 
815
804
class cmd_check(Command):
821
810
    takes_args = ['dir?']
822
811
    def run(self, dir='.'):
823
812
        import bzrlib.check
824
 
        bzrlib.check.check(Branch(dir))
 
813
        bzrlib.check.check(Branch(dir, find_root=False))
825
814
 
826
815
 
827
816
 
846
835
        bzrlib.trace.verbose = False
847
836
 
848
837
        for m in bzrlib.store, bzrlib.inventory, bzrlib.branch, bzrlib.osutils, \
849
 
            bzrlib.tree, bzrlib.commands, bzrlib.add:
 
838
            bzrlib.tree, bzrlib.tests, bzrlib.commands, bzrlib.add:
850
839
            mf, mt = doctest.testmod(m)
851
840
            failures += mf
852
841
            tests += mt
859
848
        print '%-40s %3d tests' % ('total', tests),
860
849
        if failures:
861
850
            print '%3d FAILED!' % failures
862
 
            return 1
863
851
        else:
864
852
            print
865
 
            return 0
866
853
 
867
854
 
868
855
 
887
874
    def run(self):
888
875
        print "it sure does!"
889
876
 
890
 
def parse_spec(spec):
891
 
    if '/@' in spec:
892
 
        parsed = spec.split('/@')
893
 
        assert len(parsed) == 2
894
 
        if parsed[1] == "":
895
 
            parsed[1] = -1
896
 
        else:
897
 
            parsed[1] = int(parsed[1])
898
 
            assert parsed[1] >=0
899
 
    else:
900
 
        parsed = [spec, None]
901
 
    return parsed
902
 
 
903
 
class cmd_merge(Command):
904
 
    """Perform a three-way merge of trees."""
905
 
    takes_args = ['other_spec', 'base_spec']
906
 
 
907
 
    def run(self, other_spec, base_spec):
908
 
        merge.merge(parse_spec(other_spec), parse_spec(base_spec))
909
877
 
910
878
class cmd_assert_fail(Command):
911
879
    """Test reporting of assertion failures"""
1148
1116
            os.close(pffileno)
1149
1117
            os.remove(pfname)
1150
1118
    else:
1151
 
        return cmd_class(cmdopts, cmdargs).status 
 
1119
        cmdobj = cmd_class(cmdopts, cmdargs).status 
1152
1120
 
1153
1121
 
1154
1122
def _report_exception(summary, quiet=False):