* lt/rev:
  Make "--parents" logs also be incremental
This commit is contained in:
Junio C Hamano 2006-04-10 15:58:41 -07:00
Родитель 77882f60d9 3381c790e5
Коммит 5910e99775
4 изменённых файлов: 18 добавлений и 18 удалений

Просмотреть файл

@ -59,12 +59,12 @@ enum XML_Status {
#define LOCK_TIME 600 #define LOCK_TIME 600
#define LOCK_REFRESH 30 #define LOCK_REFRESH 30
/* bits #0-4 in revision.h */ /* bits #0-6 in revision.h */
#define LOCAL (1u << 5) #define LOCAL (1u << 7)
#define REMOTE (1u << 6) #define REMOTE (1u << 8)
#define FETCHING (1u << 7) #define FETCHING (1u << 9)
#define PUSHING (1u << 8) #define PUSHING (1u << 10)
/* We allow "recursive" symbolic refs. Only within reason, though */ /* We allow "recursive" symbolic refs. Only within reason, though */
#define MAXDEPTH 5 #define MAXDEPTH 5

Просмотреть файл

@ -7,9 +7,9 @@
#include "tree-walk.h" #include "tree-walk.h"
#include "revision.h" #include "revision.h"
/* bits #0-5 in revision.h */ /* bits #0-6 in revision.h */
#define COUNTED (1u<<6) #define COUNTED (1u<<7)
static const char rev_list_usage[] = static const char rev_list_usage[] =
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n" "git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"

Просмотреть файл

@ -340,6 +340,10 @@ static void add_parents_to_list(struct rev_info *revs, struct commit *commit, st
{ {
struct commit_list *parent = commit->parents; struct commit_list *parent = commit->parents;
if (commit->object.flags & ADDED)
return;
commit->object.flags |= ADDED;
/* /*
* If the commit is uninteresting, don't try to * If the commit is uninteresting, don't try to
* prune parents - we want the maximal uninteresting * prune parents - we want the maximal uninteresting
@ -705,13 +709,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
if (revs->prune_data) { if (revs->prune_data) {
diff_tree_setup_paths(revs->prune_data); diff_tree_setup_paths(revs->prune_data);
revs->prune_fn = try_to_simplify_commit; revs->prune_fn = try_to_simplify_commit;
/*
* If we fix up parent data, we currently cannot
* do that on-the-fly.
*/
if (revs->parents)
revs->limited = 1;
} }
return left; return left;
@ -728,10 +725,12 @@ void prepare_revision_walk(struct rev_info *revs)
revs->topo_getter); revs->topo_getter);
} }
static int rewrite_one(struct commit **pp) static int rewrite_one(struct rev_info *revs, struct commit **pp)
{ {
for (;;) { for (;;) {
struct commit *p = *pp; struct commit *p = *pp;
if (!revs->limited)
add_parents_to_list(revs, p, &revs->commits);
if (p->object.flags & (TREECHANGE | UNINTERESTING)) if (p->object.flags & (TREECHANGE | UNINTERESTING))
return 0; return 0;
if (!p->parents) if (!p->parents)
@ -740,12 +739,12 @@ static int rewrite_one(struct commit **pp)
} }
} }
static void rewrite_parents(struct commit *commit) static void rewrite_parents(struct rev_info *revs, struct commit *commit)
{ {
struct commit_list **pp = &commit->parents; struct commit_list **pp = &commit->parents;
while (*pp) { while (*pp) {
struct commit_list *parent = *pp; struct commit_list *parent = *pp;
if (rewrite_one(&parent->item) < 0) { if (rewrite_one(revs, &parent->item) < 0) {
*pp = parent->next; *pp = parent->next;
continue; continue;
} }
@ -802,7 +801,7 @@ struct commit *get_revision(struct rev_info *revs)
if (!(commit->object.flags & TREECHANGE)) if (!(commit->object.flags & TREECHANGE))
continue; continue;
if (revs->parents) if (revs->parents)
rewrite_parents(commit); rewrite_parents(revs, commit);
} }
commit->object.flags |= SHOWN; commit->object.flags |= SHOWN;
return commit; return commit;

Просмотреть файл

@ -7,6 +7,7 @@
#define SHOWN (1u<<3) #define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */ #define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
#define BOUNDARY (1u<<5) #define BOUNDARY (1u<<5)
#define ADDED (1u<<6) /* Parents already parsed and added? */
struct rev_info; struct rev_info;