From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id iDHdBMJ4LWAUHgAA0tVLHw (envelope-from ) for ; Wed, 17 Feb 2021 20:12:50 +0000 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id gDu8AMJ4LWDMLQAA1q6Kng (envelope-from ) for ; Wed, 17 Feb 2021 20:12:50 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [144.217.243.247]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 8F613214B2 for ; Wed, 17 Feb 2021 21:12:49 +0100 (CET) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 03F922705A; Wed, 17 Feb 2021 15:11:38 -0500 (EST) Received: from fethera.tethera.net (fethera.tethera.net [IPv6:2607:5300:60:c5::1]) by mail.notmuchmail.org (Postfix) with ESMTP id 37F2426ACE for ; Wed, 17 Feb 2021 15:11:09 -0500 (EST) Received: by fethera.tethera.net (Postfix, from userid 1001) id C69316067D; Wed, 17 Feb 2021 15:11:08 -0500 (EST) Received: (nullmailer pid 2021448 invoked by uid 1000); Wed, 17 Feb 2021 20:10:50 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 21/21] CLI/new: use configuration variable for backup directory Date: Wed, 17 Feb 2021 16:10:45 -0400 Message-Id: <20210217201045.2021106-22-david@tethera.net> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210217201045.2021106-1-david@tethera.net> References: <20210217201045.2021106-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: G2K4ZF3KDKATMBDWGSWNYXVKOMVUEOZC X-Message-ID-Hash: G2K4ZF3KDKATMBDWGSWNYXVKOMVUEOZC X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: 0.47 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 8F613214B2 X-Spam-Score: 0.47 X-Migadu-Scanner: scn0.migadu.com X-TUID: K4SlJzsJobG/ The stat is dropped to avoid a race condition between stat and mkdir. This changes the default location for backups to make things tidier. Hopefully there is not user scripts relying on this location. --- notmuch-new.c | 18 ++++++------------ test/T055-path-config.sh | 15 +++++++++++++++ test/T530-upgrade.sh | 2 +- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/notmuch-new.c b/notmuch-new.c index 63ac10a6..8a8ff69a 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -1048,28 +1048,22 @@ _maybe_upgrade (notmuch_database_t *notmuch, add_files_state_t *state) { if (notmuch_database_needs_upgrade (notmuch)) { time_t now = time (NULL); struct tm *gm_time = gmtime (&now); - struct stat st; int err; notmuch_status_t status; - char *dot_notmuch_path = talloc_asprintf (notmuch, "%s/%s", state->db_path, ".notmuch"); - + const char *backup_dir = notmuch_config_get (notmuch, NOTMUCH_CONFIG_BACKUP_DIR); const char *backup_name; - err = stat(dot_notmuch_path, &st); - if (err) { - if (errno == ENOENT) { - dot_notmuch_path = NULL; - } else { - fprintf(stderr, "Failed to stat %s: %s\n", dot_notmuch_path, strerror(errno)); - return EXIT_FAILURE; - } + err = mkdir (backup_dir, 0755); + if (err && errno != EEXIST) { + fprintf(stderr, "Failed to create %s: %s\n", backup_dir, strerror(errno)); + return EXIT_FAILURE; } /* since dump files are written atomically, the amount of * harm from overwriting one within a second seems * relatively small. */ backup_name = talloc_asprintf (notmuch, "%s/dump-%04d%02d%02dT%02d%02d%02d.gz", - dot_notmuch_path ? dot_notmuch_path : state->db_path, + backup_dir, gm_time->tm_year + 1900, gm_time->tm_mon + 1, gm_time->tm_mday, diff --git a/test/T055-path-config.sh b/test/T055-path-config.sh index e4812c82..d8828342 100755 --- a/test/T055-path-config.sh +++ b/test/T055-path-config.sh @@ -2,6 +2,8 @@ test_description='Configuration of mail-root and database path' . $(dirname "$0")/test-lib.sh || exit 1 +test_require_external_prereq xapian-metdata + backup_config () { local test_name=$(basename $0 .sh) cp ${NOTMUCH_CONFIG} notmuch-config-backup.${test_name} @@ -13,6 +15,7 @@ restore_config () { unset CONFIG_PATH unset DATABASE_PATH unset NOTMUCH_PROFILE + unset XAPIAN_PATH cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG} } @@ -25,6 +28,7 @@ split_config () { notmuch config set database.path $dir notmuch config set database.mail_root $MAIL_DIR DATABASE_PATH=$dir + XAPIAN_PATH="$dir/xapian" } symlink_config () { @@ -34,6 +38,7 @@ symlink_config () { ln -s $MAIL_DIR $dir notmuch config set database.path $dir notmuch config set database.mail_root $MAIL_DIR + XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian" unset DATABASE_PATH } @@ -56,6 +61,7 @@ xdg_config () { mv ${NOTMUCH_CONFIG} $CONFIG_PATH unset NOTMUCH_CONFIG + XAPIAN_PATH="${DATABASE_PATH}/xapian" notmuch --config=${CONFIG_PATH} config set database.mail_root ${TMP_DIRECTORY}/mail notmuch --config=${CONFIG_PATH} config set database.path } @@ -67,6 +73,7 @@ for config in traditional split XDG XDG+profile symlink; do case $config in traditional) backup_config + XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian" ;; split) split_config @@ -184,6 +191,14 @@ EOF notmuch search --output=messages '*' | sort > OUTPUT test_expect_equal_file EXPECTED OUTPUT + test_begin_subtest "upgrade backup ($config)" + features=$(xapian-metadata get $XAPIAN_PATH features | grep -v "^relative directory paths") + xapian-metadata set $XAPIAN_PATH features "$features" + output=$(notmuch new | grep Welcome) + test_expect_equal \ + "$output" \ + "Welcome to a new version of notmuch! Your database will now be upgraded." + restore_config done diff --git a/test/T530-upgrade.sh b/test/T530-upgrade.sh index c599dacf..cce29f45 100755 --- a/test/T530-upgrade.sh +++ b/test/T530-upgrade.sh @@ -5,7 +5,7 @@ test_description='database upgrades' test_require_external_prereq xapian-metadata XAPIAN_PATH=$MAIL_DIR/.notmuch/xapian -BACKUP_PATH=$MAIL_DIR/.notmuch +BACKUP_PATH=$MAIL_DIR/.notmuch/backups delete_feature () { local key=$1 -- 2.30.0