~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/builtins.py

  • Committer: Aaron Bentley
  • Date: 2008-07-14 16:16:48 UTC
  • mfrom: (3537 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3538.
  • Revision ID: aaron@aaronbentley.com-20080714161648-hh0bz2f22cjdftwe
Merge with bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
134
134
    
135
135
    Note that --short or -S gives status flags for each item, similar
136
136
    to Subversion's status command. To get output similar to svn -q,
137
 
    use bzr -SV.
 
137
    use bzr status -SV.
138
138
 
139
139
    If no arguments are specified, the status of the entire working
140
140
    directory is shown.  Otherwise, only the status of the specified
1855
1855
class cmd_ignore(Command):
1856
1856
    """Ignore specified files or patterns.
1857
1857
 
 
1858
    See ``bzr help patterns`` for details on the syntax of patterns.
 
1859
 
1858
1860
    To remove patterns from the ignore list, edit the .bzrignore file.
1859
 
 
1860
 
    Trailing slashes on patterns are ignored. 
1861
 
    If the pattern contains a slash or is a regular expression, it is compared 
1862
 
    to the whole path from the branch root.  Otherwise, it is compared to only
1863
 
    the last component of the path.  To match a file only in the root 
1864
 
    directory, prepend './'.
1865
 
 
1866
 
    Ignore patterns specifying absolute paths are not allowed.
1867
 
 
1868
 
    Ignore patterns may include globbing wildcards such as::
1869
 
 
1870
 
      ? - Matches any single character except '/'
1871
 
      * - Matches 0 or more characters except '/'
1872
 
      /**/ - Matches 0 or more directories in a path
1873
 
      [a-z] - Matches a single character from within a group of characters
1874
 
 
1875
 
    Ignore patterns may also be Python regular expressions.  
1876
 
    Regular expression ignore patterns are identified by a 'RE:' prefix 
1877
 
    followed by the regular expression.  Regular expression ignore patterns
1878
 
    may not include named or numbered groups.
 
1861
    After adding, editing or deleting that file either indirectly by
 
1862
    using this command or directly by using an editor, be sure to commit
 
1863
    it.
1879
1864
 
1880
1865
    Note: ignore patterns containing shell wildcards must be quoted from 
1881
1866
    the shell on Unix.
1902
1887
            bzr ignore "RE:(?!debian/).*"
1903
1888
    """
1904
1889
 
1905
 
    _see_also = ['status', 'ignored']
 
1890
    _see_also = ['status', 'ignored', 'patterns']
1906
1891
    takes_args = ['name_pattern*']
1907
1892
    takes_options = [
1908
1893
        Option('old-default-rules',
1910
1895
        ]
1911
1896
    
1912
1897
    def run(self, name_pattern_list=None, old_default_rules=None):
1913
 
        from bzrlib.atomicfile import AtomicFile
 
1898
        from bzrlib import ignores
1914
1899
        if old_default_rules is not None:
1915
1900
            # dump the rules and exit
1916
1901
            for pattern in ignores.OLD_DEFAULTS:
1927
1912
                raise errors.BzrCommandError(
1928
1913
                    "NAME_PATTERN should not be an absolute path")
1929
1914
        tree, relpath = WorkingTree.open_containing(u'.')
1930
 
        ifn = tree.abspath('.bzrignore')
1931
 
        if os.path.exists(ifn):
1932
 
            f = open(ifn, 'rt')
1933
 
            try:
1934
 
                igns = f.read().decode('utf-8')
1935
 
            finally:
1936
 
                f.close()
1937
 
        else:
1938
 
            igns = ''
1939
 
 
1940
 
        # TODO: If the file already uses crlf-style termination, maybe
1941
 
        # we should use that for the newly added lines?
1942
 
 
1943
 
        if igns and igns[-1] != '\n':
1944
 
            igns += '\n'
1945
 
        for name_pattern in name_pattern_list:
1946
 
            igns += name_pattern + '\n'
1947
 
 
1948
 
        f = AtomicFile(ifn, 'wb')
1949
 
        try:
1950
 
            f.write(igns.encode('utf-8'))
1951
 
            f.commit()
1952
 
        finally:
1953
 
            f.close()
1954
 
 
1955
 
        if not tree.path2id('.bzrignore'):
1956
 
            tree.add(['.bzrignore'])
1957
 
 
 
1915
        ignores.tree_ignores_add_patterns(tree, name_pattern_list)
1958
1916
        ignored = globbing.Globster(name_pattern_list)
1959
1917
        matches = []
1960
1918
        tree.lock_read()
2119
2077
                raise errors.BzrCommandError("%r is not present in revision %s"
2120
2078
                                                % (filename, revision_id))
2121
2079
            else:
2122
 
                rev_tree.print_file(old_file_id)
 
2080
                content = rev_tree.get_file_text(old_file_id)
2123
2081
        elif cur_file_id is not None:
2124
 
            rev_tree.print_file(cur_file_id)
 
2082
            content = rev_tree.get_file_text(cur_file_id)
2125
2083
        elif old_file_id is not None:
2126
 
            rev_tree.print_file(old_file_id)
 
2084
            content = rev_tree.get_file_text(old_file_id)
2127
2085
        else:
2128
2086
            raise errors.BzrCommandError("%r is not present in revision %s" %
2129
2087
                                         (filename, revision_id))
 
2088
        self.outf.write(content)
2130
2089
 
2131
2090
 
2132
2091
class cmd_local_time_offset(Command):
2318
2277
 
2319
2278
 
2320
2279
class cmd_check(Command):
2321
 
    """Validate consistency of branch history.
2322
 
 
2323
 
    This command checks various invariants about the branch storage to
2324
 
    detect data corruption or bzr bugs.
2325
 
 
2326
 
    Output fields:
 
2280
    """Validate working tree structure, branch consistency and repository
 
2281
    history.
 
2282
 
 
2283
    This command checks various invariants about branch and repository storage
 
2284
    to detect data corruption or bzr bugs.
 
2285
 
 
2286
    The working tree and branch checks will only give output if a problem is
 
2287
    detected. The output fields of the repository check are:
2327
2288
 
2328
2289
        revisions: This is just the number of revisions checked.  It doesn't
2329
2290
            indicate a problem.
2341
2302
    """
2342
2303
 
2343
2304
    _see_also = ['reconcile']
2344
 
    takes_args = ['branch?']
 
2305
    takes_args = ['path?']
2345
2306
    takes_options = ['verbose']
2346
2307
 
2347
 
    def run(self, branch=None, verbose=False):
2348
 
        from bzrlib.check import check
2349
 
        if branch is None:
2350
 
            branch_obj = Branch.open_containing('.')[0]
2351
 
        else:
2352
 
            branch_obj = Branch.open(branch)
2353
 
        check(branch_obj, verbose)
2354
 
        # bit hacky, check the tree parent is accurate
2355
 
        try:
2356
 
            if branch is None:
2357
 
                tree = WorkingTree.open_containing('.')[0]
2358
 
            else:
2359
 
                tree = WorkingTree.open(branch)
2360
 
        except (errors.NoWorkingTree, errors.NotLocalUrl):
2361
 
            pass
2362
 
        else:
2363
 
            # This is a primitive 'check' for tree state. Currently this is not
2364
 
            # integrated into the main check logic as yet.
2365
 
            tree.lock_read()
2366
 
            try:
2367
 
                tree_basis = tree.basis_tree()
2368
 
                tree_basis.lock_read()
2369
 
                try:
2370
 
                    repo_basis = tree.branch.repository.revision_tree(
2371
 
                        tree.last_revision())
2372
 
                    if len(list(repo_basis.iter_changes(tree_basis))):
2373
 
                        raise errors.BzrCheckError(
2374
 
                            "Mismatched basis inventory content.")
2375
 
                    tree._validate()
2376
 
                finally:
2377
 
                    tree_basis.unlock()
2378
 
            finally:
2379
 
                tree.unlock()
 
2308
    def run(self, path=None, verbose=False):
 
2309
        from bzrlib.check import check_dwim
 
2310
        if path is None:
 
2311
            path = '.'
 
2312
        check_dwim(path, verbose)
2380
2313
 
2381
2314
 
2382
2315
class cmd_upgrade(Command):
3274
3207
        shellcomplete.shellcomplete(context)
3275
3208
 
3276
3209
 
3277
 
class cmd_fetch(Command):
3278
 
    """Copy in history from another branch but don't merge it.
3279
 
 
3280
 
    This is an internal method used for pull and merge.
3281
 
    """
3282
 
    hidden = True
3283
 
    takes_args = ['from_branch', 'to_branch']
3284
 
    def run(self, from_branch, to_branch):
3285
 
        from bzrlib.fetch import Fetcher
3286
 
        from_b = Branch.open(from_branch)
3287
 
        to_b = Branch.open(to_branch)
3288
 
        Fetcher(to_b, from_b)
3289
 
 
3290
 
 
3291
3210
class cmd_missing(Command):
3292
3211
    """Show unmerged/unpulled revisions between two branches.
3293
3212
    
4101
4020
    To use a specific mail program, set the mail_client configuration option.
4102
4021
    (For Thunderbird 1.5, this works around some bugs.)  Supported values for
4103
4022
    specific clients are "evolution", "kmail", "mutt", and "thunderbird";
4104
 
    generic options are "default", "editor", "mapi", and "xdg-email".
 
4023
    generic options are "default", "editor", "emacsclient", "mapi", and
 
4024
    "xdg-email".
4105
4025
 
4106
4026
    If mail is being sent, a to address is required.  This can be supplied
4107
4027
    either on the commandline, by setting the submit_to configuration
4590
4510
    cmd_bundle_info,
4591
4511
    )
4592
4512
from bzrlib.sign_my_commits import cmd_sign_my_commits
4593
 
from bzrlib.weave_commands import cmd_versionedfile_list, cmd_weave_join, \
 
4513
from bzrlib.weave_commands import cmd_versionedfile_list, \
4594
4514
        cmd_weave_plan_merge, cmd_weave_merge_text