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

Repository specific git commands

From
Ciprian Dorin Craciun <ciprian.craciun@gmail.com>
Date
Jan 7, 2008, 12:15 UTC
Message-ID
<8e04b5820801070415j5166c2eco53760cffe1ab1efb@mail.gmail.com>
    Hello all!
    I have a question / proposal: I see on the mailing list a lot of
situations when some commands (or group of commands) are very often
used and the users demand (or would like to have) a special "git xxx"
command for them. But adding such a command -- in almost all cases --
is not worth the effort or increases the number of available commands
(thus confusing even more the users).
    Thus the users are left with only two possibilities:
    -- either define an alias -- but usually it is very restrictive in
terms of what the alias can do;
    -- create a custom git command "git-xxx" and place it in the
executable path -- but this requires root access.
    (-- or write a custom script but this can not be invoked as "git xxx")
    => Thus neither option is very useful.
    So my proposal is to let the users create a special folder inside
the .git directory, for example ".git/bin" where they can place custom
built git files like "git-xxx", and when they issue "git xxx" this
folder is searched first, and if the command is found it will be
executed as any other "git-xxx".
    For this I attach a very simple patch that implements it. (It
modifies the execv_git_cmd function by adding a new path in the paths
array.)
    Comments? Opinions? Other solutions that I am not aware of?
    (Please note that I am a git user for only a couple of months, and
this is the first time I look over git source code...)
    Thanks,
    Ciprian Craciun.
diff --git a/exec_cmd.c b/exec_cmd.c
index 9b74ed2..9082711 100644
--- a/exec_cmd.c
+++ b/exec_cmd.c
@@ -30,11 +30,32 @@ const char *git_exec_path(void)
 }
 
 
+static const char *git_repo_exec_path(void)
+{
+	static char path_buffer[PATH_MAX + 1];
+	static char *path = NULL;
+	
+	if (!path) {
+		path = path_buffer;
+		path[0] = '\0';
+		if (get_git_dir()) {
+			strncat(path, get_git_dir(), PATH_MAX);
+			strncat(path, "/", PATH_MAX);
+			strncat(path, "bin", PATH_MAX);
+		}
+	}
+	
+	return path;
+}
+
+
 int execv_git_cmd(const char **argv)
 {
 	char git_command[PATH_MAX + 1];
 	int i;
-	const char *paths[] = { current_exec_path,
+	const char *paths[] = {
+				git_repo_exec_path(),
+				current_exec_path,
 				getenv(EXEC_PATH_ENVIRONMENT),
 				builtin_exec_path };
 
Next: Johannes Schindelin
Message 1 of 4 in “Repository specific git commands”
  1. Ciprian Dorin CraciunJan 7, 2008
  2. Johannes SchindelinJan 7, 2008
  3. Ciprian Dorin CraciunJan 7, 2008
  4. Ciprian Dorin CraciunMay 23, 2008

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.