[Python-Dev] Emacs users: hg-tools-grep

Brandon W Maister bwmaister at gmail.com
Mon Dec 10 21:02:13 CET 2012


>
> P.S. Who wants to abuse Jono and Matthew's copyright again and provide a
> <shudder> git version?
>

Oh, I do!

I also feel weird about adding a copyright to this, but how will other
people feel comfortable using it if I don't?

Also I put it in github, in case people want to fix it:
https://github.com/quodlibetor/git-tools.el

;; Copyright (c) 2012 Brandon W Maister
;;
;; Permission is hereby granted, free of charge, to any person obtaining
;; a copy of this software and associated documentation files (the
;; "Software"), to deal in the Software without restriction, including
;; without limitation the rights to use, copy, modify, merge, publish,
;; distribute, sublicense, and/or sell copies of the Software, and to
;; permit persons to whom the Software is furnished to do so, subject to
;; the following conditions:
;;
;; The above copyright notice and this permission notice shall be
;; included in all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
;; LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
;; WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

;; This code is based on hg-tools.el, which in turn is based on bzr-tools.el
;; Copyright (c) 2008-2012 Jonathan Lange, Matthew Lefkowitz, Barry A.
Warsaw

(provide 'git-tools)

(defconst git-tools-grep-command
  "git ls-files -z | xargs -0 grep -In %s"
  "The command used for grepping files using git. See `git-tools-grep'.")

;; Run 'code' at the root of the branch which dirname is in.
(defmacro git-tools-at-branch-root (dirname &rest code)
  `(let ((default-directory (locate-dominating-file (expand-file-name
,dirname) ".git"))) , at code))


(defun git-tools-grep (expression dirname)
  "Search a branch for `expression'. If there's a C-u prefix, prompt for
`dirname'."
  (interactive
   (let* ((string (read-string "Search for: "))
          (dir (if (null current-prefix-arg)
                   default-directory
                 (read-directory-name (format "Search for %s in: "
string)))))
     (list string dir)))
  (git-tools-at-branch-root dirname
   (grep-find (format git-tools-grep-command (shell-quote-argument
expression)))))



On Sat, Dec 8, 2012 at 4:51 PM, Barry Warsaw <barry at python.org> wrote:

> Hark fellow Emacsers.  All you unenlightened heathens can stop reading now.
>
> A few years ago, my colleague Jono Lange wrote probably the best little
> chunk
> of Emacs lisp ever.  `M-x bzr-tools-grep` lets you easily search a Bazaar
> repository for a case-sensitive string, providing you with a nice *grep*
> buffer which you can scroll through.  When you find a code sample you want
> to
> look at, C-c C-c visits the file and plops you right at the matching line.
> You *only* grep through files under version control, so you get to ignore
> generated files, and compilation artifacts, etc.
>
> Of course, this doesn't help you for working on the Python code base,
> because
> Mercurial.  I finally whipped up this straight up rip of Jono's code to
> work
> with hg.  I'm actually embarrassed to put a copyright on this thing, and
> would
> happily just donate it to Jono, drop it in Python's Misc directory, or
> slip it
> like a lump of coal into the xmas stocking of whoever wants to "maintain"
> it
> for the next 20 years.
>
> But anyway, it's already proven enormously helpful to me, so here it is.
>
> Cheers,
> -Barry
>
> P.S. Who wants to abuse Jono and Matthew's copyright again and provide a
> <shudder> git version?
>
> ;; Copyright (c) 2012 Barry A. Warsaw
> ;;
> ;; Permission is hereby granted, free of charge, to any person obtaining
> ;; a copy of this software and associated documentation files (the
> ;; "Software"), to deal in the Software without restriction, including
> ;; without limitation the rights to use, copy, modify, merge, publish,
> ;; distribute, sublicense, and/or sell copies of the Software, and to
> ;; permit persons to whom the Software is furnished to do so, subject to
> ;; the following conditions:
> ;;
> ;; The above copyright notice and this permission notice shall be
> ;; included in all copies or substantial portions of the Software.
> ;;
> ;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> ;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> ;; MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> ;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
> ;; LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
> ;; OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> ;; WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>
> ;; This code is based on bzr-tools.el
> ;; Copyright (c) 2008-2009 Jonathan Lange, Matthew Lefkowitz
>
> (provide 'hg-tools)
>
> (defconst hg-tools-grep-command
>   "hg locate --print0 | xargs -0 grep -In %s"
>   "The command used for grepping files using hg. See `hg-tools-grep'.")
>
> ;; Run 'code' at the root of the branch which dirname is in.
> (defmacro hg-tools-at-branch-root (dirname &rest code)
>   `(let ((default-directory (locate-dominating-file (expand-file-name
> ,dirname) ".hg"))) , at code))
>
>
> (defun hg-tools-grep (expression dirname)
>   "Search a branch for `expression'. If there's a C-u prefix, prompt for
> `dirname'."
>   (interactive
>    (let* ((string (read-string "Search for: "))
>           (dir (if (null current-prefix-arg)
>                    default-directory
>                  (read-directory-name (format "Search for %s in: "
> string)))))
>      (list string dir)))
>   (hg-tools-at-branch-root dirname
>    (grep-find (format hg-tools-grep-command (shell-quote-argument
> expression)))))
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/quodlibetor%40gmail.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20121210/363b118f/attachment-0001.html>


More information about the Python-Dev mailing list