Merge branch 'tr/line-log'
* tr/line-log: git-log(1): remove --full-line-diff description line-log: fix documentation formatting log -L: improve comments in process_all_files() log -L: store the path instead of a diff_filespec log -L: test merge of parallel modify/rename t4211: pass -M to 'git log -M -L...' test log -L: fix overlapping input ranges log -L: check range set invariants when we look it up Speed up log -L... -M log -L: :pattern:file syntax to find by funcname Implement line-history search (git log -L) Export rewrite_parents() for 'log -L' Refactor parse_loc
This commit is contained in:
22
revision.c
22
revision.c
@ -13,6 +13,7 @@
|
||||
#include "decorate.h"
|
||||
#include "log-tree.h"
|
||||
#include "string-list.h"
|
||||
#include "line-log.h"
|
||||
#include "mailmap.h"
|
||||
|
||||
volatile show_early_output_fn_t show_early_output;
|
||||
@ -1914,6 +1915,12 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s
|
||||
if (revs->combine_merges)
|
||||
revs->ignore_merges = 0;
|
||||
revs->diffopt.abbrev = revs->abbrev;
|
||||
|
||||
if (revs->line_level_traverse) {
|
||||
revs->limited = 1;
|
||||
revs->topo_order = 1;
|
||||
}
|
||||
|
||||
diff_setup_done(&revs->diffopt);
|
||||
|
||||
grep_commit_pattern_type(GREP_PATTERN_TYPE_UNSPECIFIED,
|
||||
@ -2185,6 +2192,8 @@ int prepare_revision_walk(struct rev_info *revs)
|
||||
return -1;
|
||||
if (revs->topo_order)
|
||||
sort_in_topological_order(&revs->commits, revs->lifo);
|
||||
if (revs->line_level_traverse)
|
||||
line_log_filter(revs);
|
||||
if (revs->simplify_merges)
|
||||
simplify_merges(revs);
|
||||
if (revs->children.name)
|
||||
@ -2192,12 +2201,6 @@ int prepare_revision_walk(struct rev_info *revs)
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum rewrite_result {
|
||||
rewrite_one_ok,
|
||||
rewrite_one_noparents,
|
||||
rewrite_one_error
|
||||
};
|
||||
|
||||
static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp)
|
||||
{
|
||||
struct commit_list *cache = NULL;
|
||||
@ -2219,12 +2222,13 @@ static enum rewrite_result rewrite_one(struct rev_info *revs, struct commit **pp
|
||||
}
|
||||
}
|
||||
|
||||
static int rewrite_parents(struct rev_info *revs, struct commit *commit)
|
||||
int rewrite_parents(struct rev_info *revs, struct commit *commit,
|
||||
rewrite_parent_fn_t rewrite_parent)
|
||||
{
|
||||
struct commit_list **pp = &commit->parents;
|
||||
while (*pp) {
|
||||
struct commit_list *parent = *pp;
|
||||
switch (rewrite_one(revs, &parent->item)) {
|
||||
switch (rewrite_parent(revs, &parent->item)) {
|
||||
case rewrite_one_ok:
|
||||
break;
|
||||
case rewrite_one_noparents:
|
||||
@ -2390,7 +2394,7 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
|
||||
if (action == commit_show &&
|
||||
!revs->show_all &&
|
||||
revs->prune && revs->dense && want_ancestry(revs)) {
|
||||
if (rewrite_parents(revs, commit) < 0)
|
||||
if (rewrite_parents(revs, commit, rewrite_one) < 0)
|
||||
return commit_error;
|
||||
}
|
||||
return action;
|
||||
|
Reference in New Issue
Block a user