summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6d46a23)
raw | patch | inline | side by side (parent: 6d46a23)
author | Junio C Hamano <junkio@cox.net> | |
Mon, 10 Apr 2006 23:39:11 +0000 (16:39 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Mon, 10 Apr 2006 23:45:19 +0000 (16:45 -0700) |
The way tree-diff was set up assumed we would use only one set
of pathspec during the entire life of the program. Move the
pathspec related static variables out to diff_options structure
so that we can filter commits with one set of paths while show
the actual diffs using different set of paths.
I suspect this breaks blame.c, and makes "git log paths..." to
default to the --full-diff, the latter of which is dealt with
the next commit.
Signed-off-by: Junio C Hamano <junkio@cox.net>
of pathspec during the entire life of the program. Move the
pathspec related static variables out to diff_options structure
so that we can filter commits with one set of paths while show
the actual diffs using different set of paths.
I suspect this breaks blame.c, and makes "git log paths..." to
default to the --full-diff, the latter of which is dealt with
the next commit.
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff-tree.c | patch | blob | history | |
diff.h | patch | blob | history | |
revision.c | patch | blob | history | |
tree-diff.c | patch | blob | history |
diff --git a/diff-tree.c b/diff-tree.c
index 2a088d11cfb69e21c8014c0c5d4a992ca1585c6c..2b79dd0a68c30343d74e3e82c056fef6a355e82e 100644 (file)
--- a/diff-tree.c
+++ b/diff-tree.c
if (opt->diffopt.output_format == DIFF_FORMAT_PATCH)
opt->diffopt.recursive = 1;
- diff_tree_setup_paths(get_pathspec(prefix, argv));
+ diff_tree_setup_paths(get_pathspec(prefix, argv), opt);
diff_setup_done(&opt->diffopt);
switch (nr_sha1) {
index a02ef28201814e26f685509607dd6fef31298181..cc7cc627c88d135c3f8d814449813e73c1ea3430 100644 (file)
--- a/diff.h
+++ b/diff.h
int setup;
int abbrev;
+ int nr_paths;
+ const char **paths;
+ int *pathlens;
change_fn_t change;
add_remove_fn_t add_remove;
};
-extern void diff_tree_setup_paths(const char **paths);
+extern void diff_tree_setup_paths(const char **paths, struct diff_options *);
+extern void diff_tree_release_paths(struct diff_options *);
extern int diff_tree(struct tree_desc *t1, struct tree_desc *t2,
const char *base, struct diff_options *opt);
extern int diff_tree_sha1(const unsigned char *old, const unsigned char *new,
diff --git a/revision.c b/revision.c
index fe265623817c7c6b5b4c1af399f4522a75fdaf30..634f9a5ccb9b7a21571cb37ce4bad3ae80d4d436 100644 (file)
--- a/revision.c
+++ b/revision.c
@@ -707,7 +707,7 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
revs->limited = 1;
if (revs->prune_data) {
- diff_tree_setup_paths(revs->prune_data);
+ diff_tree_setup_paths(revs->prune_data, &diff_opt);
revs->prune_fn = try_to_simplify_commit;
}
diff --git a/tree-diff.c b/tree-diff.c
index 701fbba65c2d718a2cdff170a6be6d9993ad27d7..1cdf8aa90850441d60553281a1928047563fe8a6 100644 (file)
--- a/tree-diff.c
+++ b/tree-diff.c
#include "diff.h"
#include "tree.h"
-// What paths are we interested in?
-static int nr_paths = 0;
-static const char **paths = NULL;
-static int *pathlens = NULL;
-
static char *malloc_base(const char *base, const char *path, int pathlen)
{
int baselen = strlen(base);
return 0;
}
-static int interesting(struct tree_desc *desc, const char *base)
+static int interesting(struct tree_desc *desc, const char *base, struct diff_options *opt)
{
const char *path;
unsigned mode;
int i;
int baselen, pathlen;
- if (!nr_paths)
+ if (!opt->nr_paths)
return 1;
(void)tree_entry_extract(desc, &path, &mode);
pathlen = strlen(path);
baselen = strlen(base);
- for (i=0; i < nr_paths; i++) {
- const char *match = paths[i];
- int matchlen = pathlens[i];
+ for (i=0; i < opt->nr_paths; i++) {
+ const char *match = opt->paths[i];
+ int matchlen = opt->pathlens[i];
if (baselen >= matchlen) {
/* If it doesn't match, move along... */
static void show_tree(struct diff_options *opt, const char *prefix, struct tree_desc *desc, const char *base)
{
while (desc->size) {
- if (interesting(desc, base))
+ if (interesting(desc, base, opt))
show_entry(opt, prefix, desc, base);
update_tree_entry(desc);
}
@@ -167,11 +162,11 @@ static int show_entry(struct diff_options *opt, const char *prefix, struct tree_
int diff_tree(struct tree_desc *t1, struct tree_desc *t2, const char *base, struct diff_options *opt)
{
while (t1->size | t2->size) {
- if (nr_paths && t1->size && !interesting(t1, base)) {
+ if (opt->nr_paths && t1->size && !interesting(t1, base, opt)) {
update_tree_entry(t1);
continue;
}
- if (nr_paths && t2->size && !interesting(t2, base)) {
+ if (opt->nr_paths && t2->size && !interesting(t2, base, opt)) {
update_tree_entry(t2);
continue;
}
return i;
}
-void diff_tree_setup_paths(const char **p)
+void diff_tree_release_paths(struct diff_options *opt)
{
+ free(opt->pathlens);
+}
+
+void diff_tree_setup_paths(const char **p, struct diff_options *opt)
+{
+ opt->nr_paths = 0;
+ opt->pathlens = NULL;
+ opt->paths = NULL;
+
if (p) {
int i;
- paths = p;
- nr_paths = count_paths(paths);
- if (nr_paths == 0) {
- pathlens = NULL;
+ opt->paths = p;
+ opt->nr_paths = count_paths(p);
+ if (opt->nr_paths == 0) {
+ opt->pathlens = NULL;
return;
}
- pathlens = xmalloc(nr_paths * sizeof(int));
- for (i=0; i<nr_paths; i++)
- pathlens[i] = strlen(paths[i]);
+ opt->pathlens = xmalloc(opt->nr_paths * sizeof(int));
+ for (i=0; i < opt->nr_paths; i++)
+ opt->pathlens[i] = strlen(p[i]);
}
}