/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.40.10 by Parth Malwankar
assigned copyright to canonical
1
# Copyright (C) 2010 Canonical Ltd
0.40.1 by Parth Malwankar
initial skeleton
2
# Copyright (C) 2010 Parth Malwankar <parth.malwankar@gmail.com>
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
"""bzr grep"""
18
19
import os
0.40.3 by Parth Malwankar
basic file grep is working
20
import sys
0.40.1 by Parth Malwankar
initial skeleton
21
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
22
from bzrlib import errors
0.40.2 by Parth Malwankar
initial framework for grep
23
from bzrlib.commands import Command, register_command, display_command
24
from bzrlib.option import (
25
    Option,
26
    )
27
28
from bzrlib.lazy_import import lazy_import
29
lazy_import(globals(), """
0.40.3 by Parth Malwankar
basic file grep is working
30
import re
31
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
32
import grep
0.40.2 by Parth Malwankar
initial framework for grep
33
import bzrlib
34
from bzrlib import (
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
35
    osutils,
0.40.2 by Parth Malwankar
initial framework for grep
36
    bzrdir,
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
37
    trace,
0.40.2 by Parth Malwankar
initial framework for grep
38
    )
39
""")
0.40.1 by Parth Malwankar
initial skeleton
40
41
version_info = (0, 1)
42
43
class cmd_grep(Command):
0.40.2 by Parth Malwankar
initial framework for grep
44
    """Print lines matching PATTERN for specified files.
45
    """
46
47
    takes_args = ['pattern', 'path*']
48
    takes_options = [
49
        'verbose',
50
        Option('ignore-case', short_name='i',
51
               help='ignore case distinctions while matching.'),
52
        Option('recursive', short_name='R',
53
               help='Recurse into subdirectories.'),
54
        Option('from-root',
55
               help='Search for pattern starting from the root of the branch.'),
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
56
        Option('null', short_name='z',
57
               help='Write an ascii NUL (\\0) separator '
58
               'between output lines rather than a newline.'),
0.40.2 by Parth Malwankar
initial framework for grep
59
        ]
60
61
62
    @display_command
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
63
    def run(self, verbose=False, ignore_case=False, recursive=False, from_root=False,
64
            null=False, path_list=None, pattern=None):
0.40.2 by Parth Malwankar
initial framework for grep
65
        if path_list == None:
66
            path_list = ['.']
67
        else:
68
            if from_root:
69
                raise errors.BzrCommandError('cannot specify both --from-root and PATH.')
70
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
71
        eol_marker = '\n'
72
        if null:
73
            eol_marker = '\0'
74
0.40.3 by Parth Malwankar
basic file grep is working
75
        re_flags = 0
76
        if ignore_case:
77
            re_flags = re.IGNORECASE
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
78
        patternc = grep.compile_pattern(pattern, re_flags)
0.40.3 by Parth Malwankar
basic file grep is working
79
0.40.2 by Parth Malwankar
initial framework for grep
80
        for path in path_list:
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
81
            tree, branch, relpath = bzrdir.BzrDir.open_containing_tree_or_branch(path)
82
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
83
            if osutils.isdir(path):
0.40.6 by Parth Malwankar
fixed relative path handling
84
                # setup rpath to open files relative to cwd
85
                rpath = relpath
86
                if relpath:
87
                    rpath = os.path.join('..',relpath)
88
0.40.5 by Parth Malwankar
grep is working now howerver paths are not printed in the
89
                tree.lock_read()
90
                try:
91
                    for fp, fc, fkind, fid, entry in tree.list_files(include_root=False,
92
                        from_dir=relpath, recursive=recursive):
93
                        if fc == 'V' and fkind == 'file':
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
94
                            grep.file_grep(rpath, fp, patternc, eol_marker, outf=self.outf)
0.40.5 by Parth Malwankar
grep is working now howerver paths are not printed in the
95
                finally:
96
                    tree.unlock()
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
97
            else:
98
                # if user has explicitly specified a file
99
                # we don't care if its versioned
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
100
                if not tree.path2id(path):
101
                    trace.warning("warning: file '%s' is not versioned." % path)
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
102
                grep.file_grep('.', path, patternc, eol_marker, outf=self.outf)
0.40.1 by Parth Malwankar
initial skeleton
103
104
register_command(cmd_grep)
0.40.2 by Parth Malwankar
initial framework for grep
105
0.40.11 by Parth Malwankar
added basic test
106
def test_suite():
107
    from bzrlib.tests import TestUtil
108
109
    suite = TestUtil.TestSuite()
110
    loader = TestUtil.TestLoader()
111
    testmod_names = [
112
        'test_grep',
113
        ]
114
115
    suite.addTest(loader.loadTestsFromModuleNames(
116
            ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
117
    return suite
118