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@xxxxxxxxx> --- diff-no-index.c | 39 ++++++++++++--------------------------- 1 files changed, 12 insertions(+), 27 deletions(-) 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 -- To unsubscribe from this list: 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