aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/backup-restore/backup.c
diff options
context:
space:
mode:
authorJP Rosevear <jpr@novell.com>2004-12-17 11:15:54 +0800
committerJP Rosevear <jpr@src.gnome.org>2004-12-17 11:15:54 +0800
commitb8cafeb987c18d7bdad2fd45d2e7c4613df04b74 (patch)
treefd39a4c0908f76179a067222dc7bff5a76dc30db /plugins/backup-restore/backup.c
parent75d011570d92f39fac17fdb59eb678efba6d6fb4 (diff)
downloadgsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.gz
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.bz2
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.lz
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.xz
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.tar.zst
gsoc2013-evolution-b8cafeb987c18d7bdad2fd45d2e7c4613df04b74.zip
Imported backup/restore plugin
2004-12-16 JP Rosevear <jpr@novell.com> * Imported backup/restore plugin svn path=/trunk/; revision=28140
Diffstat (limited to 'plugins/backup-restore/backup.c')
-rw-r--r--plugins/backup-restore/backup.c153
1 files changed, 153 insertions, 0 deletions
diff --git a/plugins/backup-restore/backup.c b/plugins/backup-restore/backup.c
new file mode 100644
index 0000000000..9048ee2928
--- /dev/null
+++ b/plugins/backup-restore/backup.c
@@ -0,0 +1,153 @@
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/wait.h>
+
+#include <libgnome/gnome-i18n.h>
+#include <libgnome/gnome-util.h>
+
+#define EVOLUTION "evolution-" BASE_VERSION
+#define EVOLUTION_DIR "~/.evolution/"
+#define EVOLUTION_DIR_BACKUP "~/.evolution-old/"
+#define GCONF_DUMP_FILE "backup-restore-gconf.xml"
+#define GCONF_DUMP_PATH EVOLUTION_DIR GCONF_DUMP_FILE
+#define GCONF_DIR "/apps/evolution"
+#define ARCHIVE_NAME "evolution-backup.tar.gz"
+
+static gboolean backup_op = FALSE;
+static gboolean restore_op = FALSE;
+static gboolean check_op = FALSE;
+static gboolean restart_arg = FALSE;
+
+#define d(x) x
+
+/* #define s(x) system (x) */
+#define s(x) G_STMT_START { g_message (x); system (x); } G_STMT_END
+
+static void
+backup (const char *filename)
+{
+ char *command;
+
+ /* FIXME Will the versioned setting always work? */
+ s (EVOLUTION " --force-shutdown");
+
+ s ("gconftool-2 --dump " GCONF_DIR " > " GCONF_DUMP_PATH);
+
+ /* FIXME stay on this file system ,other options?" */
+ /* FIXME compression type?" */
+ /* FIXME date/time stamp?" */
+ /* FIXME archive location?" */
+ command = g_strdup_printf ("cd ~ && tar zpcf %s .evolution", filename);
+ s (command);
+ g_free (command);
+
+ if (restart_arg)
+ s (EVOLUTION);
+}
+
+static void
+restore (const char *filename)
+{
+ char *command;
+
+ /* FIXME Will the versioned setting always work? */
+ s (EVOLUTION " --force-shutdown");
+
+ s ("mv " EVOLUTION_DIR " " EVOLUTION_DIR_BACKUP);
+
+ command = g_strdup_printf ("cd ~ && tar zxf %s", filename);
+ s (command);
+ g_free (command);
+
+ s ("gconftool-2 --load " GCONF_DUMP_PATH);
+ s ("rm -rf " GCONF_DUMP_PATH);
+ s ("rm -rf " EVOLUTION_DIR_BACKUP);
+
+ if (restart_arg)
+ s (EVOLUTION);
+}
+
+static void
+check (const char *filename)
+{
+ char *command;
+ int result;
+
+ command = g_strdup_printf ("tar ztf %s | grep -e \"^\\.evolution/$\"", filename);
+ result = system (command);
+ g_free (command);
+
+ g_message ("First result %d", result);
+ if (result)
+ exit (result);
+
+ command = g_strdup_printf ("tar ztf %s | grep -e \"^\\.evolution/%s$\"", filename, GCONF_DUMP_FILE);
+ result = system (command);
+ g_free (command);
+
+ g_message ("Second result %d", result);
+
+ exit (result);
+}
+
+int
+main (int argc, char **argv)
+{
+ GValue popt_context_value = { 0, };
+ GnomeProgram *program;
+ poptContext popt_context;
+ const char **args;
+
+ struct poptOption options[] = {
+ { "backup", '\0', POPT_ARG_NONE, &backup_op, 0,
+ N_("Backup Evolution directory"), NULL },
+ { "restore", '\0', POPT_ARG_NONE, &restore_op, 0,
+ N_("Restore Evolution directory"), NULL },
+ { "check", '\0', POPT_ARG_NONE, &check_op, 0,
+ N_("Check Evolution archive"), NULL },
+ { "restart", '\0', POPT_ARG_NONE, &restart_arg, 0,
+ N_("Restart Evolution"), NULL },
+ { NULL, '\0', 0, NULL, 0, NULL, NULL }
+ };
+
+ bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ program = gnome_program_init (PACKAGE, VERSION, LIBGNOME_MODULE, argc, argv,
+ GNOME_PROGRAM_STANDARD_PROPERTIES,
+ GNOME_PARAM_POPT_TABLE, options,
+ NULL);
+
+ g_value_init (&popt_context_value, G_TYPE_POINTER);
+ g_object_get_property (G_OBJECT (program), GNOME_PARAM_POPT_CONTEXT, &popt_context_value);
+ popt_context = g_value_get_pointer (&popt_context_value);
+ args = poptGetArgs (popt_context);
+
+ if (args != NULL) {
+ const char **p;
+
+ for (p = args; *p != NULL; p++) {
+ if (backup_op) {
+ d(g_message ("Backing up to %s", (char *) *p));
+ backup ((char *) *p);
+ } else if (restore_op) {
+ d(g_message ("Restoring from %s", (char *) *p));
+ restore ((char *) *p);
+ } else if (check_op) {
+ d(g_message ("Checking %s", (char *) *p));
+ check ((char *) *p);
+ }
+ }
+ }
+
+ g_value_unset (&popt_context_value);
+
+ return 0;
+}