From: Chris Packham <hidden> Date: 2016-06-15 22:49:36
This series contains 2 RFC patches that both implement a grep feature for
submodules. The first patch is a self-contained script for contrib that should
work with most current git versions. The 2nd is basically the same
implementation but done as a proper git submodule command with some of the
helper code moved to git-sh-setup.sh
There are a couple of questions for this. Technically I'm making submodule
grep-aware, should I be making grep submodule-aware instead? I haven't looked
at the grep code yet but I imagine its harder.
Should I be putting the submodule_root* routines in git-sh-setup or should I be
looking at adding it to 'git rev parse' instead. I'm guessing eventually more
commands might want to be able to get at the base superproject.
Chris Packham (2):
contrib: add git-submodule-grep.sh
submodule: add grep command
From: Chris Packham <hidden> Date: 2016-06-15 22:49:36
This adds a 'grep' command to the 'git submodule' commands. Internally it is
basically a wrapper for "git submodule foreach 'git grep <pattern>'" but
does have the advantage of supplying results with a path relative to the
current directory.
Unlike contrib/git-submodule-grep.sh this can only be run from the root of a
submodule or the root of the superproject.
Signed-off-by: Chris Packham <redacted>
---
git-sh-setup.sh | 19 +++++++++++++++++++
git-submodule.sh | 41 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 58 insertions(+), 2 deletions(-)
@@ -145,6 +145,25 @@ require_work_tree () {die"fatal: $0 cannot be used without a working tree."}+submodule_root_relative()+{+ceiling="$HOME"+whiletest!-e"$cdup.gitmodules";do+cdup="$cdup../"+iftest"$(cd$cdup&&pwd)"=="$ceiling";then+echo>&2"fatal: failed to find superproject root."+echo>&2" stopped searching at $ceiling".+exit1+fi+done+echo"$cdup"+}++submodule_root()+{+(cd"$(submodule_root_relative)"&&pwd)+}+ get_author_ident_from_commit(){pick_author_script='/^author/{
@@ -849,6 +850,42 @@ cmd_sync()fidone}+#+# Search for a pattern within all submodules+# This is a fairly simple wrapper using foreach and git grep,+# arguments could be passed to git grep but for now we only+# understand -n+#+cmd_grep()+{+grep_args=""+whiletest$#-ne0+do+case"$1"in+-n)+grep_args="$1"+shift+;;+--)+shift+break+;;+-*)+usage+;;+*)+break+;;+esac+done+test$#-lt1&&die"fatal: no pattern given"++prefix="$(submodule_root_relative)"||exit1+(cd"./$prefix";\+cmd_foreach"git --no-pager grep $grep_args -- $@ | \+seds\"|.*|$prefix\$path/&|\"||true") \+|git_pager+}# This loop parses the command line arguments to find the# subcommand name to dispatch. Parsing of the subcommand specific
From: Chris Packham <hidden> Date: 2016-06-15 22:49:36
A simple wrapper around 'git grep' that is submodule aware.
The advantage of this over "git submodule foreach 'git grep <pattern>'" is
that the results are presented with a path relative to the current
directory. Also this script will work from any subdirectory of any submodule
in the current superproject.
Signed-off-by: Chris Packham <redacted>
---
contrib/git-submodule-grep.sh | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
create mode 100755 contrib/git-submodule-grep.sh
@@ -0,0 +1,35 @@+#!/bin/sh+# Copyright (c) 2010, Chris Packham+# Wrapper for git grep that is submodule aware++SUBDIRECTORY_OK="yes"+.git-sh-setup++submodule_root_relative()+{+ceiling="$HOME"+whiletest!-e"$cdup.gitmodules";do+cdup="$cdup../"+iftest"$(cd$cdup&&pwd)"=="$ceiling";then+echo>&2"fatal: failed to find superproject root,"+echo>&2" stopped searching at $ceiling."+exit1+fi+done+echo"$cdup"+}++submodule_root()+{+(cd"$(submodule_root_relative)"&&pwd)+}++# we don't do anything with the arg but we should check that we+# have something to pass to git grep+test$#-lt1&&die"fatal: no pattern given."++prefix="$(submodule_root_relative)"||exit1+(cd"./$prefix";\+gitsubmodule--quietforeach\+"git --no-pager grep $@ | sed s\"|.*|$prefix\$path/&|\" || true")\+|git_pager
Hi,
On Thu, Sep 23, 2010 at 02:17:05PM -0700, Chris Packham wrote:
This series contains 2 RFC patches that both implement a grep feature for
submodules. The first patch is a self-contained script for contrib that should
work with most current git versions. The 2nd is basically the same
implementation but done as a proper git submodule command with some of the
helper code moved to git-sh-setup.sh
There are a couple of questions for this. Technically I'm making submodule
grep-aware, should I be making grep submodule-aware instead? I haven't looked
at the grep code yet but I imagine its harder.
Nice work! IMO it would be even nicer to have it as part of git grep.
Have a look at Jens branch about submodule checkout:
http://github.com/jlehmann/git-submod-enhancements (enhance_git_for_submodules)
particularly how checkout_submodule() is implemented. It forks a git
checkout inside the submodule. In a similar way you could fork a grep
there. Then you just have to teach the forked grep to prepend the
submodules path.
Cheers Heiko
From: Chris Packham <hidden> Date: 2016-06-15 22:49:36
On 24/09/10 06:47, Heiko Voigt wrote:
Hi,
On Thu, Sep 23, 2010 at 02:17:05PM -0700, Chris Packham wrote:
quoted
This series contains 2 RFC patches that both implement a grep feature for
submodules. The first patch is a self-contained script for contrib that should
work with most current git versions. The 2nd is basically the same
implementation but done as a proper git submodule command with some of the
helper code moved to git-sh-setup.sh
There are a couple of questions for this. Technically I'm making submodule
grep-aware, should I be making grep submodule-aware instead? I haven't looked
at the grep code yet but I imagine its harder.
Nice work! IMO it would be even nicer to have it as part of git grep.
Have a look at Jens branch about submodule checkout:
http://github.com/jlehmann/git-submod-enhancements (enhance_git_for_submodules)
particularly how checkout_submodule() is implemented. It forks a git
checkout inside the submodule. In a similar way you could fork a grep
there. Then you just have to teach the forked grep to prepend the
submodules path.
I'll look into it, from following Jens code it doesn't look too hard
(like you say just fork and pass a text prefix). I'm currently doing my
git hacking on my main development machine so I should probably setup
and environment where I can hack without affecting $dayjob work.
In the meantime I've got an updated patch for contrib if anyone is
interested (it just adds some grep options to be passed through).
Thanks,
Chris
There are a couple of questions for this. Technically I'm making submodule
grep-aware, should I be making grep submodule-aware instead? I haven't looked
at the grep code yet but I imagine its harder.
Nice work! IMO it would be even nicer to have it as part of git grep.
I like it too! And yes, me too thinks adding a "--recursive" option
to "git grep" would make more sense than adding a "grep" option to
the "git submodule" script.