[PATCH] allow alias expansion without a git directory

Subsystems: the rest

DORMANTno replies

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH] allow alias expansion without a git directory

From: Matthias Lederhofer <hidden>
Date: 2016-06-15 22:42:35

Signed-off-by: Matthias Lederhofer <redacted>
---
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

Re: [PATCH] allow alias expansion without a git directory

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:35

Hi,

On Sun, 30 Jul 2006, Matthias Lederhofer wrote:
quoted hunk
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;
+		}
Funny. Yesterday, I looked through "git diff next", and decided to sync 
this part, i.e. undo the change you just proposed...

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help