1:- module(
2 ppm_git,
3 [
4 git_add_remote_uri/2, 5 git_checkout/2, 6 git_clone/2, 7 git_create_tag/2, 8 git_current_version/2, 9 git_delete_tag/2, 10 git_fetch/1, 11 git_initial_push/1, 12 git_remote_exists/1, 13 git_remote_uri/2, 14 git_tag/2, 15 git_version/2, 16 git_version_latest/2 17 ]
18).
30:- use_module(library(ansi_term)). 31:- use_module(library(debug)). 32:- use_module(library(git), []). 33
34:- use_module(library(ppm_generic)).
42git_add_remote_uri(Dir, Uri) :-
43 git(Dir, [remote,add,origin,Uri]).
49git_checkout(Dir, tag(Tag)) :- !,
50 git(Dir, [checkout,'-b',Tag,Tag]).
51git_checkout(Dir, version(Version)) :-
52 atom_phrase(version(Version), Tag),
53 git_checkout(Dir, tag(Tag)).
59git_clone(Dir, Uri) :-
60 git(Dir, [clone,Uri]).
66git_create_tag(Dir, Tag) :-
67 git_tag(Dir, Tag), !.
68git_create_tag(Dir, Tag) :-
69 git(Dir, [tag,'-a',Tag,'-m',Tag]),
70 git(Dir, [push,origin,Tag]).
76git_current_version(Dir, Version) :-
77 78 git(Dir, [describe,'--tags'], Codes),
79 phrase(version(Version), Codes, _Rest).
85git_delete_tag(Dir, Tag) :-
86 git(Dir, [tag,'-d',Tag]),
87 atom_concat(':refs/tags/', Tag, Arg),
88 git(Dir, [push,origin,Arg]).
94git_fetch(Dir) :-
95 git(Dir, [fetch]).
101git_initial_push(Dir) :-
102 git(Dir, [push,'-u',origin,master]).
110git_remote_exists(Uri) :-
111 git(['ls-remote',Uri]).
117git_remote_uri(Dir, Uri) :-
118 git(Dir, [config,'--get','remote.origin.url'], Codes),
119 atom_codes(Atom, Codes),
120 atom_concat(Uri, '\n', Atom).
127git_tag(Dir, Tag) :-
128 git(Dir, [tag], Codes),
129 atom_codes(Atom, Codes),
130 atomic_list_concat(Tags, '\n', Atom),
131 ( var(Tag)
132 -> member(Tag, Tags),
133 Tag \== ''
134 ; memberchk(Tag, Tags)
135 ).
142git_version(Dir, Version) :-
143 git_tag(Dir, Tag),
144 atom_phrase(version(Version), Tag).
151git_version_latest(Dir, Version) :-
152 aggregate_all(set(Version), git_version(Dir, Version), Versions),
153 predsort(compare_version, Versions, SortedVersions),
154 last(SortedVersions, Version).
155
156
157
158
159
166git(Args) :-
167 git(., Args).
168
169
170git(Dir, Args) :-
171 git(Dir, Args, _).
172
173
174git(Dir, Args, Output) :-
175 ( debugging(ppm(git))
176 -> atomic_list_concat([git|Args], ' ', Cmd),
177 debug(ppm(git), "~a", [Cmd])
178 ; true
179 ),
180 git:git(Args, [directory(Dir),error(Error),output(Output),status(Status)]),
181 ( Error == []
182 -> debug(ppm(git), "~s", [Output])
183 ; ansi_format([fg(red)], "~s", [Error])
184 ),
185 Status = exit(0)
Prolog Package Manager (PPM): Git support
Debug flag: `
ppm(git)
'.