git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[RFC PATCH] Allow aliases that include other aliases

From
Tim Schumacher <timschumi@gmx.de>
Date
Sep 4, 2018, 17:39 UTC
Message-ID
<20180904173915.2393-1-timschumi@gmx.de>

Aliases can only contain non-alias git commands and arguments, but not other user-defined aliases. Resolving nested aliases is prevented by breaking the loop after the first alias was processed, git then fails with a command-not-found error.

Allow resolving nested aliases by not breaking the loop in run_argv() after the first alias was processed. Instead, continue incrementing done_alias until handle_alias() fails, which means that there are no further aliases that can be processed.

---

I submitted this as RFC because I'm not sure whether disallowing nested aliases was an intentional design choice. The done_alias check implies that disallowing is intended, but the direct recursion check for aliases that call themselves opposes that.

Furthermore, including this patch allows creating a looping state, since the recursion check only checks if an alias is directly calling itself. One solution would be to break the loop as soon as done_alias reaches a certain value, but that requires setting an arbitrary point of "too many recursions". A list of already resolved aliases and breaking the loop as soon as an alias is resolved twice would probably do the trick, but implementing that is well beyond the point of what I'm capable of doing.

---
 git.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/git.c b/git.c
index c27c38738..9d3cf5797 100644
--- a/git.c
+++ b/git.c
@@ -695,11 +695,9 @@ static int run_argv(int *argcp, const char ***argv)
 		 * of overriding "git log" with "git show" by having
 		 * alias.log = show
 		 */
-		if (done_alias)
-			break;
 		if (!handle_alias(argcp, argv))
 			break;
-		done_alias = 1;
+		done_alias++;
 	}
 
 	return done_alias;
-- 
2.19.0.rc1.2.g7460ee143
Next: Junio C Hamano
Message 1 of 3 in “Allow aliases that include other aliases”
  1. Allow aliases that include other aliasesTim Schumacher, Sep 4, 2018
  2. Junio C HamanoSep 4, 2018
  3. Jeff KingSep 4, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.