mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-02-17 23:53:15 +01:00
CLI/new: use configuration variable for backup directory
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.
This commit is contained in:
parent
a7873df331
commit
4e209ca99a
3 changed files with 22 additions and 13 deletions
|
@ -1051,28 +1051,22 @@ _maybe_upgrade (notmuch_database_t *notmuch, add_files_state_t *state)
|
||||||
if (notmuch_database_needs_upgrade (notmuch)) {
|
if (notmuch_database_needs_upgrade (notmuch)) {
|
||||||
time_t now = time (NULL);
|
time_t now = time (NULL);
|
||||||
struct tm *gm_time = gmtime (&now);
|
struct tm *gm_time = gmtime (&now);
|
||||||
struct stat st;
|
|
||||||
int err;
|
int err;
|
||||||
notmuch_status_t status;
|
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;
|
const char *backup_name;
|
||||||
|
|
||||||
err = stat (dot_notmuch_path, &st);
|
err = mkdir (backup_dir, 0755);
|
||||||
if (err) {
|
if (err && errno != EEXIST) {
|
||||||
if (errno == ENOENT) {
|
fprintf (stderr, "Failed to create %s: %s\n", backup_dir, strerror (errno));
|
||||||
dot_notmuch_path = NULL;
|
|
||||||
} else {
|
|
||||||
fprintf (stderr, "Failed to stat %s: %s\n", dot_notmuch_path, strerror (errno));
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* since dump files are written atomically, the amount of
|
/* since dump files are written atomically, the amount of
|
||||||
* harm from overwriting one within a second seems
|
* harm from overwriting one within a second seems
|
||||||
* relatively small. */
|
* relatively small. */
|
||||||
backup_name = talloc_asprintf (notmuch, "%s/dump-%04d%02d%02dT%02d%02d%02d.gz",
|
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_year + 1900,
|
||||||
gm_time->tm_mon + 1,
|
gm_time->tm_mon + 1,
|
||||||
gm_time->tm_mday,
|
gm_time->tm_mday,
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
test_description='Configuration of mail-root and database path'
|
test_description='Configuration of mail-root and database path'
|
||||||
. $(dirname "$0")/test-lib.sh || exit 1
|
. $(dirname "$0")/test-lib.sh || exit 1
|
||||||
|
|
||||||
|
test_require_external_prereq xapian-metdata
|
||||||
|
|
||||||
backup_config () {
|
backup_config () {
|
||||||
local test_name=$(basename $0 .sh)
|
local test_name=$(basename $0 .sh)
|
||||||
cp ${NOTMUCH_CONFIG} notmuch-config-backup.${test_name}
|
cp ${NOTMUCH_CONFIG} notmuch-config-backup.${test_name}
|
||||||
|
@ -13,6 +15,7 @@ restore_config () {
|
||||||
unset CONFIG_PATH
|
unset CONFIG_PATH
|
||||||
unset DATABASE_PATH
|
unset DATABASE_PATH
|
||||||
unset NOTMUCH_PROFILE
|
unset NOTMUCH_PROFILE
|
||||||
|
unset XAPIAN_PATH
|
||||||
cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG}
|
cp notmuch-config-backup.${test_name} ${NOTMUCH_CONFIG}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +28,7 @@ split_config () {
|
||||||
notmuch config set database.path $dir
|
notmuch config set database.path $dir
|
||||||
notmuch config set database.mail_root $MAIL_DIR
|
notmuch config set database.mail_root $MAIL_DIR
|
||||||
DATABASE_PATH=$dir
|
DATABASE_PATH=$dir
|
||||||
|
XAPIAN_PATH="$dir/xapian"
|
||||||
}
|
}
|
||||||
|
|
||||||
symlink_config () {
|
symlink_config () {
|
||||||
|
@ -34,6 +38,7 @@ symlink_config () {
|
||||||
ln -s $MAIL_DIR $dir
|
ln -s $MAIL_DIR $dir
|
||||||
notmuch config set database.path $dir
|
notmuch config set database.path $dir
|
||||||
notmuch config set database.mail_root $MAIL_DIR
|
notmuch config set database.mail_root $MAIL_DIR
|
||||||
|
XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian"
|
||||||
unset DATABASE_PATH
|
unset DATABASE_PATH
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +61,7 @@ xdg_config () {
|
||||||
mv ${NOTMUCH_CONFIG} $CONFIG_PATH
|
mv ${NOTMUCH_CONFIG} $CONFIG_PATH
|
||||||
unset NOTMUCH_CONFIG
|
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.mail_root ${TMP_DIRECTORY}/mail
|
||||||
notmuch --config=${CONFIG_PATH} config set database.path
|
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
|
case $config in
|
||||||
traditional)
|
traditional)
|
||||||
backup_config
|
backup_config
|
||||||
|
XAPIAN_PATH="$MAIL_DIR/.notmuch/xapian"
|
||||||
;;
|
;;
|
||||||
split)
|
split)
|
||||||
split_config
|
split_config
|
||||||
|
@ -184,6 +191,14 @@ EOF
|
||||||
notmuch search --output=messages '*' | sort > OUTPUT
|
notmuch search --output=messages '*' | sort > OUTPUT
|
||||||
test_expect_equal_file EXPECTED 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
|
restore_config
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ test_description='database upgrades'
|
||||||
test_require_external_prereq xapian-metadata
|
test_require_external_prereq xapian-metadata
|
||||||
|
|
||||||
XAPIAN_PATH=$MAIL_DIR/.notmuch/xapian
|
XAPIAN_PATH=$MAIL_DIR/.notmuch/xapian
|
||||||
BACKUP_PATH=$MAIL_DIR/.notmuch
|
BACKUP_PATH=$MAIL_DIR/.notmuch/backups
|
||||||
|
|
||||||
delete_feature () {
|
delete_feature () {
|
||||||
local key=$1
|
local key=$1
|
||||||
|
|
Loading…
Add table
Reference in a new issue