1 /* This file is part of the Zebra server.
2 Copyright (C) 1994-2011 Index Data
4 Zebra is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
9 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
35 #include <yaz/options.h>
36 #include <idzebra/version.h>
37 #include <idzebra/api.h>
41 static void filter_cb(void *cd, const char *name)
46 static void show_filters(ZebraService zs)
48 zebra_filter_info(zs, 0, filter_cb);
51 int main(int argc, char **argv)
58 int enable_commit = 1;
60 Res res = res_open(0, 0);
61 Res default_res = res_open(0, 0);
63 int trans_started = 0;
72 sprintf(nbuf, "%.40s(%ld)", *argv, (long) getpid());
73 yaz_log_init_prefix(nbuf);
78 fprintf(stderr, "%s [options] command <dir> ...\n"
80 " update <dir> Update index with files below <dir>.\n"
81 " If <dir> is empty filenames are read from stdin.\n"
82 " delete <dir> Delete index with files below <dir>.\n"
83 " create <db> Create database <db>\n"
84 " drop <db> Drop database <db>\n"
85 " commit Commit changes\n"
86 " clean Clean shadow files\n"
88 " -t <type> Index files as <type> (grs or text).\n"
89 " -c <config> Read configuration file <config>.\n"
90 " -g <group> Index files according to group settings.\n"
91 " -d <database> Records belong to Z39.50 database <database>.\n"
92 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
93 " -n Don't use shadow system.\n"
94 " -s Show analysis on stdout, but do no work.\n"
95 " -v <level> Set logging to <level>.\n"
96 " -l <file> Write log to <file>.\n"
97 " -L Don't follow symbolic links.\n"
98 " -f <n> Display information for the first <n> records.\n"
99 " -V Show version.\n", *argv
103 res_set(default_res, "profilePath", DEFAULT_PROFILE_PATH);
104 res_set(default_res, "modulePath", DEFAULT_MODULE_PATH);
105 while ((ret = options("sVt:c:g:d:m:v:nf:l:L", argv, argc, &arg)) != -2)
109 if(cmd == 0) /* command */
113 const char *config = configName ? configName : "zebra.cfg";
114 zs = zebra_start_res(config, default_res, res);
117 yaz_log(YLOG_FATAL, "Cannot read config %s", config);
120 zh = zebra_open(zs, 0);
121 zebra_shadow_enable(zh, enable_commit);
125 zebra_select_database(zh, database) == ZEBRA_FAIL)
127 yaz_log(YLOG_FATAL, "Could not select database %s "
129 database, zebra_errCode(zh) );
132 if (!strcmp(arg, "update"))
134 else if (!strcmp(arg, "update1"))
136 else if (!strcmp(arg, "update2"))
138 else if (!strcmp(arg, "dump"))
140 else if (!strcmp(arg, "del") || !strcmp(arg, "delete"))
142 else if (!strcmp(arg, "adelete"))
144 else if (!strcmp(arg, "init"))
148 else if (!strcmp(arg, "drop"))
152 else if (!strcmp(arg, "create"))
156 else if (!strcmp(arg, "commit"))
160 else if (!strcmp(arg, "clean"))
164 else if (!strcmp(arg, "stat") || !strcmp(arg, "status"))
166 zebra_register_statistics(zh, 0);
168 else if (!strcmp(arg, "dumpdict"))
170 zebra_register_statistics(zh, 1);
172 else if (!strcmp(arg, "compact"))
176 else if (!strcmp(arg, "filters"))
180 else if (!strcmp(arg, "check0"))
182 if (zebra_register_check(zh, 0) != ZEBRA_OK)
183 yaz_log(YLOG_WARN, "register check failed");
185 else if (!strcmp(arg, "check1") || !strcmp(arg, "check"))
187 if (zebra_register_check(zh, 1) != ZEBRA_OK)
188 yaz_log(YLOG_WARN, "register check failed");
192 yaz_log(YLOG_FATAL, "unknown command: %s", arg);
198 ZEBRA_RES res = ZEBRA_OK;
202 if (zebra_begin_trans(zh, 1) != ZEBRA_OK)
208 res = zebra_repository_index(zh, arg, action_update);
211 res = zebra_repository_index(zh, arg, action_delete);
214 res = zebra_repository_index(zh, arg, action_a_delete);
217 res = zebra_repository_show(zh, arg);
221 res = zebra_create_database(zh, arg);
224 res = zebra_drop_database(zh, arg);
231 const char *add = zebra_errAdd(zh);
232 yaz_log(YLOG_FATAL, "Operation failed: %s %s",
233 zebra_errString(zh), add ? add : "");
236 if (zebra_end_trans(zh) != ZEBRA_OK)
237 yaz_log(YLOG_WARN, "zebra_end_trans failed");
244 log_event_end(NULL, NULL);
249 char version_str[20];
251 zebra_get_version(version_str, sys_str);
253 printf("Zebra %s\n", version_str);
254 printf("(C) 1994-2010, Index Data ApS\n");
255 printf("Zebra is free software, covered by the GNU General Public License, and you are\n");
256 printf("welcome to change it and/or distribute copies of it under certain conditions.\n");
257 printf("SHA1 ID: %s\n", sys_str);
258 if (strcmp(version_str, ZEBRAVER))
259 printf("zebraidx compiled version %s\n", ZEBRAVER);
261 printf("Using ICU\n");
265 yaz_log_init_level(yaz_log_mask_str(arg));
267 yaz_log_init_file(arg);
269 res_set(res, "memMax", arg);
273 res_set(res, "openRW", "0");
275 res_set(res, "group", arg);
277 res_set(res, "fileVerboseLimit", arg);
281 res_set(res, "recordType", arg);
285 res_set(res, "followLinks", "0");
287 yaz_log(YLOG_WARN, "unknown option '-%s'", arg);
291 if (zebra_end_trans(zh) != ZEBRA_OK)
292 yaz_log(YLOG_WARN, "zebra_end_trans failed");
298 res_close(default_res);
306 * c-file-style: "Stroustrup"
307 * indent-tabs-mode: nil
309 * vim: shiftwidth=4 tabstop=8 expandtab