2 * Copyright (C) 2009, 2011, 2016 J. Ali Harlow <ali@juiblex.co.uk>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 #include "plover/plover.h"
25 #include "whelk/whelk.h"
27 LUALIB_API int luaopen_posix(lua_State *L);
29 void update(const char *argv0)
31 char *yum_uri,*local_database;
32 char *active_database=NULL,*alternate_database=NULL;
33 gchar *s,*prefix,*distribution,*vendor_prefix;
37 s=plover_get_program(argv0);
38 yum_uri=razor_path_to_uri(s);
40 s=g_strconcat(yum_uri,"/repodata/comps.xml",NULL);
41 comps=plover_comps_new_from_uri(s,&error);
43 if (g_error_matches(error,PLOVER_RAZOR_ERROR,
44 RAZOR_GENERAL_ERROR_UNSUPPORTED_ARCHIVE))
46 g_clear_error(&error);
48 s=plover_get_program_directory(argv0);
49 yum_uri=razor_path_to_uri(s);
51 s=g_strconcat(yum_uri,"/repodata/comps.xml",NULL);
52 comps=plover_comps_new_from_uri(s,&error);
56 fprintf(stderr,"%s\n",error->message);
60 prefix=plover_comps_get_default_prefix(comps);
63 s=g_strconcat(prefix,"/var/lib/razor",NULL);
64 local_database=razor_path_to_uri(s);
69 switch(comps->database)
71 case COMPS_DATABASE_DISTRIBUTION_LOCAL:
72 active_database=local_database;
74 case COMPS_DATABASE_GLOBAL:
75 alternate_database=local_database;
80 distribution=g_strdup(comps->distribution);
81 plover_comps_set_distribution(comps,NULL);
82 vendor_prefix=plover_comps_get_default_prefix(comps);
83 plover_comps_set_distribution(comps,distribution);
85 razor_set_database_uri(alternate_database);
86 if (plover_installed_files_match_prefix(vendor_prefix)==1)
88 printf("There is an existing installation under %s\n"
89 "which is not compatible with this distribution. In order\n"
90 "to continue, the existing installation must be uninstalled.\n"
91 "Do you want to remove all packages in the existing installion? ",
94 if (ch!='y' && ch!='Y' && ch!=EOF && ch!='\n')
96 while(ch!='\n' && ch!=EOF)
98 if (plover_remove(NULL,&error))
100 fprintf(stderr,"%s\n",error->message);
105 g_free(vendor_prefix);
107 razor_set_database_uri(active_database);
108 if (prefix && !plover_installed_files_match_prefix(prefix))
110 printf("The existing installation is not under %s\n"
111 "In order to continue, all the existing packages must be removed.\n"
112 "Do you want to remove all existing packages? ",prefix);
114 if (ch!='y' && ch!='Y' && ch!=EOF && ch!='\n')
116 while(ch!='\n' && ch!=EOF)
118 if (plover_remove(NULL,&error))
120 fprintf(stderr,"%s\n",error->message);
125 free(local_database);
126 plover_comps_free(comps);
127 if (!plover_update_uri(yum_uri,prefix,NULL,&error))
129 fprintf(stderr,"%s\n",error->message);
137 int main(int argc,char **argv)
139 plover_exception_handler_init();
140 razor_set_lua_loader("posix",(void (*)())luaopen_posix);
141 razor_set_lua_loader("whelk",(void (*)())luaopen_whelk);