* mu-cmd.c, mu-config.c: enable 'mu add' and 'mu remove' and fix line33 check

This commit is contained in:
Dirk-Jan C. Binnema 2011-08-10 23:57:34 +03:00
parent f6a4b7a480
commit 48cf82f823
2 changed files with 85 additions and 48 deletions

View File

@ -305,6 +305,22 @@ mv_check_params (MuConfig *opts, MuMsgFlags *flags)
} }
static MuExitCode
cmd_mv_dev_null (MuConfig *opts)
{
if (unlink (opts->params[1]) != 0) {
g_warning ("unlink failed: %s", strerror (errno));
return MU_EXITCODE_ERROR;
}
if (opts->printtarget)
g_print ("%s\n", "/dev/null"); /* /dev/null */
return MU_EXITCODE_OK;
}
MuExitCode MuExitCode
mu_cmd_mv (MuConfig *opts) mu_cmd_mv (MuConfig *opts)
{ {
@ -316,17 +332,8 @@ mu_cmd_mv (MuConfig *opts)
return MU_EXITCODE_ERROR; return MU_EXITCODE_ERROR;
/* special case: /dev/null */ /* special case: /dev/null */
if (g_strcmp0 (opts->params[2], "/dev/null") == 0) { if (g_strcmp0 (opts->params[2], "/dev/null") == 0)
if (unlink (opts->params[1]) != 0) { return cmd_mv_dev_null (opts);
g_warning ("unlink failed: %s", strerror (errno));
return MU_EXITCODE_ERROR;
} else {
if (opts->printtarget)
/* if the move worked, print */
g_print ("%s\n", "/dev/null"); /* /dev/null */
return MU_EXITCODE_OK;
}
}
err = NULL; err = NULL;
fullpath = mu_msg_file_move_to_maildir (opts->params[1], opts->params[2], fullpath = mu_msg_file_move_to_maildir (opts->params[1], opts->params[2],
@ -368,14 +375,12 @@ check_file_okay (const char *path, gboolean cmd_add)
} }
static gboolean static MuStore*
add_or_remove (MuConfig *opts, gboolean cmd_add) get_store (void)
{ {
MuStore *store; MuStore *store;
GError *err; GError *err;
gboolean allok;
int i;
err = NULL; err = NULL;
store = mu_store_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB), store = mu_store_new (mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB),
mu_runtime_path(MU_RUNTIME_PATH_CONTACTS), mu_runtime_path(MU_RUNTIME_PATH_CONTACTS),
@ -386,38 +391,10 @@ add_or_remove (MuConfig *opts, gboolean cmd_add)
g_error_free (err); g_error_free (err);
} else } else
g_warning ("failed to create store object"); g_warning ("failed to create store object");
return MU_EXITCODE_ERROR;
} }
return store;
for (i = 1, allok = TRUE; opts->params[i]; ++i) {
const char* src;
src = opts->params[i];
if (!check_file_okay (src, cmd_add)) {
allok = FALSE;
continue;
}
if (cmd_add) {
if (!mu_store_store_path (store, src)) {
allok = FALSE;
g_warning ("failed to store %s", src);
}
} else { /* remove */
if (!mu_store_remove_path (store, src)) {
allok = FALSE;
g_warning ("failed to remove %s", src);
}
}
}
mu_store_destroy (store);
return allok ? MU_EXITCODE_OK : MU_EXITCODE_DB_UPDATE_ERROR;
} }
@ -425,6 +402,10 @@ add_or_remove (MuConfig *opts, gboolean cmd_add)
MuExitCode MuExitCode
mu_cmd_add (MuConfig *opts) mu_cmd_add (MuConfig *opts)
{ {
MuStore *store;
gboolean allok;
int i;
g_return_val_if_fail (opts, MU_EXITCODE_ERROR); g_return_val_if_fail (opts, MU_EXITCODE_ERROR);
g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_ADD, g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_ADD,
MU_EXITCODE_ERROR); MU_EXITCODE_ERROR);
@ -435,13 +416,39 @@ mu_cmd_add (MuConfig *opts)
return MU_EXITCODE_ERROR; return MU_EXITCODE_ERROR;
} }
return add_or_remove (opts, TRUE); store = get_store ();
if (!store)
return MU_EXITCODE_ERROR;
for (i = 1, allok = TRUE; opts->params[i]; ++i) {
const char* src;
src = opts->params[i];
if (!check_file_okay (src, TRUE)) {
allok = FALSE;
continue;
}
if (!mu_store_store_path (store, src)) {
allok = FALSE;
g_warning ("failed to store %s", src);
}
}
mu_store_destroy (store);
return allok ? MU_EXITCODE_OK : MU_EXITCODE_ERROR;
} }
MuExitCode MuExitCode
mu_cmd_remove (MuConfig *opts) mu_cmd_remove (MuConfig *opts)
{ {
MuStore *store;
gboolean allok;
int i;
g_return_val_if_fail (opts, MU_EXITCODE_ERROR); g_return_val_if_fail (opts, MU_EXITCODE_ERROR);
g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_REMOVE, g_return_val_if_fail (opts->cmd == MU_CONFIG_CMD_REMOVE,
MU_EXITCODE_ERROR); MU_EXITCODE_ERROR);
@ -452,6 +459,31 @@ mu_cmd_remove (MuConfig *opts)
return MU_EXITCODE_ERROR; return MU_EXITCODE_ERROR;
} }
return add_or_remove (opts, TRUE); store = get_store ();
if (!store)
return MU_EXITCODE_ERROR;
for (i = 1, allok = TRUE; opts->params[i]; ++i) {
const char* src;
src = opts->params[i];
if (!check_file_okay (src, FALSE)) {
allok = FALSE;
continue;
}
if (!mu_store_remove_path (store, src)) {
allok = FALSE;
g_warning ("failed to remove %s", src);
}
}
mu_store_destroy (store);
return allok ? MU_EXITCODE_OK : MU_EXITCODE_ERROR;
} }

View File

@ -386,6 +386,8 @@ parse_cmd (MuConfig *opts, int *argcp, char ***argvp)
{ "mkdir", MU_CONFIG_CMD_MKDIR }, { "mkdir", MU_CONFIG_CMD_MKDIR },
{ "mv", MU_CONFIG_CMD_MV }, { "mv", MU_CONFIG_CMD_MV },
{ "view", MU_CONFIG_CMD_VIEW }, { "view", MU_CONFIG_CMD_VIEW },
{ "add", MU_CONFIG_CMD_ADD },
{ "remove", MU_CONFIG_CMD_REMOVE },
}; };
opts->cmd = MU_CONFIG_CMD_NONE; opts->cmd = MU_CONFIG_CMD_NONE;
@ -562,6 +564,9 @@ mu_config_execute (MuConfig *opts)
case MU_CONFIG_CMD_MKDIR: return mu_cmd_mkdir (opts); case MU_CONFIG_CMD_MKDIR: return mu_cmd_mkdir (opts);
case MU_CONFIG_CMD_MV: return mu_cmd_mv (opts); case MU_CONFIG_CMD_MV: return mu_cmd_mv (opts);
case MU_CONFIG_CMD_VIEW: return mu_cmd_view (opts); case MU_CONFIG_CMD_VIEW: return mu_cmd_view (opts);
case MU_CONFIG_CMD_ADD: return mu_cmd_add (opts);
case MU_CONFIG_CMD_REMOVE: return mu_cmd_remove (opts);
case MU_CONFIG_CMD_UNKNOWN: case MU_CONFIG_CMD_UNKNOWN:
g_printerr ("mu: unknown command '%s'\n\n", opts->cmdstr); g_printerr ("mu: unknown command '%s'\n\n", opts->cmdstr);
show_usage (FALSE); show_usage (FALSE);