34
35:- module(doc_changes,
36 [ doc_introduced/2, 37 doc_introduced/3, 38 doc_added/2, 39 doc_last_changed/2, 40 doc_last_changed/3, 41 doc_last_changed/4, 42 doc_history/2 43 ]). 44:- autoload(library(pairs), [pairs_values/2]). 45:- autoload(library(aggregate), [aggregate_all/3]). 46:- autoload(library(solution_sequences), [distinct/2]). 47
48:- if(exists_source(library(pldoc/changelog_events))). 49:- autoload(library(pldoc/changelog_events), [changelog_event/7]). 50:- else. 52:- multifile changelog_event/7. 53:- endif.
62doc_introduced(Indicator, Version) :-
63 changelog_event(Indicator, introduced, Version, _, _, _, _).
64
65doc_introduced(Indicator, Version, event(introduced, Version, Hash, Subject, Repo)) :-
66 changelog_event(Indicator, introduced, Version, _, Hash, Subject, Repo).
73doc_added(Pred, Version) :-
74 changelog_event(Pred, added, Version, _, _, _, _).
85doc_last_changed(Pred, Version) :-
86 doc_last_changed(Pred, Version, _).
87
88doc_last_changed(Pred, Version, Type) :-
89 nonvar(Pred),
90 !,
91 last_change(Pred, Version, Type).
92doc_last_changed(Pred, Version, Type) :-
93 distinct(Pred, changed_predicate(Pred)),
94 last_change(Pred, Version, Type).
95
96doc_last_changed(Pred, Version, Type,
97 event(Type, Version, Hash, Subject, Repo)) :-
98 nonvar(Pred),
99 !,
100 last_change_full(Pred, Version, Type, Hash, Subject, Repo).
101doc_last_changed(Pred, Version, Type, Event) :-
102 distinct(Pred, changed_predicate(Pred)),
103 doc_last_changed(Pred, Version, Type, Event).
104
105last_change(Pred, Version, Type) :-
106 last_change_full(Pred, Version, Type, _, _, _).
107
108last_change_full(Pred, Version, Type, Hash, Subject, Repo) :-
109 aggregate_all(max(Date, t(V, T, H, S, R)),
110 ( changelog_event(Pred, T, V, Date, H, S, R),
111 change_type(T),
112 (var(Type) -> true ; T == Type)
113 ),
114 max(_, t(Version, Type, Hash, Subject, Repo))).
115
116change_type(added).
117change_type(enhanced).
118change_type(modified).
119change_type(fixed).
120
121changed_predicate(Pred) :-
122 changelog_event(Pred, T, _V, _D, _H, _S, _R),
123 change_type(T).
132doc_history(Pred, Events) :-
133 ( ground(Pred)
134 -> true
135 ; distinct(Pred, changelog_event(Pred,_T,_V,_D,_H,_S,_R))
136 ),
137 findall(Date-event(Type, Version, Hash, Subject, Repo),
138 changelog_event(Pred, Type, Version, Date, Hash, Subject, Repo),
139 Pairs),
140 keysort(Pairs, Sorted),
141 pairs_values(Sorted, Events)