Branch data Line data Source code
1 : : /* 2 : : * dpkg - main program for package management 3 : : * update.c - options which update the ‘available’ database 4 : : * 5 : : * Copyright © 1995 Ian Jackson <ijackson@chiark.greenend.org.uk> 6 : : * 7 : : * This is free software; you can redistribute it and/or modify 8 : : * it under the terms of the GNU General Public License as published by 9 : : * the Free Software Foundation; either version 2 of the License, or 10 : : * (at your option) any later version. 11 : : * 12 : : * This is distributed in the hope that it will be useful, 13 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : : * GNU General Public License for more details. 16 : : * 17 : : * You should have received a copy of the GNU General Public License 18 : : * along with this program. If not, see <https://www.gnu.org/licenses/>. 19 : : */ 20 : : 21 : : #include <config.h> 22 : : #include <compat.h> 23 : : 24 : : #include <errno.h> 25 : : #include <string.h> 26 : : #include <unistd.h> 27 : : #include <stdlib.h> 28 : : #include <stdio.h> 29 : : 30 : : #include <dpkg/i18n.h> 31 : : #include <dpkg/dpkg.h> 32 : : #include <dpkg/dpkg-db.h> 33 : : #include <dpkg/options.h> 34 : : 35 : : #include "main.h" 36 : : 37 : : int 38 : 0 : updateavailable(const char *const *argv) 39 : : { 40 : 0 : const char *sourcefile= argv[0]; 41 : : char *availfile; 42 : 0 : int count= 0; 43 : : 44 : 0 : modstatdb_init(); 45 : : 46 [ # # # ]: 0 : switch (cipaction->arg_int) { 47 : 0 : case act_avclear: 48 [ # # ]: 0 : if (sourcefile) badusage(_("--%s takes no arguments"),cipaction->olong); 49 : 0 : break; 50 : 0 : case act_avreplace: case act_avmerge: 51 [ # # ]: 0 : if (sourcefile == NULL) 52 : 0 : sourcefile = "-"; 53 [ # # ]: 0 : else if (argv[1]) 54 : 0 : badusage(_("--%s takes at most one Packages-file argument"), 55 : 0 : cipaction->olong); 56 : 0 : break; 57 : 0 : default: 58 : 0 : internerr("unknown action '%d'", cipaction->arg_int); 59 : : } 60 : : 61 [ # # ]: 0 : if (!f_noact) { 62 : 0 : const char *dbdir = dpkg_db_get_dir(); 63 : : 64 [ # # ]: 0 : if (access(dbdir, W_OK)) { 65 [ # # ]: 0 : if (errno != EACCES) 66 : 0 : ohshite(_("unable to access dpkg database directory '%s' for bulk available update"), 67 : : dbdir); 68 : : else 69 : 0 : ohshit(_("required write access to dpkg database directory '%s' for bulk available update"), 70 : : dbdir); 71 : : } 72 : 0 : modstatdb_lock(); 73 : : } 74 : : 75 [ # # # # ]: 0 : switch (cipaction->arg_int) { 76 : 0 : case act_avreplace: 77 : 0 : printf(_("Replacing available packages info, using %s.\n"),sourcefile); 78 : 0 : break; 79 : 0 : case act_avmerge: 80 : 0 : printf(_("Updating available packages info, using %s.\n"),sourcefile); 81 : 0 : break; 82 : 0 : case act_avclear: 83 : 0 : break; 84 : 0 : default: 85 : 0 : internerr("unknown action '%d'", cipaction->arg_int); 86 : : } 87 : : 88 : 0 : availfile = dpkg_db_get_path(AVAILFILE); 89 : : 90 [ # # ]: 0 : if (cipaction->arg_int == act_avmerge) 91 : 0 : parsedb(availfile, pdb_parse_available, NULL); 92 : : 93 [ # # ]: 0 : if (cipaction->arg_int != act_avclear) 94 : 0 : count += parsedb(sourcefile, 95 : : pdb_parse_available | pdb_ignoreolder | pdb_dash_is_stdin, 96 : : NULL); 97 : : 98 [ # # ]: 0 : if (!f_noact) { 99 : 0 : writedb(availfile, wdb_dump_available); 100 : 0 : modstatdb_unlock(); 101 : : } 102 : : 103 : 0 : free(availfile); 104 : : 105 [ # # ]: 0 : if (cipaction->arg_int != act_avclear) 106 : 0 : printf(P_("Information about %d package was updated.\n", 107 : : "Information about %d packages was updated.\n", count), count); 108 : : 109 : 0 : modstatdb_done(); 110 : : 111 : 0 : return 0; 112 : : } 113 : : 114 : : int 115 : 0 : forgetold(const char *const *argv) 116 : : { 117 [ # # ]: 0 : if (*argv) 118 : 0 : badusage(_("--%s takes no arguments"), cipaction->olong); 119 : : 120 : 0 : warning(_("obsolete '--%s' option; unavailable packages are automatically cleaned up"), 121 : 0 : cipaction->olong); 122 : : 123 : 0 : return 0; 124 : : }