Qutebrowser QT platform plugin could not be initialized

  • Done
  • quality assurance status badge
Details
4 participants
  • chris
  • Clément Lassieur
  • Josselin Poiret
  • Sergey Trofimov
Owner
unassigned
Submitted by
chris
Severity
normal
C
(address . bug-guix@gnu.org)(address . chris@bumblehead.com)
ZaWKPdl-7c_fR6gW@guix-xps

Here is the qutebrowser 3 process shell output. Would anyone recommend a solution?
```
$ qutebrowser
20:40:33 WARNING: Could not find the Qt platform plugin "wayland" in ""
20:40:33 CRITICAL: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: offscreen, vnc, minimal, xcb, vkkhrdisplay, linuxfb, minimalegl, eglfs.

Fatal Python error: Aborted

Current thread 0x00007f36c07e6740 (most recent call first):
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/app.py", line 545 in __init__
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/app.py", line 80 in run
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/qutebrowser.py", line 231 in main
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/bin/.qutebrowser-real", line 33 in <module>

Extension modules: PyQt6.QtCore, PyQt6.QtGui, PyQt6.QtWidgets, markupsafe._speedups, yaml._yaml, PyQt6.QtNetwork, PyQt6.QtQml, PyQt6.QtOpenGL, PyQt6.QtDBus, PyQt6.QtPrintSupport, PyQt6.QtWebChannel, PyQt6.QtWebEngineCore, PyQt6.QtWebEngineWidgets, PyQt6.QtSql (total: 14)
```
J
J
Josselin Poiret wrote on 15 Jan 23:15 +0100
(address . chris@bumblehead.com)
878r4q1bvr.fsf@jpoiret.xyz
Hi chris,

chris <chris@bumblehead.com> writes:

Toggle quote (7 lines)
>
> Here is the qutebrowser 3 process shell output. Would anyone recommend a solution?
> ```
> $ qutebrowser
> 20:40:33 WARNING: Could not find the Qt platform plugin "wayland" in ""

Have you installed qt-wayland? Are you setting QT_QPA_PLATFORM
anywhere?

Best,
--
Josselin Poiret
-----BEGIN PGP SIGNATURE-----

iQHEBAEBCAAuFiEEOSSM2EHGPMM23K8vUF5AuRYXGooFAmWlrpgQHGRldkBqcG9p
cmV0Lnh5egAKCRBQXkC5FhcairLuC/4uxOH3Nech0aqhPluzLb17aMQDXiwcius0
NUXVUt443Gal9Jkn/My5emdXucA2yGfSPNxD39hs2sJOdcw5OnKFP8zmHOK1ko80
RLBdjoqUR2p28U1gDiw09pt9bO9l0bmR4gHU1lJYnmKLOnZkaaeYrvkXfTD5PRTa
MhEVM2Z35ULZoNt1DLSp+Voifc0D9eIVwM7VA40XkPUhEiRJ0TS8aFVpt7y+O1SJ
QNlEG5x0w/okVUYI4Y+KifZsLw94so8a4erk18r09UwoV+lAPNNTc70Ey5UtamPR
XhpkX+npPJqXh0pVo73Xp600cMLkSqP80Z9Vn253ktyMXaGyEFxm20Lm12V4Rldw
DXzkMf0qziLNbRlgnJpJ4IcgjcJfsMg9+B5elcfSWlMRCrk6UWEl7pftfHNCHAA4
kRxcREnERZz6jax7ipnCrNclzJJwUkzKbxvv3F48uk1IEjefrcCORwvecmB5Vckx
1+1rctEYoJAf3ezkmgt9aiiUMWI88wM=
=9SQS
-----END PGP SIGNATURE-----

C
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
ZaW1PpKDN1DYzlRm@guix-xps
On 1?15? ?, Josselin Poiret wrote:
Toggle quote (14 lines)
> Hi chris,
>
> chris <chris@bumblehead.com> writes:
>
> > Related to https://issues.guix.gnu.org/67289#7
> >
> > Here is the qutebrowser 3 process shell output. Would anyone recommend a solution?
> > ```
> > $ qutebrowser
> > 20:40:33 WARNING: Could not find the Qt platform plugin "wayland" in ""
>
> Have you installed qt-wayland? Are you setting QT_QPA_PLATFORM
> anywhere?

Hey Josselin,

I've tried installing qtwayland through guix home by specifying "qtwayland" in my home config file. QT_QPA_PLATFORM is specified in my home config this way
```
(simple-service 'env-vars home-environment-variables-service-type
'(("EDITOR" . "emacs")
("OPENER" . "sh.opener.sh")
("BROWSER" . "qutebrowser")
("GTK_IM_MODULE" . "fcitx")
("QT_IM_MODULE" . "fcitx")
("XMODIFIERS" . "@im=fcitx")
("QT_QPA_PLATFORM" . "wayland")
("QT_SCALE_FACTOR" . "1")
("XDG_SESSION_TYPE" . "wayland")
("XDG_SESSION_DESKTOP" . "sway")
("XDG_CURRENT_DESKTOP" . "sway")
("DESKTOP_SESSION" . "sway")
("LIBSEAT_BACKEND" . "seatd")))
```

QT_QPA_PLATFORM prints at the shell this way
```
$ echo $QT_QPA_PLATFORM
wayland
```

I tried changing "qtwayland" to "qtwayland@6.5" in my home config and reconfiguring home. I've also tried installing qtwayland without guix home using "guix install qtwayland" but those did not resolve the issue.

I can try any suggestion and if it doesn't work, revert back using guix home switch-generation
S
S
Sergey Trofimov wrote on 16 Jan 07:38 +0100
(name . chris)(address . chris@bumblehead.com)
87fryxzstd.fsf@sarg.org.ru
chris <chris@bumblehead.com> writes:

Toggle quote (21 lines)
> On 1?15? ?, Josselin Poiret wrote:
>> Hi chris,
>>
>> chris <chris@bumblehead.com> writes:
>>
>> > Related to https://issues.guix.gnu.org/67289#7
>> >
>> > Here is the qutebrowser 3 process shell output. Would anyone recommend a solution?
>> > ```
>> > $ qutebrowser
>> > 20:40:33 WARNING: Could not find the Qt platform plugin "wayland" in ""
>>
>> Have you installed qt-wayland? Are you setting QT_QPA_PLATFORM
>> anywhere?
>
> Hey Josselin,
>
> I've tried installing qtwayland through guix home by specifying "qtwayland" in
> my home config file. QT_QPA_PLATFORM is specified in my home config this way
>

Here you go:
```sh
qtw=$(guix build qtwayland@6)/lib/qt6/plugins
QT_PLUGIN_PATH=$qtw QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s qt.force_platform wayland
```

Maybe a qutebrowser-wayland package variant should be defined to do the
required wrapping. Otherwise you can just install qtwayland@6 to your
profile and use ~/.guix-home/profile/lib/qt6/plugins in paths.
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
ZaYrJ_-7nOQ46RRq@guix-xps
On 1?16? ?, Sergey Trofimov wrote:
Toggle quote (11 lines)
>
> Here you go:
> ```sh
> qtw=$(guix build qtwayland@6)/lib/qt6/plugins
> QT_PLUGIN_PATH=$qtw QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s qt.force_platform wayland
> ```
>
> Maybe a qutebrowser-wayland package variant should be defined to do the
> required wrapping. Otherwise you can just install qtwayland@6 to your
> profile and use ~/.guix-home/profile/lib/qt6/plugins in paths.

Neither approach succeeded for me. What am I doing wrong...
```sh
$ ls $qtw
platforms/ wayland-graphics-integration-client/ wayland-shell-integration/
wayland-decoration-client/ wayland-graphics-integration-server/

$ ls $qtw/platforms
libqwayland-egl.so libqwayland-generic.so

$ qtw=/home/bumble/.guix-home/profile/lib/qt6/plugins; QT_PLUGIN_PATH=$qtw; QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms; qutebrowser -s qt.force_platform wayland
23:00:47 WARNING: Could not find the Qt platform plugin "wayland" in ""
23:00:47 CRITICAL: This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: offscreen, vnc, minimal, xcb, vkkhrdisplay, linuxfb, minimalegl, eglfs.

Fatal Python error: Aborted

Current thread 0x00007f7b99434740 (most recent call first):
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/app.py", line 545 in __init__
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/app.py", line 80 in run
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/qutebrowser.py", line 231 in main
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/bin/.qutebrowser-real", line 33 in <module>

Extension modules: PyQt6.QtCore, PyQt6.QtGui, PyQt6.QtWidgets, markupsafe._speedups, yaml._yaml, PyQt6.QtNetwork, PyQt6.QtQml, PyQt6.QtOpenGL, PyQt6.QtDBus, PyQt6.QtPrintSupport, PyQt6.QtWebChannel, PyQt6.QtWebEngineCore, PyQt6.QtWebEngineWidgets, PyQt6.QtSql (total: 14)
```
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
ZaY0xMQkeFjDZuVs@guix-xps
On 1?15? ?, chris wrote:
Toggle quote (8 lines)
> On 1?16? ?, Sergey Trofimov wrote:
> >
> > Here you go:
> > ```sh
> > qtw=$(guix build qtwayland@6)/lib/qt6/plugins
> > QT_PLUGIN_PATH=$qtw QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s qt.force_platform wayland
> > ```

I tried this command again just now and succeeded this time. I must have done something wrong the first time.

Thank you Sergey!
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
ZaY2EZ4g3UiGF6hc@guix-xps
On 1?15? ?, chris wrote:
Toggle quote (9 lines)
> On 1?16? ?, Sergey Trofimov wrote:
> >
> > Here you go:
> > ```sh
> > qtw=$(guix build qtwayland@6)/lib/qt6/plugins
> > QT_PLUGIN_PATH=$qtw QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s qt.force_platform wayland
> > ```
> >

I think it needed the extra slash after at the end of $qtw... the shell output looks problematic, but otherwise the browser has started. Thank you

```
$ qtw=$(guix build qtwayland@6)/lib/qt6/plugins; QT_PLUGIN_PATH=$qtw/; QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms; qutebrowser -s qt.force_platform wayland
23:47:07 ERROR: Failed to copy webengine resources, not applying quirk
Traceback (most recent call last):
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/misc/pakjoy.py", line 253, in patch_webengine
webengine_resources_path = copy_webengine_resources()
File "/gnu/store/xc2z9q7z036ny3fipgqvwc01yn20j2jh-qutebrowser-3.1.0/lib/python3.10/site-packages/qutebrowser/misc/pakjoy.py", line 197, in copy_webengine_resources
shutil.rmtree(work_dir)
File "/gnu/store/3lxr2xg3yscdb3979blgjg0h7xd1n9la-python-3.10.7/lib/python3.10/shutil.py", line 724, in rmtree
_rmtree_safe_fd(fd, path, onerror)
File "/gnu/store/3lxr2xg3yscdb3979blgjg0h7xd1n9la-python-3.10.7/lib/python3.10/shutil.py", line 680, in _rmtree_safe_fd
onerror(os.unlink, fullname, sys.exc_info())
File "/gnu/store/3lxr2xg3yscdb3979blgjg0h7xd1n9la-python-3.10.7/lib/python3.10/shutil.py", line 678, in _rmtree_safe_fd
os.unlink(entry.name, dir_fd=topfd)
PermissionError: [Errno 13] ????????: 'qtwebengine_devtools_resources.pak'
23:47:08 INFO: Showing changelog after upgrade to qutebrowser v3.1.0.
```
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
ZaY69OD6gWvnKgHj@guix-xps
Qutebrowser 3 does not have sound and this appears in the process output. "??????????????????????" means "the file or directory is not found".
```
[3158:3158:0116/000131.568005:ERROR:interface_endpoint_client.cc(694)] Message 4 rejected by interface blink.mojom.WidgetHost
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000734.652713:ERROR:alsa_util.cc(204)] PcmOpen: default,??????????????????????
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000734.653460:ERROR:alsa_util.cc(204)] PcmOpen: plug:default,??????????????????????
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000824.855365:ERROR:alsa_util.cc(204)] PcmOpen: default,??????????????????????
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000824.856521:ERROR:alsa_util.cc(204)] PcmOpen: plug:default,??????????????????????
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000826.415347:ERROR:alsa_util.cc(204)] PcmOpen: default,??????????????????????
ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave
[3473:3473:0116/000826.416368:ERROR:alsa_util.cc(204)] PcmOpen: plug:default,??????????????????????
```
S
S
Sergey Trofimov wrote on 16 Jan 11:00 +0100
(name . chris)(address . chris@bumblehead.com)
875xztmvyx.fsf@sarg.org.ru
chris <chris@bumblehead.com> writes:

Toggle quote (34 lines)
> Qutebrowser 3 does not have sound and this appears in the
> process output. "??
> ????????????????????" means "the file or
> directory is not
> found".
> ```
> [3158:3158:0116/000131.568005:ERROR:interface_endpoint_client.cc(694)]
> Message 4 rejected by interface blink.mojom.WidgetHost
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000734.652713:ERROR:alsa_util.cc(204)] PcmOpen:
> default,??????????????????????
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000734.653460:ERROR:alsa_util.cc(204)] PcmOpen:
> plug:default,??????????????????????
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000824.855365:ERROR:alsa_util.cc(204)] PcmOpen:
> default,??????????????????????
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000824.856521:ERROR:alsa_util.cc(204)] PcmOpen:
> plug:default,??????????????????????
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000826.415347:ERROR:alsa_util.cc(204)] PcmOpen:
> default,??????????????????????
> ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open
> slave
> [3473:3473:0116/000826.416368:ERROR:alsa_util.cc(204)] PcmOpen:
> plug:default,??????????????????????
> ```

Sound works for me both in X11 and Wayland environments. I use
pipewire though.
C
C
Clément Lassieur wrote on 16 Jan 11:42 +0100
(name . chris)(address . chris@bumblehead.com)
875xztsgoe.fsf@lassieur.org
On Mon, Jan 15 2024, chris wrote:

Toggle quote (13 lines)
> On 1?15? ?, chris wrote:
>> On 1?16? ?, Sergey Trofimov wrote:
>> >
>> > Here you go:
>> > ```sh
>> > qtw=$(guix build qtwayland@6)/lib/qt6/plugins
>> > QT_PLUGIN_PATH=$qtw QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s qt.force_platform wayland
>> > ```
>
> I tried this command again just now and succeeded this time. I must have done something wrong the first time.
>
> Thank you Sergey!

Hi,

Would this work with non-wayland users too? (So that it would make
sense to add it to the main package?)

Thanks,
Clément
S
S
Sergey Trofimov wrote on 16 Jan 11:47 +0100
(name . Clément Lassieur)(address . clement@lassieur.org)
871qahmu04.fsf@sarg.org.ru
Clément Lassieur <clement@lassieur.org> writes:

Toggle quote (27 lines)
> On Mon, Jan 15 2024, chris wrote:
>
>> On 1?15? ?, chris wrote:
>>> On 1?16? ?, Sergey Trofimov wrote:
>>> >
>>> > Here you go:
>>> > ```sh
>>> > qtw=$(guix build qtwayland@6)/lib/qt6/plugins
>>> > QT_PLUGIN_PATH=$qtw
>>> > QT_QPA_PLATFORM_PLUGIN_PATH=$qtw/platforms qutebrowser -s
>>> > qt.force_platform wayland
>>> > ```
>>
>> I tried this command again just now and succeeded this time. I
>> must have done something wrong the first time.
>>
>> Thank you Sergey!
>
> Hi,
>
> Would this work with non-wayland users too? (So that it would
> make
> sense to add it to the main package?)
>
> Thanks,
> Clément

Yeah, it would work, but forcing the platform through parameters
is not necessary. I added it just to be sure that wayland is being
used instead of xcb. On the other hand I think adding qtwayland
dependency to every qt-based gui program doesn't make sense. Maybe
a qtwayland-home-service makes more sense which would install the
dependency and set required environment variables. This way it
would work for every Qt GUI program on wayland.
C
C
Clément Lassieur wrote on 16 Jan 12:02 +0100
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
871qahsfqy.fsf@lassieur.org
On Tue, Jan 16 2024, Sergey Trofimov wrote:

Toggle quote (13 lines)
>> Would this work with non-wayland users too? (So that it would make
>> sense to add it to the main package?)
>>
>> Thanks,
>> Clément
>
> Yeah, it would work, but forcing the platform through parameters is not
> necessary. I added it just to be sure that wayland is being used instead of
> xcb. On the other hand I think adding qtwayland dependency to every qt-based
> gui program doesn't make sense. Maybe a qtwayland-home-service makes more
> sense which would install the dependency and set required environment
> variables. This way it would work for every Qt GUI program on wayland.

Ok, I see, thanks!
S
S
Sergey Trofimov wrote on 16 Jan 12:35 +0100
(name . Clément Lassieur)(address . clement@lassieur.org)
875xztv7a2.fsf@sarg.org.ru
Clément Lassieur <clement@lassieur.org> writes:

Toggle quote (24 lines)
> On Tue, Jan 16 2024, Sergey Trofimov wrote:
>
>>> Would this work with non-wayland users too? (So that it would
>>> make
>>> sense to add it to the main package?)
>>>
>>> Thanks,
>>> Clément
>>
>> Yeah, it would work, but forcing the platform through
>> parameters is not
>> necessary. I added it just to be sure that wayland is being
>> used instead of
>> xcb. On the other hand I think adding qtwayland dependency to
>> every qt-based
>> gui program doesn't make sense. Maybe a qtwayland-home-service
>> makes more
>> sense which would install the dependency and set required
>> environment
>> variables. This way it would work for every Qt GUI program on
>> wayland.
>
> Ok, I see, thanks!

As simple as:

Toggle snippet (7 lines)
(simple-service 'qtwayland-vars-service
home-environment-variables-service-type
`(("QT_PLUGIN_PATH" . ,(file-append qtwayland
"/lib/qt6/plugins"))
("QT_QPA_PLATFORM_PLUGIN_PATH" . ,(file-append qtwayland
"/lib/qt6/plugins/platforms"))))
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
Zaac6uU_TrUzCMma@guix-xps
On 1?16? ?, Sergey Trofimov wrote:
Toggle quote (11 lines)
>
> Clément Lassieur <clement@lassieur.org> writes:
>
> --8<---------------cut here---------------start------------->8---
> (simple-service 'qtwayland-vars-service
> home-environment-variables-service-type
> `(("QT_PLUGIN_PATH" . ,(file-append qtwayland "/lib/qt6/plugins"))
> ("QT_QPA_PLATFORM_PLUGIN_PATH" . ,(file-append qtwayland
> "/lib/qt6/plugins/platforms"))))
> --8<---------------cut here---------------end--------------->8---

This works here. After adding the above to my home config, qutebrowser starts as `qutebrowser` without the extra params.

As for the sound issue, this system uses pipewire only, without dbus. mpv, musikcube and the previous version of qutebrowser have/had sound. When I first setup guix about a year ago, qutebrowser 2 did not produce sound and, to resolve the issue, Iyzsong, in the matrix or irc channel, said they would enable native support for pipewire through a flag at qutebrowser (or maybe one of the dependencies... I don't remember) and the next day after pull and reconfigure the sound began working and there were no sound problems until updating to qutebrowser 3 today.
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
Zaakrga5iwR5pBGv@guix-xps
The snippet should be attributed to Sergey, my apology for incorrectly editing the reply
C
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
ZaasiGRHIR-JnNWv@guix-xps
I'm not sure what the correct protocol or etiquette is but I think this issue could be closed by sending an email to 68483-done@debbugs.gnu.org

Maybe the 'done' email should be sent from Sergey who provided the solution?

I would like to close this issue and open new separate issues for sound and the PermissionError shown in the process output around 'qtwebengine_devtools_resources.pak'
C
closing
(address . 68483-done@debbugs.gnu.org)(address . chris@bumblehead.com)
ZaauhxgzD5vWgRI4@guix-xps
closing
Closed
C
Re: bug#68483: Qutebrowser QT platform plugin could not be initialized
(name . Sergey Trofimov)(address . sarg@sarg.org.ru)
Zaa1ZjcwiIj796lM@guix-xps
Hey everyone the close email is sent and two separate issues opened, linked below,
* https://issues.guix.gnu.org/68512Qutebrowser 3, no sound from pipewire-only system,
* https://issues.guix.gnu.org/68513Qutebrowser 3, PermissionError qtwebengine_devtools_resources.pak
?
Your comment

This issue is archived.

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

To respond to this issue using the mumi CLI, first switch to it
mumi current 68483
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