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"
87 " check:mode Check register; mode is one of: default, full, quick\n"
89 " -t <type> Index files as <type> (grs or text).\n"
90 " -c <config> Read configuration file <config>.\n"
91 " -g <group> Index files according to group settings.\n"
92 " -d <database> Records belong to Z39.50 database <database>.\n"
93 " -m <mbytes> Use <mbytes> before flushing keys to disk.\n"
94 " -n Don't use shadow system.\n"
95 " -s Show analysis on stdout, but do no work.\n"
96 " -v <level> Set logging to <level>.\n"
97 " -l <file> Write log to <file>.\n"
98 " -L Don't follow symbolic links.\n"
99 " -f <n> Display information for the first <n> records.\n"
100 " -V Show version.\n", *argv
104 res_set(default_res, "profilePath", DEFAULT_PROFILE_PATH);
105 res_set(default_res, "modulePath", DEFAULT_MODULE_PATH);
106 while ((ret = options("sVt:c:g:d:m:v:nf:l:L", argv, argc, &arg)) != -2)
110 if(cmd == 0) /* command */
114 const char *config = configName ? configName : "zebra.cfg";
115 zs = zebra_start_res(config, default_res, res);
118 yaz_log(YLOG_FATAL, "Cannot read config %s", config);
121 zh = zebra_open(zs, 0);
122 zebra_shadow_enable(zh, enable_commit);
126 zebra_select_database(zh, database) == ZEBRA_FAIL)
128 yaz_log(YLOG_FATAL, "Could not select database %s "
130 database, zebra_errCode(zh) );
133 if (!strcmp(arg, "update"))
135 else if (!strcmp(arg, "update1"))
137 else if (!strcmp(arg, "update2"))
139 else if (!strcmp(arg, "dump"))
141 else if (!strcmp(arg, "del") || !strcmp(arg, "delete"))
143 else if (!strcmp(arg, "adelete"))
145 else if (!strcmp(arg, "init"))
149 else if (!strcmp(arg, "drop"))
153 else if (!strcmp(arg, "create"))
157 else if (!strcmp(arg, "commit"))
161 else if (!strcmp(arg, "clean"))
165 else if (!strcmp(arg, "stat") || !strcmp(arg, "status"))
167 zebra_register_statistics(zh, 0);
169 else if (!strcmp(arg, "dumpdict"))
171 zebra_register_statistics(zh, 1);
173 else if (!strcmp(arg, "compact"))
177 else if (!strcmp(arg, "filters"))
181 else if (!strncmp(arg, "check", 5))
183 const char *spec = 0;
186 else if (arg[5] != '\0')
188 yaz_log(YLOG_FATAL, "missing colon after check");
191 if (zebra_register_check(zh, spec) != ZEBRA_OK)
193 yaz_log(YLOG_WARN, "zebra_register_check failed");
198 yaz_log(YLOG_FATAL, "unknown command: %s", arg);
204 ZEBRA_RES res = ZEBRA_OK;
208 if (zebra_begin_trans(zh, 1) != ZEBRA_OK)
214 res = zebra_repository_index(zh, arg, action_update);
217 res = zebra_repository_index(zh, arg, action_delete);
220 res = zebra_repository_index(zh, arg, action_a_delete);
223 res = zebra_repository_show(zh, arg);
227 res = zebra_create_database(zh, arg);
230 res = zebra_drop_database(zh, arg);
237 const char *add = zebra_errAdd(zh);
238 yaz_log(YLOG_FATAL, "Operation failed: %s %s",
239 zebra_errString(zh), add ? add : "");
242 if (zebra_end_trans(zh) != ZEBRA_OK)
243 yaz_log(YLOG_WARN, "zebra_end_trans failed");
250 log_event_end(NULL, NULL);
255 char version_str[20];
257 zebra_get_version(version_str, sys_str);
259 printf("Zebra %s\n", version_str);
260 printf("(C) 1994-2010, Index Data ApS\n");
261 printf("Zebra is free software, covered by the GNU General Public License, and you are\n");
262 printf("welcome to change it and/or distribute copies of it under certain conditions.\n");
263 printf("SHA1 ID: %s\n", sys_str);
264 if (strcmp(version_str, ZEBRAVER))
265 printf("zebraidx compiled version %s\n", ZEBRAVER);
267 printf("Using ICU\n");
271 yaz_log_init_level(yaz_log_mask_str(arg));
273 yaz_log_init_file(arg);
275 res_set(res, "memMax", arg);
279 res_set(res, "openRW", "0");
281 res_set(res, "group", arg);
283 res_set(res, "fileVerboseLimit", arg);
287 res_set(res, "recordType", arg);
291 res_set(res, "followLinks", "0");
293 yaz_log(YLOG_WARN, "unknown option '-%s'", arg);
297 if (zebra_end_trans(zh) != ZEBRA_OK)
298 yaz_log(YLOG_WARN, "zebra_end_trans failed");
304 res_close(default_res);
312 * c-file-style: "Stroustrup"
313 * indent-tabs-mode: nil
315 * vim: shiftwidth=4 tabstop=8 expandtab