From ea57a0ab32b0863cfa1209423a5b4c8dd195f803 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 29 Jan 2020 14:45:27 +0100 Subject: Fix version number. --- Changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Changelog b/Changelog index 68e3267..70eea4e 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,4 @@ -interimap (0.5-rc) upstream; +interimap (0.5) upstream; Breaking changes: * interimap: when matching mailbox names against the 'ignore-mailbox' -- cgit v1.2.3 From d97e6ca072b3577d21f6136dbded5fd991fd4317 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 12 May 2020 16:42:25 +0200 Subject: index: Add a short summary to the index. Per Stefan Kangas' suggestion. --- doc/index.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/index.md b/doc/index.md index d475592..4dd72f1 100644 --- a/doc/index.md +++ b/doc/index.md @@ -1,18 +1,32 @@ % InterIMAP & PullIMAP % [Guilhem Moulin](mailto:guilhem@fripost.org) +InterIMAP synchronizes emails and their metadata between a remote IMAP +server and local storage. By leveraging the [*Quick Mailbox +Resynchronization*][RFC 7162] IMAP extension, it can offer [*much better +performance*](benchmark.html) than tools such as [OfflineIMAP]. + +PullIMAP retrieves messages from an IMAP mailbox and deliver them +locally. It can use the the [*IDLE*][RFC 2177] IMAP extension to reduce +both latency and network traffic. + +[RFC 2177]: https://tools.ietf.org/html/rfc2177 +[RFC 7162]: https://tools.ietf.org/html/rfc7162 +[OfflineIMAP]: https://www.offlineimap.org/ + General documentation --------------------- * [Getting started with InterIMAP](getting-started.html) * [Multi-remote setup for InterIMAP](multi-account.html) * [InterIMAP benchmark metrics and comparison](benchmark.html) + * [Presentation at DebConf19](https://debconf19.debconf.org/talks/78-interimap-the-case-for-local-imap-servers-and-fast-bidirectional-synchronization/) Manuals (HTML versions) ----------------------- * [`interimap`(1)](interimap.1.html) — Fast bidirectional - synchronization for QRESYNC-capable IMAP servers + synchronization for IMAP servers * [`pullimap`(1)](pullimap.1.html) — Pull mails from an IMAP mailbox and deliver them to an SMTP session -- cgit v1.2.3 From e22657a49dd09368c14e59aac7c61b64c90a6555 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Tue, 12 May 2020 17:03:53 +0200 Subject: doc/getting-started.md: Link to the IMAP wiki for QRESYNC support in IMAPd. --- doc/getting-started.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/getting-started.md b/doc/getting-started.md index c497ec6..1d059b4 100644 --- a/doc/getting-started.md +++ b/doc/getting-started.md @@ -30,7 +30,8 @@ perform significant optimizations, yielding [much faster](benchmark.html) synchronization. *Note*: InterIMAP uses the [Quick Mailbox Resynchronization][RFC 7162] extension for stateful synchronization, hence won't work on IMAP servers -that don't advertise support for that extension. +that don't advertise [support](https://www.imapwiki.org/Specs#line-68) +for that extension. Installing an [IMAP4rev1] server on a single-user workstation may sound overkill, but we argue that most systems, not only servers, come with a -- cgit v1.2.3 From f87eba73b4108ed9eb624731d5a93a9982476c30 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 1 Jul 2020 19:53:00 +0200 Subject: doc/development.md: Fix broken link. --- doc/development.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/development.md b/doc/development.md index 52ebf90..708712f 100644 --- a/doc/development.md +++ b/doc/development.md @@ -193,7 +193,7 @@ recursively remove the directory `$BASEDIR`. [IMAP4rev1]: https://tools.ietf.org/html/rfc3501 [Dovecot]: https://dovecot.org -[Dovecot Logging]: https://doc.dovecot.org/admin_manual/dovecot_logging/ +[Dovecot Logging]: https://doc.dovecot.org/admin_manual/logging/ [Dovecot LDA]: https://wiki.dovecot.org/LDA [`getlogin`(3)]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html [User Databases]: https://doc.dovecot.org/configuration_manual/authentication/user_databases_userdb/ -- cgit v1.2.3 From 1507128fcca36093ea9f544e8a44adca5d514605 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 1 Jul 2020 21:26:23 +0200 Subject: pullimap: Also compare RFC 5322 date and envelope information in mailbox comparison tests. --- Changelog | 7 +++++++ tests/pullimap/t | 10 ++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Changelog b/Changelog index 70eea4e..4207069 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,10 @@ +interimap (0.5.1) UNRELEASED; + + + pullimap: also compare RFC 5322 date and envelope information in + mailbox comparison tests. + + -- Guilhem Moulin Wed, 01 Jul 2020 21:24:50 +0200 + interimap (0.5) upstream; Breaking changes: diff --git a/tests/pullimap/t b/tests/pullimap/t index 115432d..0dfe634 100644 --- a/tests/pullimap/t +++ b/tests/pullimap/t @@ -6,15 +6,13 @@ step_start "\`pullimap --idle\` refuses to create the state file" ! pullimap --idle "remote" || error step_done -# compare mailboxes; can't compare the RFC 3501 TEXT as LMTP adds a -# Received: header. -# TODO unset lmtp_add_received_header once available in sid: -# https://doc.dovecot.org/settings/dovecot_core_settings/#lmtp-add-received-header +# compare mailboxes (can't compare the RFC 3501 TEXT as the LMTPd inconditionally +# adds a Return-Path: header -- and also Delivered-To: and Received: to by default) list_mails_sha256() { local u="$1" guid uid + local fields="body date.sent imap.bodystructure imap.envelope" while read guid uid; do - doveadm -u "$u" -f "flow" fetch body mailbox-guid "$guid" uid "$uid" \ - | sed "1s/body=//" | sha256sum + doveadm -u "$u" -f "flow" fetch "$fields" mailbox-guid "$guid" uid "$uid" | sha256sum done < <(doveadm -u "$u" search mailbox "$MAILBOX") | sort -f } check() { -- cgit v1.2.3 From bb7790c7e6e4a2ab4f1658222c19978f6601b35b Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 1 Jul 2020 22:41:05 +0200 Subject: Bump version number. --- interimap | 2 +- pullimap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interimap b/interimap index f9be72d..7fce80e 100755 --- a/interimap +++ b/interimap @@ -22,7 +22,7 @@ use v5.14.2; use strict; use warnings; -our $VERSION = '0.5'; +our $VERSION = '0.5.1'; my $NAME = 'interimap'; my $DATABASE_VERSION = 1; use Getopt::Long qw/:config posix_default no_ignore_case gnu_compat diff --git a/pullimap b/pullimap index ee2168d..b7a62e9 100755 --- a/pullimap +++ b/pullimap @@ -22,7 +22,7 @@ use v5.20.2; use strict; use warnings; -our $VERSION = '0.4'; +our $VERSION = '0.5.1'; my $NAME = 'pullimap'; use Errno 'EINTR'; -- cgit v1.2.3 From a1c089b997ebf705a9023b4f0f97327e5bd2814e Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Wed, 1 Jul 2020 22:41:28 +0200 Subject: Makefile: Major refactoring, add install and uninstall targets. Honor BUILD_DOCDIR and DESTDIR variables. Also, remove the `use lib` statement from our executables. --- Changelog | 3 +++ Makefile | 52 ++++++++++++++++++++++++++++++++------------- interimap | 1 - pullimap | 1 - tests/db-exclusive-lock/t | 4 ++-- tests/db-no-create--watch/t | 2 +- 6 files changed, 43 insertions(+), 20 deletions(-) diff --git a/Changelog b/Changelog index 4207069..6b3be44 100644 --- a/Changelog +++ b/Changelog @@ -2,6 +2,9 @@ interimap (0.5.1) UNRELEASED; + pullimap: also compare RFC 5322 date and envelope information in mailbox comparison tests. + + interimap, pullimap: remove `use lib` statement. + * Makefile: major refactoring, add install and uninstall targets, honor + BUILD_DOCDIR and DESTDIR variables. -- Guilhem Moulin Wed, 01 Jul 2020 21:24:50 +0200 diff --git a/Makefile b/Makefile index b232602..35f1334 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,25 @@ +DESTDIR ?= /usr/local +BUILD_DOCDIR ?= ./doc +CSS ?= /usr/share/javascript/bootstrap4/css/bootstrap.css +HTML_TEMPLATE ?= ./doc/template.html + +HTML_FILES = $(addprefix $(BUILD_DOCDIR)/,$(patsubst ./doc/%.md,%.html,$(wildcard ./doc/*.md))) +MANUAL_FILES = $(addprefix $(BUILD_DOCDIR)/,$(patsubst ./doc/%.md,%,$(wildcard ./doc/*.[1-9].md))) + all: manual -MANUALS = $(patsubst %.md,%,$(wildcard ./doc/*.[1-9].md)) -manual: $(MANUALS) +manual: $(MANUAL_FILES) +html: $(HTML_FILES) # upper case the headers and remove the links -$(MANUALS): %: %.md +$(MANUAL_FILES): $(BUILD_DOCDIR)/%: ./doc/%.md pandoc -f markdown -t json -- "$<" | ./pandoc2man.jq | pandoc -s -f json -t man+smart -o "$@" test: @./tests/run-all -HTML_ROOTDIR ?= ./doc -CSS ?= /usr/share/javascript/bootstrap/css/bootstrap.min.css -HTML_TEMPLATE ?= ./doc/template.html - -HTML_FILES = $(addprefix $(HTML_ROOTDIR)/,$(patsubst ./doc/%.md,%.html,$(wildcard ./doc/*.md))) -html: $(HTML_FILES) - -## CSS="https://guilhem.org/static/css/bootstrap.min.css" HTML_ROOTDIR="$XDG_RUNTIME_DIR/Downloads" make html -$(HTML_ROOTDIR)/%.html: ./doc/%.md $(HTML_TEMPLATE) +## make html CSS="https://guilhem.org/static/css/bootstrap.min.css" BUILD_DOCDIR="$XDG_RUNTIME_DIR/Downloads" +$(HTML_FILES): $(BUILD_DOCDIR)/%.html: ./doc/%.md $(HTML_TEMPLATE) mtime="$$(git --no-pager log -1 --pretty="format:%ct" -- "$<" 2>/dev/null)"; \ [ -n "$$mtime" ] || mtime="$$(date +%s -r "$<")"; \ [ "$<" = "doc/index.md" ] && parent="" || parent="./index.html"; \ @@ -31,9 +32,30 @@ $(HTML_ROOTDIR)/%.html: ./doc/%.md $(HTML_TEMPLATE) doc: manual html -install: +prefix ?= $(DESTDIR) +exec_prefix ?= $(prefix) +bindir ?= $(exec_prefix)/bin +libdir ?= $(exec_prefix)/lib +datarootdir ?= $(DESTDIR)/share +mandir ?= $(datarootdir)/man +man1dir ?= $(mandir)/man1 + +install: all + install -m0755 -vDt $(bindir) ./interimap ./pullimap + install -m0644 -vDT ./lib/Net/IMAP/InterIMAP.pm $(datarootdir)/perl5/Net/IMAP/InterIMAP.pm + install -m0644 -vDt $(man1dir) $(BUILD_DOCDIR)/interimap.1 $(BUILD_DOCDIR)/pullimap.1 + install -m0644 -vDt $(datarootdir)/doc/pullimap ./pullimap.sample + install -m0644 -vDt $(datarootdir)/doc/interimap ./interimap.sample ./doc/getting-started.md ./doc/multi-account.md README + install -m0644 -vDt $(libdir)/systemd/user ./*.service + +uninstall: + rm -vf -- $(bindir)/interimap $(man1dir)/interimap.1 $(libdir)/systemd/user/interimap*.service + rm -vf -- $(bindir)/pullimap $(man1dir)/pullimap.1 $(libdir)/systemd/user/pullimap*.service + rm -vf -- $(datarootdir)/perl5/Net/IMAP/InterIMAP.pm + rm -rvf -- $(datarootdir)/doc/interimap $(datarootdir)/doc/pullimap + rm -vf -- $(BUILD_DOCDIR)/interimap.1 $(BUILD_DOCDIR)/pullimap.1 clean: - rm -f $(MANUALS) $(HTML_FILES) + rm -vf -- $(MANUAL_FILES) $(HTML_FILES) -.PHONY: all manual html doc test install clean +.PHONY: all manual html doc test install uninstall clean diff --git a/interimap b/interimap index 7fce80e..6448d2b 100755 --- a/interimap +++ b/interimap @@ -32,7 +32,6 @@ use DBD::SQLite::Constants ':file_open'; use Fcntl qw/F_GETFD F_SETFD FD_CLOEXEC/; use List::Util 'first'; -use lib 'lib'; use Net::IMAP::InterIMAP 0.0.5 qw/xdg_basedir read_config compact_set/; # Clean up PATH diff --git a/pullimap b/pullimap index b7a62e9..d1c607a 100755 --- a/pullimap +++ b/pullimap @@ -31,7 +31,6 @@ use Getopt::Long qw/:config posix_default no_ignore_case gnu_getopt auto_version use List::Util 'first'; use Socket qw/PF_INET PF_INET6 SOCK_STREAM IPPROTO_TCP/; -use lib 'lib'; use Net::IMAP::InterIMAP 0.0.5 qw/xdg_basedir read_config compact_set/; # Clean up PATH diff --git a/tests/db-exclusive-lock/t b/tests/db-exclusive-lock/t index 88172c9..c2df4b5 100644 --- a/tests/db-exclusive-lock/t +++ b/tests/db-exclusive-lock/t @@ -10,7 +10,7 @@ sleep .5 # subsequent runs fail as we can't acquire the exclusive lock ! interimap || error -grep -Fx "DBD::SQLite::db do failed: database is locked at ./interimap line 177." <"$STDERR" \ - || error "Is \$DBH->do(\"PRAGMA locking_mode = EXCLUSIVE\"); at line 177?" +grep -Fx "DBD::SQLite::db do failed: database is locked at ./interimap line 176." <"$STDERR" \ + || error "Is \$DBH->do(\"PRAGMA locking_mode = EXCLUSIVE\"); at line 176?" # vim: set filetype=sh : diff --git a/tests/db-no-create--watch/t b/tests/db-no-create--watch/t index 89f1e3e..a8ea07e 100644 --- a/tests/db-no-create--watch/t +++ b/tests/db-no-create--watch/t @@ -1,6 +1,6 @@ ! interimap --watch=60 || error -grep -Ex "DBI connect\(.*\) failed: unable to open database file at \./interimap line 173\." <"$STDERR" || error +grep -Ex "DBI connect\(.*\) failed: unable to open database file at \./interimap line 172\." <"$STDERR" || error test \! -e "$XDG_DATA_HOME/interimap/remote.db" || error # vim: set filetype=sh : -- cgit v1.2.3 From 95df46e54ce090506cdce1c54616ea849670c2db Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Thu, 2 Jul 2020 00:15:18 +0200 Subject: Prepare new release. --- Changelog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Changelog b/Changelog index 6b3be44..43648d0 100644 --- a/Changelog +++ b/Changelog @@ -1,4 +1,4 @@ -interimap (0.5.1) UNRELEASED; +interimap (0.5.1) upstream; + pullimap: also compare RFC 5322 date and envelope information in mailbox comparison tests. @@ -6,7 +6,7 @@ interimap (0.5.1) UNRELEASED; * Makefile: major refactoring, add install and uninstall targets, honor BUILD_DOCDIR and DESTDIR variables. - -- Guilhem Moulin Wed, 01 Jul 2020 21:24:50 +0200 + -- Guilhem Moulin Thu, 02 Jul 2020 00:15:03 +0200 interimap (0.5) upstream; -- cgit v1.2.3