[PATCH] allow alias expansion without a git directory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Matthias Lederhofer <matled@xxxxxxx>
---
With this patch
[alias]
    init = init-db --template=/path/to/template
is usable.
The change in setup_git_directory_gently is a bug which did not cause
any problems yet (afaict): setup_git_directory_gently did die even
though nongit_ok was not NULL.  Without this GIT_DIR=.foo git init
will die.
---
 git.c   |   76 ++++++++++++++++++++++++++++++---------------------------------
 setup.c |    4 +++
 2 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/git.c b/git.c
index 452180e..7321d6c 100644
--- a/git.c
+++ b/git.c
@@ -156,52 +156,48 @@ static int handle_alias(int *argcp, cons
 {
 	int nongit = 0, ret = 0, saved_errno = errno;
 	const char *subdir;
+	int count, option_count;
+	const char** new_argv;
 
 	subdir = setup_git_directory_gently(&nongit);
-	if (!nongit) {
-		int count, option_count;
-		const char** new_argv;
-
-		alias_command = (*argv)[0];
-		git_config(git_alias_config);
-		if (alias_string) {
-
-			count = split_cmdline(alias_string, &new_argv);
-			option_count = handle_options(&new_argv, &count);
-			memmove(new_argv - option_count, new_argv,
-					count * sizeof(char *));
-			new_argv -= option_count;
-
-			if (count < 1)
-				die("empty alias for %s", alias_command);
-
-			if (!strcmp(alias_command, new_argv[0]))
-				die("recursive alias: %s", alias_command);
-
-			if (getenv("GIT_TRACE")) {
-				int i;
-				fprintf(stderr, "trace: alias expansion: %s =>",
-					alias_command);
-				for (i = 0; i < count; ++i) {
-					fputc(' ', stderr);
-					sq_quote_print(stderr, new_argv[i]);
-				}
-				fputc('\n', stderr);
-				fflush(stderr);
-			}
 
-			new_argv = realloc(new_argv, sizeof(char*) *
-					   (count + *argcp + 1));
-			/* insert after command name */
-			memcpy(new_argv + count, *argv + 1,
-			       sizeof(char*) * *argcp);
-			new_argv[count+*argcp] = NULL;
+	alias_command = (*argv)[0];
+	git_config(git_alias_config);
+	if (alias_string) {
+		count = split_cmdline(alias_string, &new_argv);
+		option_count = handle_options(&new_argv, &count);
+		memmove(new_argv - option_count, new_argv,
+				count * sizeof(char *));
+		new_argv -= option_count;
+
+		if (count < 1)
+			die("empty alias for %s", alias_command);
 
-			*argv = new_argv;
-			*argcp += count - 1;
+		if (!strcmp(alias_command, new_argv[0]))
+			die("recursive alias: %s", alias_command);
 
-			ret = 1;
+		if (getenv("GIT_TRACE")) {
+			int i;
+			fprintf(stderr, "trace: alias expansion: %s =>",
+				alias_command);
+			for (i = 0; i < count; ++i) {
+				fputc(' ', stderr);
+				sq_quote_print(stderr, new_argv[i]);
+			}
+			fputc('\n', stderr);
+			fflush(stderr);
 		}
+
+		new_argv = realloc(new_argv, sizeof(char*) *
+				   (count + *argcp + 1));
+		/* insert after command name */
+		memcpy(new_argv + count, *argv + 1, sizeof(char*) * *argcp);
+		new_argv[count+*argcp] = NULL;
+
+		*argv = new_argv;
+		*argcp += count - 1;
+
+		ret = 1;
 	}
 
 	if (subdir)
diff --git a/setup.c b/setup.c
index 4612f11..358e139 100644
--- a/setup.c
+++ b/setup.c
@@ -184,6 +184,10 @@ const char *setup_git_directory_gently(i
 		}
 		return NULL;
 	bad_dir_environ:
+		if (!nongit_ok) {
+			*nongit_ok = 1;
+			return NULL;
+		}
 		path[len] = 0;
 		die("Not a git repository: '%s'", path);
 	}
-- 
1.4.2.rc2.g91b7

-
: 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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]