/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.28 by Parth Malwankar
basic revision spec is used for grepping
33
0.40.2 by Parth Malwankar
initial framework for grep
34
import bzrlib
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
35
from bzrlib.revisionspec import RevisionSpec
36
from bzrlib.workingtree import WorkingTree
0.40.2 by Parth Malwankar
initial framework for grep
37
from bzrlib import (
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
38
    osutils,
0.40.2 by Parth Malwankar
initial framework for grep
39
    bzrdir,
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
40
    trace,
0.40.2 by Parth Malwankar
initial framework for grep
41
    )
42
""")
0.40.1 by Parth Malwankar
initial skeleton
43
44
version_info = (0, 1)
45
46
class cmd_grep(Command):
0.40.2 by Parth Malwankar
initial framework for grep
47
    """Print lines matching PATTERN for specified files.
48
    """
49
50
    takes_args = ['pattern', 'path*']
51
    takes_options = [
52
        'verbose',
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
53
        'revision',
0.40.24 by Parth Malwankar
added support for --line-number.
54
        Option('line-number', short_name='n',
55
               help='show 1-based line number.'),
0.40.2 by Parth Malwankar
initial framework for grep
56
        Option('ignore-case', short_name='i',
57
               help='ignore case distinctions while matching.'),
58
        Option('recursive', short_name='R',
59
               help='Recurse into subdirectories.'),
60
        Option('from-root',
0.40.18 by Parth Malwankar
improved help string
61
               help='Search for pattern starting from the root of the branch. '
62
               '(implies --recursive)'),
0.40.19 by Parth Malwankar
null option should be -Z instead of -z
63
        Option('null', short_name='Z',
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
64
               help='Write an ascii NUL (\\0) separator '
65
               'between output lines rather than a newline.'),
0.40.2 by Parth Malwankar
initial framework for grep
66
        ]
67
68
69
    @display_command
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
70
    def run(self, verbose=False, ignore_case=False, recursive=False, from_root=False,
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
71
            null=False, line_number=False, path_list=None, revision=None, pattern=None):
0.40.2 by Parth Malwankar
initial framework for grep
72
        if path_list == None:
73
            path_list = ['.']
74
        else:
75
            if from_root:
76
                raise errors.BzrCommandError('cannot specify both --from-root and PATH.')
77
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
78
        if revision == None:
79
            revision = [RevisionSpec.from_string("last:1")]
80
        start_rev = revision[0]
81
        end_rev = None
82
        if len(revision) == 2:
83
            end_rev = revision[1]
84
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
85
        eol_marker = '\n'
86
        if null:
87
            eol_marker = '\0'
88
0.40.3 by Parth Malwankar
basic file grep is working
89
        re_flags = 0
90
        if ignore_case:
91
            re_flags = re.IGNORECASE
0.40.9 by Parth Malwankar
factored out grep related code to grep.py
92
        patternc = grep.compile_pattern(pattern, re_flags)
0.40.3 by Parth Malwankar
basic file grep is working
93
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
94
        wt, relpath = WorkingTree.open_containing('.')
95
96
        wt.lock_read()
97
        self.add_cleanup(wt.unlock)
0.40.2 by Parth Malwankar
initial framework for grep
98
        for path in path_list:
0.40.28 by Parth Malwankar
basic revision spec is used for grepping
99
            tree = start_rev.as_tree(wt.branch)
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
100
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
101
            if osutils.isdir(path):
0.40.6 by Parth Malwankar
fixed relative path handling
102
                # setup rpath to open files relative to cwd
103
                rpath = relpath
104
                if relpath:
0.40.20 by Parth Malwankar
used path functions from bzrlib.osutils
105
                    rpath = osutils.pathjoin('..',relpath)
0.40.6 by Parth Malwankar
fixed relative path handling
106
0.40.5 by Parth Malwankar
grep is working now howerver paths are not printed in the
107
                tree.lock_read()
108
                try:
0.40.17 by Parth Malwankar
from-root is working now.
109
                    if from_root:
110
                        # start searching recursively from root
111
                        relpath=None
112
                        recursive=True
113
0.40.5 by Parth Malwankar
grep is working now howerver paths are not printed in the
114
                    for fp, fc, fkind, fid, entry in tree.list_files(include_root=False,
115
                        from_dir=relpath, recursive=recursive):
116
                        if fc == 'V' and fkind == 'file':
0.40.24 by Parth Malwankar
added support for --line-number.
117
                            grep.file_grep(tree, fid, rpath, fp, patternc,
118
                                eol_marker, self.outf, line_number)
0.40.5 by Parth Malwankar
grep is working now howerver paths are not printed in the
119
                finally:
120
                    tree.unlock()
0.40.4 by Parth Malwankar
intermediate checkin. added support for --null
121
            else:
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
122
                id = tree.path2id(path)
123
                if not id:
0.40.7 by Parth Malwankar
issue a warning while searching unversioned file
124
                    trace.warning("warning: file '%s' is not versioned." % path)
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
125
                    continue
126
                tree.lock_read()
127
                try:
0.40.24 by Parth Malwankar
added support for --line-number.
128
                    grep.file_grep(tree, id, '.', path, patternc, eol_marker,
129
                        self.outf, line_number)
0.40.16 by Parth Malwankar
tree.get_file_lines is now used to get lines of text
130
                finally:
131
                    tree.unlock()
0.40.1 by Parth Malwankar
initial skeleton
132
133
register_command(cmd_grep)
0.40.2 by Parth Malwankar
initial framework for grep
134
0.40.11 by Parth Malwankar
added basic test
135
def test_suite():
136
    from bzrlib.tests import TestUtil
137
138
    suite = TestUtil.TestSuite()
139
    loader = TestUtil.TestLoader()
140
    testmod_names = [
141
        'test_grep',
142
        ]
143
144
    suite.addTest(loader.loadTestsFromModuleNames(
145
            ["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
146
    return suite
147