* [RFC/PATCH] handle_alias: provide GIT_CWD to !alias [not found] <4DA59B27.50506@ge.infn.it> @ 2011-04-13 13:05 ` Michael J Gruber 2011-04-13 13:12 ` Nguyen Thai Ngoc Duy 2011-04-26 22:22 ` Junio C Hamano 0 siblings, 2 replies; 12+ messages in thread From: Michael J Gruber @ 2011-04-13 13:05 UTC (permalink / raw) To: git; +Cc: Matej Batic Provide an environment variable GIT_CWD which contains the subdirectory from which a !alias was called since these cd to the to level directory before they are executed. Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> --- RFC for lack of tests and doc. I would say this is something realistic and useful which can be done now, no matter how our efforts with !(top) and the like go. git.c | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/git.c b/git.c index ef598c3..c8b9189 100644 --- a/git.c +++ b/git.c @@ -179,6 +179,8 @@ static int handle_alias(int *argcp, const char ***argv) if (alias_string[0] == '!') { const char **alias_argv; int argc = *argcp, i; + struct strbuf sb = STRBUF_INIT; + const char *env[2]; commit_pager_choice(); @@ -189,7 +191,13 @@ static int handle_alias(int *argcp, const char ***argv) alias_argv[i] = (*argv)[i]; alias_argv[argc] = NULL; - ret = run_command_v_opt(alias_argv, RUN_USING_SHELL); + strbuf_addstr(&sb, "GIT_CWD="); + if (subdir) + strbuf_addstr(&sb, subdir); + env[0] = sb.buf; + env[1] = NULL; + ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env); + strbuf_release(&sb); if (ret >= 0) /* normal exit */ exit(ret); -- 1.7.5.rc0.365.g23929a ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-13 13:05 ` [RFC/PATCH] handle_alias: provide GIT_CWD to !alias Michael J Gruber @ 2011-04-13 13:12 ` Nguyen Thai Ngoc Duy 2011-04-13 13:16 ` Michael J Gruber 2011-04-26 22:22 ` Junio C Hamano 1 sibling, 1 reply; 12+ messages in thread From: Nguyen Thai Ngoc Duy @ 2011-04-13 13:12 UTC (permalink / raw) To: Michael J Gruber; +Cc: git, Matej Batic On Wed, Apr 13, 2011 at 8:05 PM, Michael J Gruber <git@drmicha.warpmail.net> wrote: > - ret = run_command_v_opt(alias_argv, RUN_USING_SHELL); > + strbuf_addstr(&sb, "GIT_CWD="); > + if (subdir) > + strbuf_addstr(&sb, subdir); > + env[0] = sb.buf; > + env[1] = NULL; > + ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env); > + strbuf_release(&sb); > if (ret >= 0) /* normal exit */ > exit(ret); subdir can be NULL. I'm not sure if it can be empty string though. May need a check and set it to '.' so "cd $GIT_CWD" does not go back to $HOME. -- Duy ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-13 13:12 ` Nguyen Thai Ngoc Duy @ 2011-04-13 13:16 ` Michael J Gruber 2011-04-13 13:24 ` Nguyen Thai Ngoc Duy 0 siblings, 1 reply; 12+ messages in thread From: Michael J Gruber @ 2011-04-13 13:16 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy; +Cc: git, Matej Batic Nguyen Thai Ngoc Duy venit, vidit, dixit 13.04.2011 15:12: > On Wed, Apr 13, 2011 at 8:05 PM, Michael J Gruber > <git@drmicha.warpmail.net> wrote: >> - ret = run_command_v_opt(alias_argv, RUN_USING_SHELL); >> + strbuf_addstr(&sb, "GIT_CWD="); >> + if (subdir) >> + strbuf_addstr(&sb, subdir); >> + env[0] = sb.buf; >> + env[1] = NULL; >> + ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env); >> + strbuf_release(&sb); >> if (ret >= 0) /* normal exit */ >> exit(ret); > > subdir can be NULL. I'm not sure if it can be empty string though. May I'm pretty sure that my "if (subdir)" would catch that... > need a check and set it to '.' so "cd $GIT_CWD" does not go back to > $HOME. Well, with the current implementation you get empty or the subdir so that you can easily "test -n $GIT_CWD". If you want to cd around you can do "cd ./$GIT_CWD" unconditionally. I think this is more useful than having a "." there. Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-13 13:16 ` Michael J Gruber @ 2011-04-13 13:24 ` Nguyen Thai Ngoc Duy 0 siblings, 0 replies; 12+ messages in thread From: Nguyen Thai Ngoc Duy @ 2011-04-13 13:24 UTC (permalink / raw) To: Michael J Gruber; +Cc: git, Matej Batic On Wed, Apr 13, 2011 at 8:16 PM, Michael J Gruber <git@drmicha.warpmail.net> wrote: > Nguyen Thai Ngoc Duy venit, vidit, dixit 13.04.2011 15:12: >> On Wed, Apr 13, 2011 at 8:05 PM, Michael J Gruber >> <git@drmicha.warpmail.net> wrote: >>> - ret = run_command_v_opt(alias_argv, RUN_USING_SHELL); >>> + strbuf_addstr(&sb, "GIT_CWD="); >>> + if (subdir) >>> + strbuf_addstr(&sb, subdir); >>> + env[0] = sb.buf; >>> + env[1] = NULL; >>> + ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env); >>> + strbuf_release(&sb); >>> if (ret >= 0) /* normal exit */ >>> exit(ret); >> >> subdir can be NULL. I'm not sure if it can be empty string though. May > > I'm pretty sure that my "if (subdir)" would catch that... Yes. I skimmed too quick and realized after sending my email. >> need a check and set it to '.' so "cd $GIT_CWD" does not go back to >> $HOME. > > Well, with the current implementation you get empty or the subdir so > that you can easily "test -n $GIT_CWD". If you want to cd around you can > do "cd ./$GIT_CWD" unconditionally. I think this is more useful than > having a "." there. In that case should the variable have a another name? CWD/PWD is usually absolute path. "cd ./$GIT_CWD" looks odd to me. Or you can getcwd() and set $OLDPWD. -- Duy ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-13 13:05 ` [RFC/PATCH] handle_alias: provide GIT_CWD to !alias Michael J Gruber 2011-04-13 13:12 ` Nguyen Thai Ngoc Duy @ 2011-04-26 22:22 ` Junio C Hamano 2011-04-27 6:47 ` Michael J Gruber 1 sibling, 1 reply; 12+ messages in thread From: Junio C Hamano @ 2011-04-26 22:22 UTC (permalink / raw) To: Michael J Gruber; +Cc: git, Matej Batic Michael J Gruber <git@drmicha.warpmail.net> writes: > Provide an environment variable GIT_CWD which contains the subdirectory > from which a !alias was called since these cd to the to level directory > before they are executed. Isn't this what we usually call "prefix", though? ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-26 22:22 ` Junio C Hamano @ 2011-04-27 6:47 ` Michael J Gruber 2011-04-27 7:40 ` Nguyen Thai Ngoc Duy 0 siblings, 1 reply; 12+ messages in thread From: Michael J Gruber @ 2011-04-27 6:47 UTC (permalink / raw) To: Junio C Hamano; +Cc: git, Matej Batic Junio C Hamano venit, vidit, dixit 27.04.2011 00:22: > Michael J Gruber <git@drmicha.warpmail.net> writes: > >> Provide an environment variable GIT_CWD which contains the subdirectory >> from which a !alias was called since these cd to the to level directory >> before they are executed. > > Isn't this what we usually call "prefix", though? In code it is called "prefix". But I have to ask: So what? Are you suggesting GIT_PREFIX? User expectation is probably more tied to CWD, unless a user knows "rev-parse --show-prefix". I don't care about the name, and GIT_PREFIX may be more systematic. A more important point is the prefix-less case (i.e. we are in topdir): Should GIT_YOUNAMEIT be empty then? I would say yes (just like "rev-parse --show-prefix"), Duy said no. We need a third vote :) Also, we may want to scrap this altogether and do !!-aliases instead (without chdir). Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-27 6:47 ` Michael J Gruber @ 2011-04-27 7:40 ` Nguyen Thai Ngoc Duy 2011-04-27 8:10 ` Michael J Gruber 0 siblings, 1 reply; 12+ messages in thread From: Nguyen Thai Ngoc Duy @ 2011-04-27 7:40 UTC (permalink / raw) To: Michael J Gruber; +Cc: Junio C Hamano, git, Matej Batic On Wed, Apr 27, 2011 at 1:47 PM, Michael J Gruber <git@drmicha.warpmail.net> wrote: > A more important point is the prefix-less case (i.e. we are in topdir): > Should GIT_YOUNAMEIT be empty then? I would say yes (just like > "rev-parse --show-prefix"), Duy said no. We need a third vote :) I said no because you named it GIT_CWD. If it's GIT_PREFIX, then empty prefix is normal, no objections. -- Duy ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC/PATCH] handle_alias: provide GIT_CWD to !alias 2011-04-27 7:40 ` Nguyen Thai Ngoc Duy @ 2011-04-27 8:10 ` Michael J Gruber 2011-04-27 8:36 ` [PATCH 1/2] t1020: test !alias in subdirectory Michael J Gruber 0 siblings, 1 reply; 12+ messages in thread From: Michael J Gruber @ 2011-04-27 8:10 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy; +Cc: Junio C Hamano, git, Matej Batic Nguyen Thai Ngoc Duy venit, vidit, dixit 27.04.2011 09:40: > On Wed, Apr 27, 2011 at 1:47 PM, Michael J Gruber > <git@drmicha.warpmail.net> wrote: >> A more important point is the prefix-less case (i.e. we are in topdir): >> Should GIT_YOUNAMEIT be empty then? I would say yes (just like >> "rev-parse --show-prefix"), Duy said no. We need a third vote :) > > I said no because you named it GIT_CWD. If it's GIT_PREFIX, then empty > prefix is normal, no objections. We have a winner then! Patch upcoming. Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] t1020: test !alias in subdirectory 2011-04-27 8:10 ` Michael J Gruber @ 2011-04-27 8:36 ` Michael J Gruber 2011-04-27 8:36 ` [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias Michael J Gruber 0 siblings, 1 reply; 12+ messages in thread From: Michael J Gruber @ 2011-04-27 8:36 UTC (permalink / raw) To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy, Matej Batic Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> --- t/t1020-subdirectory.sh | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/t/t1020-subdirectory.sh b/t/t1020-subdirectory.sh index 1fd187c..66e40d3 100755 --- a/t/t1020-subdirectory.sh +++ b/t/t1020-subdirectory.sh @@ -118,6 +118,17 @@ test_expect_success 'alias expansion' ' git ss ) ' + +test_expect_success '!alias expansion' ' + pwd >expect && + ( + git config alias.test !pwd && + cd dir && + git test >../actual + ) && + test_cmp expect actual +' + test_expect_success 'no file/rev ambiguity check inside .git' ' git commit -a -m 1 && ( -- 1.7.5.270.gafca7 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias 2011-04-27 8:36 ` [PATCH 1/2] t1020: test !alias in subdirectory Michael J Gruber @ 2011-04-27 8:36 ` Michael J Gruber 2011-04-27 9:06 ` Nguyen Thai Ngoc Duy 0 siblings, 1 reply; 12+ messages in thread From: Michael J Gruber @ 2011-04-27 8:36 UTC (permalink / raw) To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy, Matej Batic Provide an environment variable GIT_PREFIX which contains the subdirectory from which a !alias was called (i.e. 'git rev-parse --show-prefix') since these cd to the to level directory before they are executed. Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> --- Documentation/config.txt | 2 ++ git.c | 10 +++++++++- t/t1020-subdirectory.sh | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletions(-) diff --git a/Documentation/config.txt b/Documentation/config.txt index 750c86d..66281dd 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -589,6 +589,8 @@ it will be treated as a shell command. For example, defining "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]. am.keepcr:: If true, git-am will call git-mailsplit for patches in mbox format diff --git a/git.c b/git.c index ef598c3..ed89951 100644 --- a/git.c +++ b/git.c @@ -179,6 +179,8 @@ static int handle_alias(int *argcp, const char ***argv) if (alias_string[0] == '!') { const char **alias_argv; int argc = *argcp, i; + struct strbuf sb = STRBUF_INIT; + const char *env[2]; commit_pager_choice(); @@ -189,7 +191,13 @@ static int handle_alias(int *argcp, const char ***argv) alias_argv[i] = (*argv)[i]; alias_argv[argc] = NULL; - ret = run_command_v_opt(alias_argv, RUN_USING_SHELL); + strbuf_addstr(&sb, "GIT_PREFIX="); + if (subdir) + strbuf_addstr(&sb, subdir); + env[0] = sb.buf; + env[1] = NULL; + ret = run_command_v_opt_cd_env(alias_argv, RUN_USING_SHELL, NULL, env); + strbuf_release(&sb); if (ret >= 0) /* normal exit */ exit(ret); diff --git a/t/t1020-subdirectory.sh b/t/t1020-subdirectory.sh index 66e40d3..ddc3921 100755 --- a/t/t1020-subdirectory.sh +++ b/t/t1020-subdirectory.sh @@ -129,6 +129,16 @@ test_expect_success '!alias expansion' ' test_cmp expect actual ' +test_expect_success 'GIT_PREFIX for !alias' ' + printf "dir/" >expect && + ( + git config alias.test "!sh -c \"printf \$GIT_PREFIX\"" && + cd dir && + git test >../actual + ) && + test_cmp expect actual +' + test_expect_success 'no file/rev ambiguity check inside .git' ' git commit -a -m 1 && ( -- 1.7.5.270.gafca7 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias 2011-04-27 8:36 ` [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias Michael J Gruber @ 2011-04-27 9:06 ` Nguyen Thai Ngoc Duy 2011-04-27 9:36 ` Michael J Gruber 0 siblings, 1 reply; 12+ messages in thread From: Nguyen Thai Ngoc Duy @ 2011-04-27 9:06 UTC (permalink / raw) To: Michael J Gruber; +Cc: git, Junio C Hamano, Matej Batic 2011/4/27 Michael J Gruber <git@drmicha.warpmail.net>: > @@ -589,6 +589,8 @@ it will be treated as a shell command. For example, defining > "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]. It made me wonder "but then why should not we just do GIT_PREFIX=`git rev-parse --show-prefix` in the alias?" then realized by the time we do that, it's already too late. Maybe > +'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix' > +before current directory is changed to top-level directory. See linkgit:git-rev-parse[1]. ? -- Duy ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias 2011-04-27 9:06 ` Nguyen Thai Ngoc Duy @ 2011-04-27 9:36 ` Michael J Gruber 0 siblings, 0 replies; 12+ messages in thread From: Michael J Gruber @ 2011-04-27 9:36 UTC (permalink / raw) To: Nguyen Thai Ngoc Duy; +Cc: git, Junio C Hamano, Matej Batic Nguyen Thai Ngoc Duy venit, vidit, dixit 27.04.2011 11:06: > 2011/4/27 Michael J Gruber <git@drmicha.warpmail.net>: >> @@ -589,6 +589,8 @@ it will be treated as a shell command. For example, defining >> "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]. > > It made me wonder "but then why should not we just do GIT_PREFIX=`git > rev-parse --show-prefix` in the alias?" then realized by the time we > do that, it's already too late. Maybe > >> +'GIT_PREFIX' is set as returned by running 'git rev-parse --show-prefix' >> +before current directory is changed to top-level directory. See linkgit:git-rev-parse[1]. > > ? Well, the text says already that the alias is not run from the "original current directory", so it's two ways of saying the same thing. Michael ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2011-04-27 9:36 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <4DA59B27.50506@ge.infn.it> 2011-04-13 13:05 ` [RFC/PATCH] handle_alias: provide GIT_CWD to !alias Michael J Gruber 2011-04-13 13:12 ` Nguyen Thai Ngoc Duy 2011-04-13 13:16 ` Michael J Gruber 2011-04-13 13:24 ` Nguyen Thai Ngoc Duy 2011-04-26 22:22 ` Junio C Hamano 2011-04-27 6:47 ` Michael J Gruber 2011-04-27 7:40 ` Nguyen Thai Ngoc Duy 2011-04-27 8:10 ` Michael J Gruber 2011-04-27 8:36 ` [PATCH 1/2] t1020: test !alias in subdirectory Michael J Gruber 2011-04-27 8:36 ` [PATCH 2/2] handle_alias: provide GIT_PREFIX to !alias Michael J Gruber 2011-04-27 9:06 ` Nguyen Thai Ngoc Duy 2011-04-27 9:36 ` Michael J Gruber
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).