Re: GDB Focus Group at the 2008 GCC Summit

Daniel Jacobowitz
2008-06-24T18:28:00Z

[-- Attachment #1: Type: text/plain, Size: 466 bytes --]

On Tue, Jun 24, 2008 at 09:35:46AM +0100, Andrew STUBBS wrote:
> Mark Kettenis wrote:
>> Objection! I have played with SVN for work and I really dilike the
>> fact that a checked out repository is very grep unfriendly.
>
> grep --exclude=*.svn-base
>
> I have it in an alias.

A slightly more thorough version attached, for anyone who wants it.

Another alternative is to use svk; one of the advantages is smaller
working trees.

--
Daniel Jacobowitz
CodeSourcery

[-- Attachment #2: svngrep --]
[-- Type: text/plain, Size: 1694 bytes --]

#!/bin/bash

# svngrep - recursive grep safe for SVN trees (and quilt)
# Copyright (C) 2008 Daniel Jacobowitz <dan@codesourcery.com>

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

args=()
files=()
next_opt=false
next_file=false
need_pattern=true
for arg; do
if $next_file; then
if $need_pattern; then
args=("${args[@]}" "$arg")
need_pattern=false
else
files=("${files[@]}" "$arg")
fi
elif $next_opt; then
next_opt=false
args=("${args[@]}" "$arg")
else
case "$arg" in
-e|-f)
need_pattern=false
next_opt=true
args=("${args[@]}" "$arg")
;;
-m|-A|-B|-C|-D|-d)
next_opt=true
args=("${args[@]}" "$arg")
;;
-r)
# Just consume -r.
;;
--)
args=("${args[@]}" "$arg")
next_file=true
;;
-*)
args=("${args[@]}" "$arg")
;;
*)
if $need_pattern; then
args=("${args[@]}" "$arg")
need_pattern=false
else
files=("${files[@]}" "$arg")
fi
next_file=true
;;
esac
fi
done

find "${files[@]}" -name .svn -prune \
-o -name .pc -prune -o -name \*~ -prune \
-o -type f -print0 | xargs -0 grep "${args[@]}"