[WIP-PATCH gnome-team] gnu: deja-dup: update to 45.2.

  • Done
  • quality assurance status badge
Details
2 participants
  • Liliana Marie Prikler
  • Vivien Kraus
Owner
unassigned
Submitted by
Vivien Kraus
Severity
normal

Debbugs page

Vivien Kraus wrote 1 years ago
(address . guix-patches@gnu.org)
be05c4b60a319eec9c62d0e7c720127a55cc5c8b.1705234409.git.vivien@planete-kraus.eu
* gnu/packages/gnome.scm (deja-dup): Update to 45.2.
[arguments]: Convert to list of G-Expressions.

Change-Id: I60823287827b0690796fec7955bcf9682acd88b3
---

Dear Guix,

Due to an update of duplicity, deja-dup does not know how to invoke the
duplicity program. The newer version, 45.2, fixes the duplicity invocation,
but now I face a new problem: the deja-dup GUI opens a window displaying an
error:

Traceback (innermost last):
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/bin/.duplicity-real", line 62, in <module>
with_tempdir(main)
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/bin/.duplicity-real", line 53, in with_tempdir
fn()
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/lib/python3.10/site-packages/duplicity/dup_main.py", line 1545, in main
action = cli_main.process_command_line(sys.argv[1:])
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/lib/python3.10/site-packages/duplicity/cli_main.py", line 281, in process_command_line
config.backend = backend.get_backend(remote_url)
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/lib/python3.10/site-packages/duplicity/backend.py", line 207, in get_backend
obj = get_backend_object(url_string)
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/lib/python3.10/site-packages/duplicity/backend.py", line 195, in get_backend_object
return factory(pu)
File "/gnu/store/f3w57wm0i8q4bvq6xnpsf9v744i7v38l-duplicity-2.1.4/lib/python3.10/site-packages/duplicity/backends/giobackend.py", line 57, in __init__
class DupMountOperation(Gio.MountOperation):
File "/gnu/store/w7vbks7gzqadxd4ccz7vscsj9w1899gg-python-pygobject-3.46.0/lib/python3.10/site-packages/gi/types.py", line 226, in __init__
super(GObjectMeta, cls).__init__(name, bases, dict_)
File "/gnu/store/w7vbks7gzqadxd4ccz7vscsj9w1899gg-python-pygobject-3.46.0/lib/python3.10/site-packages/gi/types.py", line 205, in __init__
cls._type_register(cls.__dict__)
File "/gnu/store/w7vbks7gzqadxd4ccz7vscsj9w1899gg-python-pygobject-3.46.0/lib/python3.10/site-packages/gi/types.py", line 217, in _type_register
_gi.type_register(cls, namespace.get('__gtype_name__'))
RuntimeError: could not create new GType: duplicity+backends+giobackend+DupMountOperation (subclass of GMountOperation)

I’m afraid duplicity requires some GNOME libraries for its backend now, or
duplicity or deja-dup now require some more glib wrapping.

Do you have an idea?

Best regards,

Vivien

gnu/packages/gnome.scm | 73 +++++++++++++++++++++---------------------
1 file changed, 37 insertions(+), 36 deletions(-)

Toggle diff (96 lines)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index d17676f53b..168b9d8abf 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1823,50 +1823,51 @@ (define-public gnome-menus
(define-public deja-dup
(package
(name "deja-dup")
- (version "43.4")
+ (version "45.2")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
version "/deja-dup-" version ".tar.bz2"))
(sha256
(base32
- "1mr2g009w0zm5rj8dg1k77c7zdwylih2yszm8vh8wkw6al6bzfh3"))))
+ "000cwy1haiglkvn5plmhrs2a1fhpcpw6z4mdzck7ybmky795amza"))))
(build-system meson-build-system)
(arguments
- `(#:glib-or-gtk? #t
- #:configure-flags
- (list
- ;; Otherwise, the RUNPATH will lack the final path component.
- (string-append "-Dc_link_args=-Wl,-rpath="
- (assoc-ref %outputs "out") "/lib/deja-dup"))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((python (assoc-ref inputs "python")))
- (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
- "libdeja/tests/scripts/instance-error.test")
- (("/bin/rm")
- (which "rm")))
- (substitute* "libdeja/tests/runner.vala"
- (("/bin/sh")
- (which "sh")))
- (substitute* "libdeja/tests/scripts/instance-error.test"
- (("`which python3`")
- (string-append python "/bin/python3"))))))
- (add-after 'unpack 'patch-libgpg-error
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
- (substitute* "meson.build"
- (("(gpgerror_libs = ).*" _ var)
- (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
- (add-after 'install 'wrap-program
- (lambda* (#:key inputs outputs #:allow-other-keys)
- ;; Add duplicity to the search path
- (wrap-program (string-append (assoc-ref outputs "out")
- "/bin/deja-dup")
- `("PATH" ":" prefix
- (,(string-append (assoc-ref inputs "duplicity") "/bin")))))))))
+ (list
+ #:glib-or-gtk? #t
+ #:configure-flags
+ #~(list
+ ;; Otherwise, the RUNPATH will lack the final path component.
+ (string-append "-Dc_link_args=-Wl,-rpath="
+ (assoc-ref %outputs "out") "/lib/deja-dup"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((python (assoc-ref inputs "python")))
+ (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
+ "libdeja/tests/scripts/instance-error.test")
+ (("/bin/rm")
+ (which "rm")))
+ (substitute* "libdeja/tests/runner.vala"
+ (("/bin/sh")
+ (which "sh")))
+ (substitute* "libdeja/tests/scripts/instance-error.test"
+ (("`which python3`")
+ (string-append python "/bin/python3"))))))
+ (add-after 'unpack 'patch-libgpg-error
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
+ (substitute* "meson.build"
+ (("(gpgerror_libs = ).*" _ var)
+ (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Add duplicity to the search path
+ (wrap-program (string-append (assoc-ref outputs "out")
+ "/bin/deja-dup")
+ `("PATH" ":" prefix
+ (,(dirname (search-input-file inputs "/bin/duplicity"))))))))))
(inputs
(list bash-minimal
duplicity

base-commit: 2cbb1a6e1e2679c7db74b6b906d223fb3661d09f
--
2.41.0
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v2 0/2] Update deja-dup (and fix duplicity)
(address . 68447@debbugs.gnu.org)
cover.1705957508.git.vivien@planete-kraus.eu
Dear guix,

The new duplicity needs to be wrapped!

I’m not sure that’s exactly how you should do it, but I could resume my long
interrupted backups tonight.

Best regards,

Vivien

Vivien Kraus (2):
gnu: duplicity: Wrap for GI_TYPELIB_PATH.
gnu: deja-dup: update to 45.2.

gnu/packages/backup.scm | 8 ++++-
gnu/packages/gnome.scm | 73 +++++++++++++++++++++--------------------
2 files changed, 44 insertions(+), 37 deletions(-)


base-commit: 49897f2dde7f469c83c496fad2699d3a05f72701
--
2.41.0
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v2 2/2] gnu: deja-dup: update to 45.2.
(address . 68447@debbugs.gnu.org)
5bca88c6bdbd839be356e3c6532a32e9bf03b847.1705957508.git.vivien@planete-kraus.eu
* gnu/packages/gnome.scm (deja-dup): Update to 45.2.
[arguments]: Convert to list of G-Expressions.

Change-Id: I60823287827b0690796fec7955bcf9682acd88b3
---
gnu/packages/gnome.scm | 73 +++++++++++++++++++++---------------------
1 file changed, 37 insertions(+), 36 deletions(-)

Toggle diff (94 lines)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 3d89f06d6a..75e2e0efb8 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1823,50 +1823,51 @@ (define-public gnome-menus
(define-public deja-dup
(package
(name "deja-dup")
- (version "43.4")
+ (version "45.2")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
version "/deja-dup-" version ".tar.bz2"))
(sha256
(base32
- "1mr2g009w0zm5rj8dg1k77c7zdwylih2yszm8vh8wkw6al6bzfh3"))))
+ "000cwy1haiglkvn5plmhrs2a1fhpcpw6z4mdzck7ybmky795amza"))))
(build-system meson-build-system)
(arguments
- `(#:glib-or-gtk? #t
- #:configure-flags
- (list
- ;; Otherwise, the RUNPATH will lack the final path component.
- (string-append "-Dc_link_args=-Wl,-rpath="
- (assoc-ref %outputs "out") "/lib/deja-dup"))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((python (assoc-ref inputs "python")))
- (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
- "libdeja/tests/scripts/instance-error.test")
- (("/bin/rm")
- (which "rm")))
- (substitute* "libdeja/tests/runner.vala"
- (("/bin/sh")
- (which "sh")))
- (substitute* "libdeja/tests/scripts/instance-error.test"
- (("`which python3`")
- (string-append python "/bin/python3"))))))
- (add-after 'unpack 'patch-libgpg-error
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
- (substitute* "meson.build"
- (("(gpgerror_libs = ).*" _ var)
- (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
- (add-after 'install 'wrap-program
- (lambda* (#:key inputs outputs #:allow-other-keys)
- ;; Add duplicity to the search path
- (wrap-program (string-append (assoc-ref outputs "out")
- "/bin/deja-dup")
- `("PATH" ":" prefix
- (,(string-append (assoc-ref inputs "duplicity") "/bin")))))))))
+ (list
+ #:glib-or-gtk? #t
+ #:configure-flags
+ #~(list
+ ;; Otherwise, the RUNPATH will lack the final path component.
+ (string-append "-Dc_link_args=-Wl,-rpath="
+ (assoc-ref %outputs "out") "/lib/deja-dup"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((python (assoc-ref inputs "python")))
+ (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
+ "libdeja/tests/scripts/instance-error.test")
+ (("/bin/rm")
+ (which "rm")))
+ (substitute* "libdeja/tests/runner.vala"
+ (("/bin/sh")
+ (which "sh")))
+ (substitute* "libdeja/tests/scripts/instance-error.test"
+ (("`which python3`")
+ (string-append python "/bin/python3"))))))
+ (add-after 'unpack 'patch-libgpg-error
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
+ (substitute* "meson.build"
+ (("(gpgerror_libs = ).*" _ var)
+ (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Add duplicity to the search path
+ (wrap-program (string-append (assoc-ref outputs "out")
+ "/bin/deja-dup")
+ `("PATH" ":" prefix
+ (,(dirname (search-input-file inputs "/bin/duplicity"))))))))))
(inputs
(list bash-minimal
duplicity
--
2.41.0
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v2 1/2] gnu: duplicity: Wrap for GI_TYPELIB_PATH.
(address . 68447@debbugs.gnu.org)
d9b5ed28707f3f3b1c0d95079f65f9d83d7f2b19.1705957508.git.vivien@planete-kraus.eu
* gnu/packages/backup.scm (duplicity) [native-inputs]: Add
gobject-introspection.
[#:phases]: Add 'gi-wrap.

Change-Id: If9d6a6bb0e855a4d775c1e4adb3b07f71be43090
---
gnu/packages/backup.scm | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

Toggle diff (28 lines)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 3126464347..836a984899 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -118,6 +118,7 @@ (define-public duplicity
(build-system python-build-system)
(native-inputs
(list gettext-minimal ; for msgfmt
+ gobject-introspection
util-linux ; setsid command, for the tests
par2cmdline
python-fasteners
@@ -172,7 +173,12 @@ (define-public duplicity
"share/zoneinfo"))
;; Some things respect TMPDIR, others hard-code /tmp, and the
;; defaults don't match up, breaking test_restart. Fix it.
- (setenv "TMPDIR" "/tmp"))))))
+ (setenv "TMPDIR" "/tmp")))
+ (add-after 'wrap 'gi-wrap
+ (lambda _
+ (let ((prog (string-append #$output "/bin/duplicity")))
+ (wrap-program prog
+ `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
(home-page "https://duplicity.gitlab.io/duplicity-web/")
(synopsis "Encrypted backup using rsync algorithm")
(description
--
2.41.0
Liliana Marie Prikler wrote 1 years ago
79183dfbd9c07125e3ab4e70b3ce2e748cde25ed.camel@gmail.com
Am Montag, dem 22.01.2024 um 22:02 +0100 schrieb Vivien Kraus:
Toggle quote (6 lines)
> * gnu/packages/backup.scm (duplicity) [native-inputs]: Add
> gobject-introspection.
> [#:phases]: Add 'gi-wrap.
>
> Change-Id: If9d6a6bb0e855a4d775c1e4adb3b07f71be43090
> ---
LGTM.
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v3 0/2] Wrap duplicity, with bash-minimal!
(address . 68447@debbugs.gnu.org)
cover.1706550998.git.vivien@planete-kraus.eu
Dear guix,

Oops, I forgot to run guix lint! QA told me I should have added bash-minimal
to the duplicity inputs. That’s what I did in this v3.

What do you think?

Best regards,

Vivien

Vivien Kraus (2):
gnu: duplicity: Wrap for GI_TYPELIB_PATH.
gnu: deja-dup: update to 45.2.

gnu/packages/backup.scm | 11 +++++--
gnu/packages/gnome.scm | 73 +++++++++++++++++++++--------------------
2 files changed, 46 insertions(+), 38 deletions(-)


base-commit: 2e7d78b1f02a8eae82c34e5183134c9d1a0d02b3
--
2.41.0
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v3 1/2] gnu: duplicity: Wrap for GI_TYPELIB_PATH.
(address . 68447@debbugs.gnu.org)
8e89d62b7cc2d3a0197633964c080c569eb5bc73.1706550998.git.vivien@planete-kraus.eu
* gnu/packages/backup.scm (duplicity) [native-inputs]: Add
gobject-introspection.
[inputs]: Add bash-minimal.
[#:phases]: Add 'gi-wrap.

Change-Id: If9d6a6bb0e855a4d775c1e4adb3b07f71be43090
---
gnu/packages/backup.scm | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

Toggle diff (38 lines)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 3126464347..e627531102 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -118,6 +118,7 @@ (define-public duplicity
(build-system python-build-system)
(native-inputs
(list gettext-minimal ; for msgfmt
+ gobject-introspection
util-linux ; setsid command, for the tests
par2cmdline
python-fasteners
@@ -132,7 +133,8 @@ (define-public duplicity
(propagated-inputs
(list python-lockfile python-pygobject python-urllib3))
(inputs
- (list dbus ; dbus-launch (Gio backend)
+ (list bash-minimal ; to run the wrapped program
+ dbus ; dbus-launch (Gio backend)
librsync
lftp
gnupg ; gpg executable needed
@@ -172,7 +174,12 @@ (define-public duplicity
"share/zoneinfo"))
;; Some things respect TMPDIR, others hard-code /tmp, and the
;; defaults don't match up, breaking test_restart. Fix it.
- (setenv "TMPDIR" "/tmp"))))))
+ (setenv "TMPDIR" "/tmp")))
+ (add-after 'wrap 'gi-wrap
+ (lambda _
+ (let ((prog (string-append #$output "/bin/duplicity")))
+ (wrap-program prog
+ `("GI_TYPELIB_PATH" = (,(getenv "GI_TYPELIB_PATH"))))))))))
(home-page "https://duplicity.gitlab.io/duplicity-web/")
(synopsis "Encrypted backup using rsync algorithm")
(description
--
2.41.0
Vivien Kraus wrote 1 years ago
[PATCH gnome-team v3 2/2] gnu: deja-dup: update to 45.2.
(address . 68447@debbugs.gnu.org)
c59829e454c6cac40291d5a59d2886acb82569a6.1706550998.git.vivien@planete-kraus.eu
* gnu/packages/gnome.scm (deja-dup): Update to 45.2.
[arguments]: Convert to list of G-Expressions.

Change-Id: I60823287827b0690796fec7955bcf9682acd88b3
---
gnu/packages/gnome.scm | 73 +++++++++++++++++++++---------------------
1 file changed, 37 insertions(+), 36 deletions(-)

Toggle diff (94 lines)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 3d89f06d6a..75e2e0efb8 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1823,50 +1823,51 @@ (define-public gnome-menus
(define-public deja-dup
(package
(name "deja-dup")
- (version "43.4")
+ (version "45.2")
(source (origin
(method url-fetch)
(uri (string-append "https://gitlab.gnome.org/World/deja-dup/-/archive/"
version "/deja-dup-" version ".tar.bz2"))
(sha256
(base32
- "1mr2g009w0zm5rj8dg1k77c7zdwylih2yszm8vh8wkw6al6bzfh3"))))
+ "000cwy1haiglkvn5plmhrs2a1fhpcpw6z4mdzck7ybmky795amza"))))
(build-system meson-build-system)
(arguments
- `(#:glib-or-gtk? #t
- #:configure-flags
- (list
- ;; Otherwise, the RUNPATH will lack the final path component.
- (string-append "-Dc_link_args=-Wl,-rpath="
- (assoc-ref %outputs "out") "/lib/deja-dup"))
- #:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'patch-paths
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((python (assoc-ref inputs "python")))
- (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
- "libdeja/tests/scripts/instance-error.test")
- (("/bin/rm")
- (which "rm")))
- (substitute* "libdeja/tests/runner.vala"
- (("/bin/sh")
- (which "sh")))
- (substitute* "libdeja/tests/scripts/instance-error.test"
- (("`which python3`")
- (string-append python "/bin/python3"))))))
- (add-after 'unpack 'patch-libgpg-error
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
- (substitute* "meson.build"
- (("(gpgerror_libs = ).*" _ var)
- (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
- (add-after 'install 'wrap-program
- (lambda* (#:key inputs outputs #:allow-other-keys)
- ;; Add duplicity to the search path
- (wrap-program (string-append (assoc-ref outputs "out")
- "/bin/deja-dup")
- `("PATH" ":" prefix
- (,(string-append (assoc-ref inputs "duplicity") "/bin")))))))))
+ (list
+ #:glib-or-gtk? #t
+ #:configure-flags
+ #~(list
+ ;; Otherwise, the RUNPATH will lack the final path component.
+ (string-append "-Dc_link_args=-Wl,-rpath="
+ (assoc-ref %outputs "out") "/lib/deja-dup"))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((python (assoc-ref inputs "python")))
+ (substitute* '("libdeja/duplicity/DuplicityInstance.vala"
+ "libdeja/tests/scripts/instance-error.test")
+ (("/bin/rm")
+ (which "rm")))
+ (substitute* "libdeja/tests/runner.vala"
+ (("/bin/sh")
+ (which "sh")))
+ (substitute* "libdeja/tests/scripts/instance-error.test"
+ (("`which python3`")
+ (string-append python "/bin/python3"))))))
+ (add-after 'unpack 'patch-libgpg-error
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((libgpg-error (assoc-ref inputs "libgpg-error")))
+ (substitute* "meson.build"
+ (("(gpgerror_libs = ).*" _ var)
+ (format #f "~a '-L~a/lib -lgpg-error'\n" var libgpg-error))))))
+ (add-after 'install 'wrap-program
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Add duplicity to the search path
+ (wrap-program (string-append (assoc-ref outputs "out")
+ "/bin/deja-dup")
+ `("PATH" ":" prefix
+ (,(dirname (search-input-file inputs "/bin/duplicity"))))))))))
(inputs
(list bash-minimal
duplicity
--
2.41.0
Vivien Kraus wrote 1 years ago
[WIP-PATCH gnome-team] gnu: deja-dup: update to 45.2.
(address . 68447-done@debbugs.gnu.org)
156d3c9b8e0be04199491fc54f9939bdc19c563d.camel@planete-kraus.eu
It has already been applied, thank you!
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 68447@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 68447
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help