aboutsummaryrefslogtreecommitdiff
path: root/git.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-04-11 14:34:53 -0700
committerJunio C Hamano <junkio@cox.net>2006-04-11 14:34:53 -0700
commit4da8cbc234177d6a8cf749d4ef60bd05ec843898 (patch)
treea97b17b67a77e6d9f9b7cdf0aa265594db2ddeb4 /git.c
parentb5b1442ac35706ce1e3daed407dd935f0e9dd796 (diff)
parentc4e05b1a2290c605e68e6dac5e2a580e6d4080b7 (diff)
downloadgit-4da8cbc234177d6a8cf749d4ef60bd05ec843898.tar.xz
Merge branch 'jc/diff' into next
* jc/diff: blame and friends: adjust to multiple pathspec change. git log --full-diff tree-diff: do not assume we use only one pathspec
Diffstat (limited to 'git.c')
-rw-r--r--git.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/git.c b/git.c
index 8776088af3..5cb0d32070 100644
--- a/git.c
+++ b/git.c
@@ -15,8 +15,8 @@
#include "cache.h"
#include "commit.h"
-#include "revision.h"
#include "diff.h"
+#include "revision.h"
#include "log-tree.h"
#ifndef PATH_MAX
@@ -288,7 +288,9 @@ static int cmd_log(int argc, const char **argv, char **envp)
int abbrev_commit = 0;
const char *commit_prefix = "commit ";
struct log_tree_opt opt;
+ int shown = 0;
int do_diff = 0;
+ int full_diff = 0;
init_log_tree_opt(&opt);
argc = setup_revisions(argc, argv, &rev, "HEAD");
@@ -315,6 +317,10 @@ static int cmd_log(int argc, const char **argv, char **envp)
else if (40 < abbrev)
abbrev = 40;
}
+ else if (!strcmp(arg, "--full-diff")) {
+ do_diff = 1;
+ full_diff = 1;
+ }
else {
int cnt = log_tree_opt_parse(&opt, argv+1, argc-1);
if (0 < cnt) {
@@ -328,6 +334,7 @@ static int cmd_log(int argc, const char **argv, char **envp)
argc--; argv++;
}
+
if (do_diff) {
opt.diffopt.abbrev = abbrev;
opt.verbose_header = 0;
@@ -339,12 +346,16 @@ static int cmd_log(int argc, const char **argv, char **envp)
opt.diffopt.output_format = DIFF_FORMAT_PATCH;
if (opt.diffopt.output_format == DIFF_FORMAT_PATCH)
opt.diffopt.recursive = 1;
+ if (!full_diff && rev.prune_data)
+ diff_tree_setup_paths(rev.prune_data, &opt.diffopt);
diff_setup_done(&opt.diffopt);
}
prepare_revision_walk(&rev);
setup_pager();
while ((commit = get_revision(&rev)) != NULL) {
+ if (commit_format != CMIT_FMT_ONELINE && shown)
+ putchar('\n');
fputs(commit_prefix, stdout);
if (abbrev_commit && abbrev)
fputs(find_unique_abbrev(commit->object.sha1, abbrev),
@@ -377,9 +388,9 @@ static int cmd_log(int argc, const char **argv, char **envp)
pretty_print_commit(commit_format, commit, ~0, buf,
LOGSIZE, abbrev);
printf("%s\n", buf);
-
if (do_diff)
log_tree_commit(&opt, commit);
+ shown = 1;
}
free(buf);
return 0;