зеркало из https://github.com/microsoft/git.git
rev-list --boundary: show boundary commits even when limited otherwise.
The boundary commits are shown for UI like gitk to draw them as soon as topo-order sorting allows, and should not be omitted by get_revision() filtering logic. As long as their immediate child commits are shown, we should not filter them out. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
e6bfaf3e33
Коммит
1b65a5aa44
10
http-push.c
10
http-push.c
|
@ -60,12 +60,12 @@ enum XML_Status {
|
|||
#define LOCK_TIME 600
|
||||
#define LOCK_REFRESH 30
|
||||
|
||||
/* bits #0-6 in revision.h */
|
||||
/* bits #0-15 in revision.h */
|
||||
|
||||
#define LOCAL (1u << 7)
|
||||
#define REMOTE (1u << 8)
|
||||
#define FETCHING (1u << 9)
|
||||
#define PUSHING (1u << 10)
|
||||
#define LOCAL (1u<<16)
|
||||
#define REMOTE (1u<<17)
|
||||
#define FETCHING (1u<<18)
|
||||
#define PUSHING (1u<<19)
|
||||
|
||||
/* We allow "recursive" symbolic refs. Only within reason, though */
|
||||
#define MAXDEPTH 5
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
#include "diff.h"
|
||||
#include "revision.h"
|
||||
|
||||
/* bits #0-6 in revision.h */
|
||||
/* bits #0-15 in revision.h */
|
||||
|
||||
#define COUNTED (1u<<7)
|
||||
#define COUNTED (1u<<16)
|
||||
|
||||
static const char rev_list_usage[] =
|
||||
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
|
||||
|
|
29
revision.c
29
revision.c
|
@ -750,6 +750,17 @@ static void rewrite_parents(struct rev_info *revs, struct commit *commit)
|
|||
}
|
||||
}
|
||||
|
||||
static void mark_boundary_to_show(struct commit *commit)
|
||||
{
|
||||
struct commit_list *p = commit->parents;
|
||||
while (p) {
|
||||
commit = p->item;
|
||||
p = p->next;
|
||||
if (commit->object.flags & BOUNDARY)
|
||||
commit->object.flags |= BOUNDARY_SHOW;
|
||||
}
|
||||
}
|
||||
|
||||
struct commit *get_revision(struct rev_info *revs)
|
||||
{
|
||||
struct commit_list *list = revs->commits;
|
||||
|
@ -787,8 +798,20 @@ struct commit *get_revision(struct rev_info *revs)
|
|||
}
|
||||
if (commit->object.flags & SHOWN)
|
||||
continue;
|
||||
if (!(commit->object.flags & BOUNDARY) &&
|
||||
(commit->object.flags & UNINTERESTING))
|
||||
|
||||
/* We want to show boundary commits only when their
|
||||
* children are shown. When path-limiter is in effect,
|
||||
* rewrite_parents() drops some commits from getting shown,
|
||||
* and there is no point showing boundary parents that
|
||||
* are not shown. After rewrite_parents() rewrites the
|
||||
* parents of a commit that is shown, we mark the boundary
|
||||
* parents with BOUNDARY_SHOW.
|
||||
*/
|
||||
if (commit->object.flags & BOUNDARY_SHOW) {
|
||||
commit->object.flags |= SHOWN;
|
||||
return commit;
|
||||
}
|
||||
if (commit->object.flags & UNINTERESTING)
|
||||
continue;
|
||||
if (revs->min_age != -1 && (commit->date > revs->min_age))
|
||||
continue;
|
||||
|
@ -801,6 +824,8 @@ struct commit *get_revision(struct rev_info *revs)
|
|||
if (revs->parents)
|
||||
rewrite_parents(revs, commit);
|
||||
}
|
||||
if (revs->boundary)
|
||||
mark_boundary_to_show(commit);
|
||||
commit->object.flags |= SHOWN;
|
||||
return commit;
|
||||
} while (revs->commits);
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
#define SHOWN (1u<<3)
|
||||
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
|
||||
#define BOUNDARY (1u<<5)
|
||||
#define ADDED (1u<<6) /* Parents already parsed and added? */
|
||||
#define BOUNDARY_SHOW (1u<<6)
|
||||
#define ADDED (1u<<7) /* Parents already parsed and added? */
|
||||
|
||||
struct rev_info;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче