threads / patch / 27433

patchOnly use core 'git diff' if both paths are within the repo.

Subject: [PATCH] Only use core 'git diff' if both paths are within the repo.

## tl;dr

One message between May 23, 2011 and May 23, 2011. Diffs are folded; open one to read it.

replies: 0people: 1as markdown or json

Anthony Foiani· May 23, 2011, 04:44 UTC · lore

The core 'git diff' engine can only handle pathspecs that are within a given repo. Make sure that we don't invoke it unless both pathspec values are in the repo.

Signed-off-by: Anthony Foiani <anthony.foiani@gmail.com>
---
 diff-no-index.c |   39 ++++++++++++---------------------------
 1 files changed, 12 insertions(+), 27 deletions(-)
Show changes to diff-no-index.c +12 −27
diff --git a/diff-no-index.c b/diff-no-index.c
index 3172788..b651f6d 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -227,43 +227,28 @@ void diff_no_index(struct rev_info *revs,
 	/* If --no-index wasn't specified explicitly, check to see if
 	 * we need to force it. */
 	if (!no_index) {
-
-		/* The first pathspec is the "left hand side" */
-		const char *lhs = (n_paths >= 1) ? argv[i] : NULL;
-		const int lhs_in_repo = lhs && path_in_repo(lhs);
-
-		/* And the second is the "right hand side" */
-		const char *rhs = (n_paths >= 2) ? argv[i+1] : NULL;
-		const int rhs_in_repo = rhs && path_in_repo(rhs);
-
-		int force_no_index = 0;
-
 		if (nongit) {
 			warning("'git diff' outside a repo, forcing --no-index");
-			force_no_index = 1;
 		}
 		else {
-			if (lhs_in_repo || rhs_in_repo)
-				return; /* Normal git diff, let core handle it. */
-
-			const int lhs_untracked = (lhs && !lhs_in_repo);
-			const int rhs_untracked = (rhs && !rhs_in_repo);
+			/* lhs = "left hand side", rhs = "right hand side" */
+			const char *lhs = (n_paths >= 1) ? argv[i] : NULL;
+			const char *rhs = (n_paths >= 2) ? argv[i+1] : NULL;
+			const int lhs_tracked = lhs && path_in_repo(lhs);
+			const int rhs_tracked = rhs && path_in_repo(rhs);
 
-			if (lhs_untracked && rhs_untracked)
-				warning("neither '%s' nor '%s' are tracked,"
-					" forcing --no-index", lhs, rhs );
-			else if (lhs_untracked)
+			if (lhs_tracked && rhs_tracked)
+				return; /* Normal git diff, let core handle it. */
+			else if (!lhs_tracked)
 				warning("'%s' is not tracked,"
 					" forcing --no-index", lhs );
-			else if (rhs_untracked)
+			else if (!rhs_tracked)
 				warning("'%s' is not tracked,"
 					" forcing --no-index", rhs );
-
-			force_no_index = lhs_untracked || rhs_untracked;
+			else
+				warning("neither '%s' nor '%s' are tracked,"
+					" forcing --no-index", lhs, rhs );
 		}
-
-		if (!force_no_index) /* Impossible? */
-			die("--no-index not set and not forced");
 	}
 
 	if (n_paths != 2) {
-- 
1.7.4.4

← back to recent threads