On Thu, Oct 31, 2013 at 11:36:59AM -0400, Eugene Sajine wrote: > On Wed, Oct 30, 2013 at 11:54 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Eugene Sajine <euguess@xxxxxxxxx> writes: > > > >> That was my initial intention, because I would like to be able to pass > >> parameters like to git log or git blame correctly without the explicit > >> use of $1. Could you please advise about how to make it work with the > >> !sh -c ? > >> > >> Because the same exact (sed 's/@\\S*//') syntax didn't work with "sh -c". > > > > You can make it work if you think step-by-step. First, this is what > > you want to run: > > > > sh -c 'git log --format="..." "$@" | sed "s/@\S*//"' - > > > > so that "git euguess master..next" would turn into > > > > sh -c 'git log --format="..." "$@" | sed "s/@\S*//"' - master..next > > > > Now, you want to wrap it into an alias, i.e. > > > > [alias] > > euguess = "!sh -c ..." > > > > That ... part is read by our configuration reader, so you need to > > quote the double quotes and backslashes with backslash, which would > > give you something like: > > > > [alias] > > euguess = "!sh -c 'git log --format=\"%h %ae %s\" --date=short \"$@\" | sed \"s/@\\S*//\"' -" > > > > > > Junio, > > Thanks for taking the time - I appreciate that a lot. > It does work properly now except there is some difference between the > required pathnames: > > when i'm in a subfolder in git repo i can say > > git log filename > > But it seems that if the alias is used i need to specify full path > from the root of the repo no matter where i am. > > git log a/b/c/filename > > the difference is obviously in the working directory > > when i add an alias: > > pd = "!sh -c 'pwd'" > > i get this: > > $ git pd > /home/users/euguess/repo > > $ pwd > /home/users/euguess/repo/a/b/c > > Is there any way to help that situation? Here's the relevant details from Documentation/config.txt: """ If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command. For example, defining "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new" is equivalent to running the shell command "gitk --all --not ORIG_HEAD". Note that shell commands will be executed from the top-level directory of a repository, which may not necessarily be the current directory. 'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix' from the original current directory. See linkgit:git-rev-parse[1]. """ The $GIT_PREFIX variable should be available to the alias; it is a path relative to the root which corresponds to the current directory. That doesn't quite play well with these aliases because they use "$@", though. One way to do it is to add another layer of indirection. Maybe someone else on this list has a better suggestion, but this should do the trick... Create a shell script to contain your alias, and then point your alias at it. e.g. [alias] example = "!/path/to/alias-script \"$@\"" and then the script can look like: #!/bin/sh unset CDPATH if test -n "$GIT_PREFIX" then cd "$GIT_PREFIX" fi git log --format='%h %ae %s' --date=short "$@" | sed 's/@\\S*//' ...or something like that. I hope that helps. I'm also curious if there's a way to avoid needing the extra script... ... A-ha.. I think adding the chdir to alias is possible using a function. [alias] example = "!f() { cd \"${GIT_PREFIX:-.}\" && git log \"$@\"; }; f" Does that work for you? I hope that helps. cheers, -- David -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html