cpack_repository/commit
ADDED: Rebuild all RDF data from the GIT repositories.
author | Jan Wielemaker |
---|---|
Fri Dec 3 15:49:32 2010 +0100 | |
committer | Jan Wielemaker |
Fri Dec 3 15:49:32 2010 +0100 | |
commit | d24cc82bbe236808c23e72fb15846e455b32ec4b |
tree | 73712f023f8c1783844f8ae20894770044debedb |
parent | 54e886c8db3198374939f9b87f84aaba597923c5 |
Diff style: patch stat
diff --git a/applications/cpack_submit.pl b/applications/cpack_submit.pl index 026c935..026edae 100644 --- a/applications/cpack_submit.pl +++ b/applications/cpack_submit.pl @@ -45,16 +45,17 @@ http:location(cpack_api, api(cpack), []). -:- http_handler(cpack(submit), cpack_submit_form, []). -:- http_handler(cpack(clone_server), cpack_clone_server_form, []). -:- http_handler(cpack(list_packages), cpack_list_packages, []). -:- http_handler(cpack(my_packages), cpack_my_packages, []). -:- http_handler(cpack(update_my_packages), cpack_update_my_packages, []). -:- http_handler(cpack_api(submit), cpack_submit, []). -:- http_handler(cpack_api(resubmit), cpack_resubmit, []). -:- http_handler(cpack_api(clone_server), cpack_clone_server, []). -:- http_handler(cpack(show_file), cpack_show_file, []). -:- http_handler(cpack(git_show), git_show, []). +:- http_handler(cpack(submit), cpack_submit_form, []). +:- http_handler(cpack(clone_server), cpack_clone_server_form, []). +:- http_handler(cpack(list_packages), cpack_list_packages, []). +:- http_handler(cpack(my_packages), cpack_my_packages, []). +:- http_handler(cpack(update_my_packages), cpack_update_my_packages, []). +:- http_handler(cpack_api(submit), cpack_submit, []). +:- http_handler(cpack_api(resubmit), cpack_resubmit, []). +:- http_handler(cpack_api(clone_server), cpack_clone_server, []). +:- http_handler(cpack_api(refresh_metadata), cpack_refresh_metadata_api, []). +:- http_handler(cpack(show_file), cpack_show_file, []). +:- http_handler(cpack(git_show), git_show, []). /** <module> User interaction to manage CPACKS */ @@ -296,3 +297,15 @@ cpack_clone_server(Request) :- user_property(User, url(UserURL)), call_showing_messages(cpack_clone_server(UserURL, ServerURL, []), []). + + +%% cpack_refresh_metadata_api(+Request) +% +% API to reload all metadata. + +cpack_refresh_metadata_api(_Request) :- + authorized(write(cpack, refresh_metadata)), + call_showing_messages(cpack_refresh_metadata, + []). + + diff --git a/config-available/cpack_repository.pl b/config-available/cpack_repository.pl index e2ab2bc..0d8f653 100644 --- a/config-available/cpack_repository.pl +++ b/config-available/cpack_repository.pl @@ -18,10 +18,11 @@ http:location(cpack, root(cpack), []). cliopatria:menu_popup_order(cpack, 250). cliopatria:menu_label(cpack, 'CPACK'). -cliopatria:menu_item(100=cpack/cpack_list_packages, 'List packs'). -cliopatria:menu_item(200=cpack/cpack_submit_form, 'Submit pack'). -cliopatria:menu_item(300=cpack/cpack_clone_server_form, 'Clone server'). -cliopatria:menu_item(275=current_user/cpack_my_packages, 'My CPACKs') :- +cliopatria:menu_item(100=cpack/cpack_list_packages, 'List packs'). +cliopatria:menu_item(200=cpack/cpack_submit_form, 'Submit pack'). +cliopatria:menu_item(300=cpack/cpack_clone_server_form, 'Clone server'). +cliopatria:menu_item(400=cpack/cpack_refresh_metadata_api, 'Refresh metadata'). +cliopatria:menu_item(275=current_user/cpack_my_packages, 'My CPACKs') :- logged_on(_). :- rdf_attach_library(cliopatria(rdf)). diff --git a/lib/cpack/repository.pl b/lib/cpack/repository.pl index cb911a3..7fc6c9b 100644 --- a/lib/cpack/repository.pl +++ b/lib/cpack/repository.pl @@ -31,6 +31,8 @@ :- module(cpack_repository, [ cpack_add_repository/3, % +User, +GitRepo, +Options cpack_update_package/2, % +User, +Package + cpack_refresh_metadata/0, + cpack_refresh_metadata/1, % +MirrorGit cpack_our_mirror/2, % +Package, -MirrorDir cpack_clone_server/3, % +User, +Server, +Options) cpack_uri/3, % +Type, +Object, -URI @@ -155,7 +157,7 @@ update_metadata(BareGitPath, Graph, Options) :- catch(load_meta_data(BareGitPath, Graph, Options), E, print_message(error, E)), update_decription(BareGitPath, Graph), - add_timestamp(Graph), + add_timestamp(Graph, Options), ( option(cloned(ClonedURL), Options) -> option(branch(Branch), Options, master), rdf_bnode(Cloned), @@ -179,7 +181,10 @@ update_metadata(BareGitPath, Graph, Options) :- foaf_merge(_), xref_cpack(Graph). -add_timestamp(Graph) :- +add_timestamp(Graph, Options) :- + option(submitted_date(DateTime), Options), !, + rdf_assert(Graph, cpack:submittedDate, DateTime, Graph). +add_timestamp(Graph, _Options) :- get_time(Now), format_time(atom(DateTime), '%FT%T%Oz', Now), rdf_assert(Graph, cpack:submittedDate, @@ -311,6 +316,55 @@ rdf_load_git_stream(Graph, Format, In) :- forall(member(rdf(S,P,O), RDF), rdf_assert(S,P,O,Graph)). + + /******************************* + * UPDATE FROM MIRROR * + *******************************/ + +%% cpack_refresh_metadata(+BareGitPath) is det. +% +% Regenerate the metadata associated with BareGitPath from the +% plain (mirrored) git repository. + +cpack_refresh_metadata(BareGitPath) :- + file_base_name(BareGitPath, BareGit), + file_name_extension(PackageName, git, BareGit), + package_graph(PackageName, Graph), + git_remote_url(origin, Origin, [directory(BareGitPath)]), + git_default_branch(DefBranch, [directory(BareGitPath)]), + ( rdf_has(Graph, cpack:submittedDate, Date) + -> Extra = [submitted_date(Date)] + ; Extra = [] + ), + update_metadata(BareGitPath, Graph, + [ cloned(Origin), + branch(DefBranch) + | Extra + ]). + +%% cpack_refresh_metadata +% +% Rebuild all (xref) metadata for all packages from scratch. This +% is intended to deal with changes to the metadata formats, lost +% GIT mirrors, etc. + +cpack_refresh_metadata :- + setting(cpack:mirrors, MirrorDir), + directory_file_path(MirrorDir, '*.git', Pattern), + expand_file_name(Pattern, BareGits), + clear_xref_graphs, + maplist(cpack_refresh_metadata, BareGits). + +clear_xref_graphs :- + clear_xref_graph(prolog), + clear_xref_graph(cliopatria), + clear_xref_graph('file-references'). + +clear_xref_graph(Name) :- + cpack_uri(graph, Name, URI), + rdf_retractall(_,_,_,URI). + + /******************************* * CLONE A SERVER * *******************************/