From a3e712fa86a1f6df02a8be9f620f33ed9189069d Mon Sep 17 00:00:00 2001 From: Mark Walters Date: Tue, 15 Nov 2016 19:48:45 +0000 Subject: [PATCH 1/5] emacs: add compatibility functions for emacs 23 Some of the recent changes to the emacs code have used functions introduced in emacs 24. The functions used are read-char-choice and setq-local. This changeset adds a file notmuch-compat.el which contains compatibility functions so that it should work on emacs 23. Note, since these functions are taken almost unchanged from the emacs source they are copyright the Free Software Foundation, and the header in the file reflects that. --- emacs/Makefile.local | 1 + emacs/notmuch-address.el | 4 +- emacs/notmuch-company.el | 3 +- emacs/notmuch-compat.el | 73 ++++++++++++++++++++++++++++++++++++ emacs/notmuch-lib.el | 1 + emacs/notmuch-maildir-fcc.el | 4 +- 6 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 emacs/notmuch-compat.el diff --git a/emacs/Makefile.local b/emacs/Makefile.local index 2d6aedbd..558e68f2 100644 --- a/emacs/Makefile.local +++ b/emacs/Makefile.local @@ -3,6 +3,7 @@ dir := emacs emacs_sources := \ $(dir)/notmuch-lib.el \ + $(dir)/notmuch-compat.el \ $(dir)/notmuch-parser.el \ $(dir)/notmuch.el \ $(dir)/notmuch-query.el \ diff --git a/emacs/notmuch-address.el b/emacs/notmuch-address.el index 10eaab19..34793dbe 100644 --- a/emacs/notmuch-address.el +++ b/emacs/notmuch-address.el @@ -136,11 +136,11 @@ toggles the setting in this buffer." (interactive) (if (local-variable-p 'notmuch-address-command) (kill-local-variable 'notmuch-address-command) - (setq-local notmuch-address-command 'internal)) + (notmuch-setq-local notmuch-address-command 'internal)) (if (boundp 'company-idle-delay) (if (local-variable-p 'company-idle-delay) (kill-local-variable 'company-idle-delay) - (setq-local company-idle-delay nil)))) + (notmuch-setq-local company-idle-delay nil)))) (defun notmuch-address-matching (substring) "Returns a list of completion candidates matching SUBSTRING. diff --git a/emacs/notmuch-company.el b/emacs/notmuch-company.el index 168315ff..5d75c145 100644 --- a/emacs/notmuch-company.el +++ b/emacs/notmuch-company.el @@ -28,6 +28,7 @@ ;;; Code: (eval-when-compile (require 'cl)) +(require 'notmuch-lib) (defvar notmuch-company-last-prefix nil) (make-variable-buffer-local 'notmuch-company-last-prefix) @@ -53,7 +54,7 @@ ;; internal completion) can still be accessed via standard company ;; functions, e.g., company-complete. (unless (eq notmuch-address-command 'internal) - (setq-local company-idle-delay nil))) + (notmuch-setq-local company-idle-delay nil))) ;;;###autoload (defun notmuch-company (command &optional arg &rest _ignore) diff --git a/emacs/notmuch-compat.el b/emacs/notmuch-compat.el new file mode 100644 index 00000000..c3d827af --- /dev/null +++ b/emacs/notmuch-compat.el @@ -0,0 +1,73 @@ +;; Compatibility functions for emacs 23 and 24 pre 24.4 + +;; The functions in this file are copied from eamcs 24.4 and are +;; Copyright (C) 1985-1986, 1992, 1994-1995, 1999-2014 Free Software +;; Foundation, Inc. + +(if (fboundp 'setq-local) + (defalias 'notmuch-setq-local 'setq-local) + (defmacro notmuch-setq-local (var val) + "Set variable VAR to value VAL in current buffer. + +Backport of setq-local for emacs without setq-local (pre 24.3)." + `(set (make-local-variable ',var) ,val))) + +(if (fboundp 'read-char-choice) + (defalias 'notmuch-read-char-choice 'read-char-choice) + (defun notmuch-read-char-choice (prompt chars &optional inhibit-keyboard-quit) + "Read and return one of CHARS, prompting for PROMPT. +Any input that is not one of CHARS is ignored. + +If optional argument INHIBIT-KEYBOARD-QUIT is non-nil, ignore +keyboard-quit events while waiting for a valid input. + +This is an exact copy of this function from emacs 24 for use on +emacs 23, except with the one emacs 24 only function it calls +inlined." + (unless (consp chars) + (error "Called `read-char-choice' without valid char choices")) + (let (char done show-help (helpbuf " *Char Help*")) + (let ((cursor-in-echo-area t) + (executing-kbd-macro executing-kbd-macro) + (esc-flag nil)) + (save-window-excursion ; in case we call help-form-show + (while (not done) + (unless (get-text-property 0 'face prompt) + (setq prompt (propertize prompt 'face 'minibuffer-prompt))) + (setq char (let ((inhibit-quit inhibit-keyboard-quit)) + (read-key prompt))) + (and show-help (buffer-live-p (get-buffer helpbuf)) + (kill-buffer helpbuf)) + (cond + ((not (numberp char))) + ;; If caller has set help-form, that's enough. + ;; They don't explicitly have to add help-char to chars. + ((and help-form + (eq char help-char) + (setq show-help t) + ;; This is an inlined copy of help-form-show as that + ;; was introduced in emacs 24 too. + (let ((msg (eval help-form))) + (if (stringp msg) + (with-output-to-temp-buffer " *Char Help*" + (princ msg)))))) + ((memq char chars) + (setq done t)) + ((and executing-kbd-macro (= char -1)) + ;; read-event returns -1 if we are in a kbd macro and + ;; there are no more events in the macro. Attempt to + ;; get an event interactively. + (setq executing-kbd-macro nil)) + ((not inhibit-keyboard-quit) + (cond + ((and (null esc-flag) (eq char ?\e)) + (setq esc-flag t)) + ((memq char '(?\C-g ?\e)) + (keyboard-quit)))))))) + ;; Display the question with the answer. But without cursor-in-echo-area. + (message "%s%s" prompt (char-to-string char)) + char))) + +;; End of compatibility functions + +(provide 'notmuch-compat) diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el index 2f015b0d..23bd81c1 100644 --- a/emacs/notmuch-lib.el +++ b/emacs/notmuch-lib.el @@ -27,6 +27,7 @@ (require 'mm-view) (require 'mm-decode) (require 'cl) +(require 'notmuch-compat) (unless (require 'notmuch-version nil t) (defconst notmuch-emacs-version "unknown" diff --git a/emacs/notmuch-maildir-fcc.el b/emacs/notmuch-maildir-fcc.el index ea75bb9e..a754b60c 100644 --- a/emacs/notmuch-maildir-fcc.el +++ b/emacs/notmuch-maildir-fcc.el @@ -249,7 +249,7 @@ If CREATE is non-nil then create the folder if necessary." ;; typo, or just the user want a new folder, let the user decide ;; how to deal with it. (error - (let ((response (read-char-choice + (let ((response (notmuch-read-char-choice "Insert failed: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? " '(?r ?c ?i ?e)))) (case response @@ -335,7 +335,7 @@ if needed." ;; fix it in some way. (let* ((prompt (format "Fcc %s is not a maildir: (r)etry, (c)reate folder, (i)gnore, or (e)dit the header? " fcc-header)) - (response (read-char-choice prompt '(?r ?c ?i ?e)))) + (response (notmuch-read-char-choice prompt '(?r ?c ?i ?e)))) (case response (?r (notmuch-maildir-fcc-file-fcc fcc-header)) (?c (if (file-writable-p fcc-header) From 297d27e9f9f0341e40bfd9442dde5fdd1ad969ff Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 11 Nov 2016 07:46:50 -0400 Subject: [PATCH 2/5] emacs: generate notmuch-pkg.el This file contains metadata for the built in (as of emacs 24) packaging system. --- Makefile.local | 3 +++ emacs/.gitignore | 1 + emacs/Makefile.local | 8 +++++++- emacs/notmuch-pkg.el.tmpl | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 emacs/notmuch-pkg.el.tmpl diff --git a/Makefile.local b/Makefile.local index d1b0585f..0a122ab0 100644 --- a/Makefile.local +++ b/Makefile.local @@ -19,9 +19,12 @@ DATE:=$(shell date +%F) endif VERSION:=$(shell cat ${srcdir}/version) +ELPA_VERSION:=$(subst ~,_,$(VERSION)) ifeq ($(filter release release-message pre-release update-versions,$(MAKECMDGOALS)),) ifeq ($(IS_GIT),yes) VERSION:=$(shell git --git-dir=${srcdir}/.git describe --abbrev=7 --match '[0-9.]*'|sed -e s/_/~/ -e s/-/+/ -e s/-/~/) +# drop the ~g$sha1 part +ELPA_VERSION:=$(word 1,$(subst ~, ,$(VERSION))) # Write the file 'version.stamp' in case its contents differ from $(VERSION) FILE_VERSION:=$(shell test -f version.stamp && read vs < version.stamp || vs=; echo $$vs) ifneq ($(FILE_VERSION),$(VERSION)) diff --git a/emacs/.gitignore b/emacs/.gitignore index 9fa1c44e..8e15eed7 100644 --- a/emacs/.gitignore +++ b/emacs/.gitignore @@ -1,3 +1,4 @@ .eldeps* *.elc notmuch-version.el +notmuch-pkg.el diff --git a/emacs/Makefile.local b/emacs/Makefile.local index 558e68f2..dfa7c1f1 100644 --- a/emacs/Makefile.local +++ b/emacs/Makefile.local @@ -28,6 +28,12 @@ $(dir)/notmuch-version.el: $(srcdir)/$(dir)/notmuch-version.el.tmpl @sed -e 's/%AG%/Generated file (from $( $@ +$(dir)/notmuch-pkg.el: $(srcdir)/$(dir)/notmuch-pkg.el.tmpl + @sed -e 's/%AG%/Generated file (from $( $@ + +all: $(dir)/notmuch-pkg.el +install-emacs: $(dir)/notmuch-pkg.el emacs_images := \ $(srcdir)/$(dir)/notmuch-logo.png @@ -85,4 +91,4 @@ endif mkdir -p "$(DESTDIR)$(emacsetcdir)" install -m0644 $(emacs_images) "$(DESTDIR)$(emacsetcdir)" -CLEAN := $(CLEAN) $(emacs_bytecode) $(dir)/notmuch-version.el +CLEAN := $(CLEAN) $(emacs_bytecode) $(dir)/notmuch-version.el $(dir)/notmuch-pkg.el diff --git a/emacs/notmuch-pkg.el.tmpl b/emacs/notmuch-pkg.el.tmpl new file mode 100644 index 00000000..de97baac --- /dev/null +++ b/emacs/notmuch-pkg.el.tmpl @@ -0,0 +1,6 @@ +;; %AG% +(define-package + "notmuch" + %VERSION% + "Emacs based front-end (MUA) for notmuch" + nil) From 6e1628decb58b2bab1c15bb1671892580ed4b64e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 11 Nov 2016 07:46:51 -0400 Subject: [PATCH 3/5] debian: convert to use dh-elpa This packaging helper eliminates most of the boilerplate from packaging emacs extensions for debian. It requires package.el compatible metadata. --- debian/control | 14 ++++---- debian/elpa-notmuch.elpa | 1 + debian/notmuch-emacs.dirs | 1 - debian/notmuch-emacs.emacsen-compat | 1 - debian/notmuch-emacs.emacsen-install | 48 ---------------------------- debian/notmuch-emacs.emacsen-remove | 34 -------------------- debian/notmuch-emacs.install | 1 - debian/notmuch-emacs.postinst | 7 ---- debian/notmuch-emacs.prerm | 3 -- debian/rules | 2 +- 10 files changed, 9 insertions(+), 103 deletions(-) create mode 100644 debian/elpa-notmuch.elpa delete mode 100644 debian/notmuch-emacs.dirs delete mode 100644 debian/notmuch-emacs.emacsen-compat delete mode 100755 debian/notmuch-emacs.emacsen-install delete mode 100755 debian/notmuch-emacs.emacsen-remove delete mode 100644 debian/notmuch-emacs.install delete mode 100644 debian/notmuch-emacs.postinst delete mode 100644 debian/notmuch-emacs.prerm diff --git a/debian/control b/debian/control index 4027a79b..a8c7ce20 100644 --- a/debian/control +++ b/debian/control @@ -17,6 +17,7 @@ Build-Depends: python-all (>= 2.6.6-3~), python3-all (>= 3.1.2-7~), dh-python, + dh-elpa (>= 1.3), python-sphinx (>= 1.0), ruby, ruby-dev (>>1:1.9.3~), emacs24-nox | emacs24 (>=24~) | emacs24-lucid (>=24~) | @@ -111,13 +112,12 @@ Description: Ruby interface to the notmuch mail search and index library Package: notmuch-emacs Architecture: all -Section: mail -Breaks: notmuch (<<0.6~254~) -Replaces: notmuch (<<0.6~254~) -Depends: ${misc:Depends}, notmuch (>= ${source:Version}), - emacs23 (>= 23~) | emacs23-nox (>=23~) | emacs23-lucid (>=23~) | - emacs24 (>= 24~) | emacs24-nox (>=24~) | emacs24-lucid (>=24~), - emacsen-common (>= 2.0.8) +Description: thread-based email index, search and tagging (transitional package) + This dummy package help ease transition to the new package elpa-notmuch + +Package: elpa-notmuch +Architecture: all +Depends: ${misc:Depends}, ${elpa:Depends} Description: thread-based email index, search and tagging (emacs interface) Notmuch is a system for indexing, searching, reading, and tagging large collections of email messages in maildir or mh format. It uses diff --git a/debian/elpa-notmuch.elpa b/debian/elpa-notmuch.elpa new file mode 100644 index 00000000..b4e9e172 --- /dev/null +++ b/debian/elpa-notmuch.elpa @@ -0,0 +1 @@ +emacs/*.el diff --git a/debian/notmuch-emacs.dirs b/debian/notmuch-emacs.dirs deleted file mode 100644 index caeb4003..00000000 --- a/debian/notmuch-emacs.dirs +++ /dev/null @@ -1 +0,0 @@ -usr/share/emacs/site-lisp/notmuch diff --git a/debian/notmuch-emacs.emacsen-compat b/debian/notmuch-emacs.emacsen-compat deleted file mode 100644 index 573541ac..00000000 --- a/debian/notmuch-emacs.emacsen-compat +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/debian/notmuch-emacs.emacsen-install b/debian/notmuch-emacs.emacsen-install deleted file mode 100755 index cce95c34..00000000 --- a/debian/notmuch-emacs.emacsen-install +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# /usr/lib/emacsen-common/packages/install/notmuch-emacs -set -e - -FLAVOR=$1 -PACKAGE=notmuch - -case "${FLAVOR}" in - emacs) - return 0 - ;; - xemacs*|emacs2[12]) - # patches welcome. - echo install/${PACKAGE}: skipping install for unsupported emacsen flavor ${FLAVOR} - exit 0 - ;; - *) - echo install/${PACKAGE}: Handling install for emacsen flavor ${FLAVOR} -esac - - -elc_dir=/usr/share/${FLAVOR}/site-lisp/${PACKAGE} -el_dir=/usr/share/emacs/site-lisp/${PACKAGE} - -byte_compile_options="--quick --directory=${el_dir} -batch -f batch-byte-compile" - -echo install/${PACKAGE}: byte-compiling for ${FLAVOR} - -[ -d ${elc_dir} ] || mkdir ${elc_dir} - -# Create symlinks to the .el files (see section 6E in debian-emacs -# polcy). This makes complation easy, and also allows find-function -# and find-library to work properly. -(cd ${elc_dir} && ln -sf ${el_dir}/*.el .) - -# Byte compile them -(cd ${elc_dir} - set +e - ${FLAVOR} ${byte_compile_options} *.el > Install.log 2>&1 - if test $? -ne 0 - then - cat Install.log - exit 1 - fi - set -e - gzip -9f Install.log) - -exit 0; diff --git a/debian/notmuch-emacs.emacsen-remove b/debian/notmuch-emacs.emacsen-remove deleted file mode 100755 index a5553209..00000000 --- a/debian/notmuch-emacs.emacsen-remove +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -# /usr/lib/emacsen-common/packages/remove/notmuch - -set -e - -FLAVOR=$1 -PACKAGE=notmuch -elc_dir=/usr/share/${FLAVOR}/site-lisp/${PACKAGE} - -case "${FLAVOR}" in - emacs) - return 0 - ;; - xemacs*|emacs2[12]) - # patches welcome. - echo install/${PACKAGE}: skipping removal for unsupported emacsen flavor ${FLAVOR} - exit 0 - ;; - *) - echo remove/${PACKAGE}: Handling removal for emacsen flavor ${FLAVOR} -esac - -echo remove/${PACKAGE}: Handling removal of emacsen flavor ${FLAVOR} - -echo emacsen-common: purging byte-compiled files for ${FLAVOR} -rm -f ${elc_dir}/*.elc -rm -f ${elc_dir}/*.el -rm -f ${elc_dir}/Install.log* -if test -e "${elc_dir}" -then - rmdir --ignore-fail-on-non-empty "${elc_dir}" -fi - -exit 0; diff --git a/debian/notmuch-emacs.install b/debian/notmuch-emacs.install deleted file mode 100644 index c73aecef..00000000 --- a/debian/notmuch-emacs.install +++ /dev/null @@ -1 +0,0 @@ -usr/share/emacs/site-lisp/notmuch/*.el diff --git a/debian/notmuch-emacs.postinst b/debian/notmuch-emacs.postinst deleted file mode 100644 index 1237237d..00000000 --- a/debian/notmuch-emacs.postinst +++ /dev/null @@ -1,7 +0,0 @@ -dir="/var/lib/emacsen-common/state/package/installed" -mkdir -p -m 0755 ${dir} -touch ${dir}/notmuch-emacs -#DEBHELPER# -if [ -d /0755 ]; then - rmdir /0755 || true -fi diff --git a/debian/notmuch-emacs.prerm b/debian/notmuch-emacs.prerm deleted file mode 100644 index 5e2758d3..00000000 --- a/debian/notmuch-emacs.prerm +++ /dev/null @@ -1,3 +0,0 @@ -#DEBHELPER# -dir="/var/lib/emacsen-common/state/package/installed" -rm -f ${dir}/notmuch-emacs diff --git a/debian/rules b/debian/rules index 04f0062a..15710a89 100755 --- a/debian/rules +++ b/debian/rules @@ -3,7 +3,7 @@ python3_all = py3versions -s | xargs -n1 | xargs -t -I {} env {} %: - dh $@ --with python2,python3 + dh $@ --with python2,python3,elpa override_dh_auto_configure: ./configure --prefix=/usr \ From b88fe84bbce60742fad47f30e67238c7ef98b90e Mon Sep 17 00:00:00 2001 From: David Bremner Date: Wed, 16 Nov 2016 21:52:50 -0400 Subject: [PATCH 4/5] version: bump to 0.23.2 --- bindings/python/notmuch/version.py | 2 +- version | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bindings/python/notmuch/version.py b/bindings/python/notmuch/version.py index 4bbe0cdc..5f234565 100644 --- a/bindings/python/notmuch/version.py +++ b/bindings/python/notmuch/version.py @@ -1,3 +1,3 @@ # this file should be kept in sync with ../../../version -__VERSION__ = '0.23.1' +__VERSION__ = '0.23.2' SOVERSION = '4' diff --git a/version b/version index 610e2872..fda96dcf 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.23.1 +0.23.2 From 0a932be13cc45fc2692ec0ae8a0b9c0d5f0df256 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Fri, 11 Nov 2016 07:46:52 -0400 Subject: [PATCH 5/5] debian: changelog stanza for 0.23.2-1 --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 2c7cd234..66634034 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +notmuch (0.23.2-1) unstable; urgency=medium + + * New upstream bugfix release + * Convert notmuch-emacs to dh-elpa, new binary package elpa-notmuch + * Bug fix: "maintainer script(s) do not start on #!", thanks to + treinen@debian.org; (Closes: #843287). + + -- David Bremner Thu, 10 Nov 2016 22:36:04 -0400 + notmuch (0.23.1-1) unstable; urgency=medium * New upstream bugfix release