From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id UJL5BaMXTmDSEgAA0tVLHw (envelope-from ) for ; Sun, 14 Mar 2021 14:03:15 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id aEyfAaMXTmAJTgAAbx9fmQ (envelope-from ) for ; Sun, 14 Mar 2021 14:03:15 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 7ABB612B46 for ; Sun, 14 Mar 2021 15:03:14 +0100 (CET) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 6865527C71; Sun, 14 Mar 2021 10:02:40 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id 7EBF32755A for ; Sun, 14 Mar 2021 10:02:27 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id 78A985FA96; Sun, 14 Mar 2021 10:02:27 -0400 (EDT) Received: (nullmailer pid 183677 invoked by uid 1000); Sun, 14 Mar 2021 14:02:19 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 22/22] CLI/new: use configuration variable for backup directory Date: Sun, 14 Mar 2021 11:02:17 -0300 Message-Id: <20210314140217.183425-23-david@tethera.net> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210314140217.183425-1-david@tethera.net> References: <20210314140217.183425-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: VVHTC5N73SU3XM4XGTIJD7MQPTVFHNQD X-Message-ID-Hash: VVHTC5N73SU3XM4XGTIJD7MQPTVFHNQD 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 ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1615730594; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=2n+96jD6MctIkHMici+2DZxaiofZWI1OL1Ng2YZBUt8=; b=mldXlVhr2+QwD76mSaXK4T9X4xInG0XgB3rL5UVsKQiJ+qwDUixb2JiKCCt+JnB7OpA+b4 0lj426/zqVBvkfZNaVsvSF4PbjA7Gz5flQZBOcg8n0noixWWvH2+YhRkcYCVFd9jGyK/e1 aHm6fBOelgSlSF6pwNYEVAvnp5ZYBccj2tlMGmTlVsIosma+Uw9b2nC2jO6DRKIQPQuYt0 L+5rxNrVB7H4Ib0bEkT2vWPSDgfrG3Lg5el2aZx2SXGeeiiZvDL5pCHAkDteSEgOPceHcs nUtgq4bKr9WiaUFAuweojBdYQptIWUUIW0sCXS2PxuY8y1u/v+G/u8Gh2WwyWA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1615730594; a=rsa-sha256; cv=none; b=LHipzBcXxsLjoPwMxPYL+KgRqYvixu8P7OCRlU62C2F2QnsqIdCG+6KWUR4ebIroK/chnL IUUAhtu4WTEhrjiolK2m/9iAbbDIfacC42wQIP4CfMRT9BmYq5ap7GZwZG4AJC26k2OsAA PTZGGWfUuauacQswIAIru9WM52Asw/hOWtW95OBcSKJiQMpr9KCe6Ue4YfZbM04QfkDuL9 rq+RIvEn9DHhHDIxoC41bZ+4ir0hydMBKByqkmCLWBATl7NuPBGbS6FpfIVylJu+C73xJ9 vVV6+sWrVc5fEoHDp0IRenxQpefyUjtMDmIVurvThrdvVMUsX9fYsef4IH+PtQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -1.00 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 7ABB612B46 X-Spam-Score: -1.00 X-Migadu-Scanner: scn0.migadu.com X-TUID: v4M2dwpjVauG The stat is essentially replaced by the mkdir for error detection purposes. This changes the default location for backups to make things tidier, even in non-split configurations. Hopefully there is not too many user scripts relying on the previous location. Because the default location may not exist, replace the use of stat for error detection with a call to mkdir. --- 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 30062512..bae28109 100644 --- a/notmuch-new.c +++ b/notmuch-new.c @@ -1051,28 +1051,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.1