While downloading substitutes: Wrong type argument in position 1 (expecting struct): #f

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Maxim Cournoyer
Severity
important
M
M
Maxim Cournoyer wrote on 4 Aug 2021 04:44
(name . bug-guix)(address . bug-guix@gnu.org)
87a6ly7wt1.fsf@gmail.com
Hello,

This occurred while trying to build an updated fontconfig on the
core-updates branch:

Toggle snippet (65 lines)
successfully built /gnu/store/dh7wr4laxg5r8x22iv2ydbh8krcm6782-libuninameslist-20200313.drv
The following builds are still in progress:
/gnu/store/mzw4s9y67cp9i1mylqkiyrpxpyaq5f7s-libnftnl-1.2.0.drv
/gnu/store/vn2pgkxz1lhvdmzv63crlxvz913v9q3i-libungif-4.1.4.drv
/gnu/store/yjq9xi300kwpcdca9b38r0fjmvl8q95c-m4-1.4.18.tar.xz.drv
/gnu/store/5wg445g4y00jwxvga7rk4fk4vmv6hl8d-lzo-2.10.drv
/gnu/store/hicph1jxczzacyy3xc4wqbjfqdskxwnn-libxml2-2.9.12.tar.xz.drv
/gnu/store/gda40q0dd10hr0fm4sffzgc9zv24mb0s-libxml2-2.9.12.tar.xz.drv
/gnu/store/8ir67jqrzwz62s522xi19xlq0yik417f-libtasn1-4.17.0.drv
/gnu/store/mr9639s4z2fsvcwmw8mw17j9b5f6l4gh-lxml-4.6.3.tar.xz.drv
/gnu/store/96qnk27khjc25rbdz2gxr22sqgmh4lq9-libxslt-1.1.34.tar.xz.drv
/gnu/store/jxvirmrqxhfp530vggm6bcgq8rs6ya6y-libtool-2.4.6.tar.xz.drv
/gnu/store/flmxhxmkj6vbpg6pgh57xp390bxwzqj7-guile-3.0.7.drv
/gnu/store/sl9k1cdgp1g6hk796sd1pra1w88vnybc-bash-minimal-5.1.8.drv
/gnu/store/a2zj0nybbs7ydgp30da8vxbgf3s9ndfv-docbook-xsl-1.79.2.tar.xz.drv
/gnu/store/8rc15lklpf7xyyr57a8mvl2ybvrj5h3q-c-ares-1.17.1.drv
/gnu/store/4s3kciwd65syrvk3ryvvyk3xydx43mw3-cairo-1.16.0.tar.xz.drv

substituting /gnu/store/yqvsc5brbzpk1m7zr8bnyr66kz9q625a-nasm-2.15.05.tar.xz...
substituting /gnu/store/4fliaxdz084ijlzb6d98sgg76dmz9xp6-net-tools-1.60-0.479bb4a.zip...
substituting /gnu/store/js6wj0pmd4lqnnkys7f9az4gcm8szfmi-nettle-3.7.3.tar.gz...
substituting /gnu/store/lz5qmr8bv3wwmja3vw59yjydiy66ni3a-nghttp2-1.44.0.tar.xz...
process 30234 acquired build slot '/var/guix/offload/127.0.0.1:6666/1'
normalized load on machine '127.0.0.1' is 0.17
building /gnu/store/9xadqmcq1z02x93k7c5xpwbwd4a7f1rk-apr-1.6.5.drv...
eckout 50269 50269
Backtrace:
19 (apply-smob/0 #<thunk 7fd0dfaedf60>)
In ice-9/boot-9.scm:
724:2 18 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
619:8 17 (_ #(#(#<directory (guile-user) 7fd0dfae7c80>)))
In guix/ui.scm:
2185:7 16 (run-guix . _)
2148:10 15 (run-guix-command _ . _)
In ice-9/boot-9.scm:
1752:10 14 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/status.scm:
800:4 13 (call-with-status-report _ _)
In ice-9/boot-9.scm:
1752:10 12 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/store.scm:
658:37 11 (thunk)
1320:8 10 (call-with-build-handler _ _)
1320:8 9 (call-with-build-handler #<procedure 7fd0dd3fdfc0 at guix/ui.scm:1155:2 (continue store …> …)
In guix/scripts/build.scm:
699:26 8 (_)
In guix/store.scm:
1388:15 7 (_ #<store-connection 256.99 7fd0dfa699b0> _ _)
759:13 6 (process-stderr _ _)
In unknown file:
5 (display "eckout 50269 50269\n@ download-succeeded /gnu/store/1i7b2hrywrp90w5dd9nq6dw788…" …)
In guix/status.scm:
723:16 4 (write! _ _ _)
636:15 3 (_ (download-succeeded "/gnu/store/1i7b2hrywrp90w5dd9nq6dw7888wzqkq-mallard-ducktype-…" …) …)
272:33 2 (compute-status _ #<<build-status> building: (#<<build> derivation: "/gnu/store/9xadqmcq…> …)
In ice-9/boot-9.scm:
1685:16 1 (raise-exception _ #:continuable? _)
1685:16 0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure struct-vtable: Wrong type argument in position 1 (expecting
struct): #f

Thanks,

Maxim
L
L
Ludovic Courtès wrote on 4 Aug 2021 10:26
control message for bug #49862
(address . control@debbugs.gnu.org)
87a6lxsji3.fsf@gnu.org
severity 49862 important
quit
L
L
Ludovic Courtès wrote on 4 Aug 2021 10:39
Re: bug#49862: While downloading substitutes: Wrong type argument in position 1 (expecting struct): #f
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)(address . 49862@debbugs.gnu.org)
871r79siw2.fsf@gnu.org
Hi Maxim,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

Toggle quote (67 lines)
> This occurred while trying to build an updated fontconfig on the
> core-updates branch:
>
> successfully built /gnu/store/dh7wr4laxg5r8x22iv2ydbh8krcm6782-libuninameslist-20200313.drv
> The following builds are still in progress:
> /gnu/store/mzw4s9y67cp9i1mylqkiyrpxpyaq5f7s-libnftnl-1.2.0.drv
> /gnu/store/vn2pgkxz1lhvdmzv63crlxvz913v9q3i-libungif-4.1.4.drv
> /gnu/store/yjq9xi300kwpcdca9b38r0fjmvl8q95c-m4-1.4.18.tar.xz.drv
> /gnu/store/5wg445g4y00jwxvga7rk4fk4vmv6hl8d-lzo-2.10.drv
> /gnu/store/hicph1jxczzacyy3xc4wqbjfqdskxwnn-libxml2-2.9.12.tar.xz.drv
> /gnu/store/gda40q0dd10hr0fm4sffzgc9zv24mb0s-libxml2-2.9.12.tar.xz.drv
> /gnu/store/8ir67jqrzwz62s522xi19xlq0yik417f-libtasn1-4.17.0.drv
> /gnu/store/mr9639s4z2fsvcwmw8mw17j9b5f6l4gh-lxml-4.6.3.tar.xz.drv
> /gnu/store/96qnk27khjc25rbdz2gxr22sqgmh4lq9-libxslt-1.1.34.tar.xz.drv
> /gnu/store/jxvirmrqxhfp530vggm6bcgq8rs6ya6y-libtool-2.4.6.tar.xz.drv
> /gnu/store/flmxhxmkj6vbpg6pgh57xp390bxwzqj7-guile-3.0.7.drv
> /gnu/store/sl9k1cdgp1g6hk796sd1pra1w88vnybc-bash-minimal-5.1.8.drv
> /gnu/store/a2zj0nybbs7ydgp30da8vxbgf3s9ndfv-docbook-xsl-1.79.2.tar.xz.drv
> /gnu/store/8rc15lklpf7xyyr57a8mvl2ybvrj5h3q-c-ares-1.17.1.drv
> /gnu/store/4s3kciwd65syrvk3ryvvyk3xydx43mw3-cairo-1.16.0.tar.xz.drv
>
> substituting /gnu/store/yqvsc5brbzpk1m7zr8bnyr66kz9q625a-nasm-2.15.05.tar.xz...
> substituting /gnu/store/4fliaxdz084ijlzb6d98sgg76dmz9xp6-net-tools-1.60-0.479bb4a.zip...
> substituting /gnu/store/js6wj0pmd4lqnnkys7f9az4gcm8szfmi-nettle-3.7.3.tar.gz...
> substituting /gnu/store/lz5qmr8bv3wwmja3vw59yjydiy66ni3a-nghttp2-1.44.0.tar.xz...
> process 30234 acquired build slot '/var/guix/offload/127.0.0.1:6666/1'
> normalized load on machine '127.0.0.1' is 0.17
> building /gnu/store/9xadqmcq1z02x93k7c5xpwbwd4a7f1rk-apr-1.6.5.drv...
> eckout 50269 50269
> Backtrace:
> 19 (apply-smob/0 #<thunk 7fd0dfaedf60>)
> In ice-9/boot-9.scm:
> 724:2 18 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
> In ice-9/eval.scm:
> 619:8 17 (_ #(#(#<directory (guile-user) 7fd0dfae7c80>)))
> In guix/ui.scm:
> 2185:7 16 (run-guix . _)
> 2148:10 15 (run-guix-command _ . _)
> In ice-9/boot-9.scm:
> 1752:10 14 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
> In guix/status.scm:
> 800:4 13 (call-with-status-report _ _)
> In ice-9/boot-9.scm:
> 1752:10 12 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
> In guix/store.scm:
> 658:37 11 (thunk)
> 1320:8 10 (call-with-build-handler _ _)
> 1320:8 9 (call-with-build-handler #<procedure 7fd0dd3fdfc0 at guix/ui.scm:1155:2 (continue store …> …)
> In guix/scripts/build.scm:
> 699:26 8 (_)
> In guix/store.scm:
> 1388:15 7 (_ #<store-connection 256.99 7fd0dfa699b0> _ _)
> 759:13 6 (process-stderr _ _)
> In unknown file:
> 5 (display "eckout 50269 50269\n@ download-succeeded /gnu/store/1i7b2hrywrp90w5dd9nq6dw788…" …)
> In guix/status.scm:
> 723:16 4 (write! _ _ _)
> 636:15 3 (_ (download-succeeded "/gnu/store/1i7b2hrywrp90w5dd9nq6dw7888wzqkq-mallard-ducktype-…" …) …)
> 272:33 2 (compute-status _ #<<build-status> building: (#<<build> derivation: "/gnu/store/9xadqmcq…> …)
> In ice-9/boot-9.scm:
> 1685:16 1 (raise-exception _ #:continuable? _)
> 1685:16 0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure struct-vtable: Wrong type argument in position 1 (expecting
> struct): #f

That reminds me of https://issues.guix.gnu.org/43518 though it seems
to be a bit different.

The context of status.scm:272:33 is this:

Toggle snippet (15 lines)
(('download-succeeded item uri (= string->number size))
(let ((current (find (matching-download item)
(build-status-downloading status))))
(build-status
(inherit status)
(downloading (delq current (build-status-downloading status)))
(downloads-completed
(cons (download item uri
#:size size
#:start (download-start current) ;<- HERE
#:transferred size
#:end (current-time time-monotonic))
(build-status-downloads-completed status))))))

Here, ‘current’ is #f, hence the type error. We could be defensive and
check whether ‘current’ is #f before proceeding; however, it’s “not
supposed to happen” as that indicates an inconsistency: that ‘status’
doesn’t match reality.

The root cause is probably that (guix status) missed a trace, one of
these “@ download-progress …” lines, which would probably be a bug in
‘build-event-output-port’. Or it could be that the output from
guix-daemon is already intermingled, though that’s again not supposed to
happen.

Perhaps the best course of action here would be to hammer
‘build-event-output-port’ with semi-randomly generated data until we can
reproduce the bug, assuming this is where it takes place.

Thanks,
Ludo’.
M
M
Maxim Cournoyer wrote on 31 Aug 2021 17:44
(address . 49862@debbugs.gnu.org)
87a6kxippt.fsf@gmail.com
Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:


[...]

Toggle quote (46 lines)
> substituting /gnu/store/yqvsc5brbzpk1m7zr8bnyr66kz9q625a-nasm-2.15.05.tar.xz...
> substituting /gnu/store/4fliaxdz084ijlzb6d98sgg76dmz9xp6-net-tools-1.60-0.479bb4a.zip...
> substituting /gnu/store/js6wj0pmd4lqnnkys7f9az4gcm8szfmi-nettle-3.7.3.tar.gz...
> substituting /gnu/store/lz5qmr8bv3wwmja3vw59yjydiy66ni3a-nghttp2-1.44.0.tar.xz...
> process 30234 acquired build slot '/var/guix/offload/127.0.0.1:6666/1'
> normalized load on machine '127.0.0.1' is 0.17
> building /gnu/store/9xadqmcq1z02x93k7c5xpwbwd4a7f1rk-apr-1.6.5.drv...
> eckout 50269 50269
> Backtrace:
> 19 (apply-smob/0 #<thunk 7fd0dfaedf60>)
> In ice-9/boot-9.scm:
> 724:2 18 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
> In ice-9/eval.scm:
> 619:8 17 (_ #(#(#<directory (guile-user) 7fd0dfae7c80>)))
> In guix/ui.scm:
> 2185:7 16 (run-guix . _)
> 2148:10 15 (run-guix-command _ . _)
> In ice-9/boot-9.scm:
> 1752:10 14 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
> In guix/status.scm:
> 800:4 13 (call-with-status-report _ _)
> In ice-9/boot-9.scm:
> 1752:10 12 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
> In guix/store.scm:
> 658:37 11 (thunk)
> 1320:8 10 (call-with-build-handler _ _)
> 1320:8 9 (call-with-build-handler #<procedure 7fd0dd3fdfc0 at guix/ui.scm:1155:2 (continue store …> …)
> In guix/scripts/build.scm:
> 699:26 8 (_)
> In guix/store.scm:
> 1388:15 7 (_ #<store-connection 256.99 7fd0dfa699b0> _ _)
> 759:13 6 (process-stderr _ _)
> In unknown file:
> 5 (display "eckout 50269 50269\n@ download-succeeded /gnu/store/1i7b2hrywrp90w5dd9nq6dw788…" …)
> In guix/status.scm:
> 723:16 4 (write! _ _ _)
> 636:15 3 (_ (download-succeeded "/gnu/store/1i7b2hrywrp90w5dd9nq6dw7888wzqkq-mallard-ducktype-…" …) …)
> 272:33 2 (compute-status _ #<<build-status> building: (#<<build> derivation: "/gnu/store/9xadqmcq…> …)
> In ice-9/boot-9.scm:
> 1685:16 1 (raise-exception _ #:continuable? _)
> 1685:16 0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure struct-vtable: Wrong type argument in position 1 (expecting
> struct): #f

Here's a slightly different backtrace of the same problem:

Toggle snippet (51 lines)
substitution of /gnu/store/z080ssymr51skixc96aq60rasbjjgjdl-jmtpfs-0.5 complete
substitution of /gnu/store/z5rnmph0r1dpdnml4hx5qr1jj3qqvibm-libchamplain-0.12.16 complete
process 32168 acquired build slot '/var/guix/offload/127.0.0.1:6666/3'
normalized load on machine '127.0.0.1' is 1.00
process 32168 acquired build slot '/var/guix/offload/127.0.0.1:6666/4'
normalized load on machine '127.0.0.1' is 1.00
process 32168 acquired build slot '/var/guix/offload/127.0.0.1:6666/4'
normalized load on machine '127.0.0.1' is 1.00
process 32168 acquired build slot '/var/guix/offload/127.0.0.1:6666/3'
normalized load on machine '127.0.0.1' is 1.00
g/nar/lzip/y21d8a1yk64fc2b7n7ckq83j6hdc75gb-gimp-2.10.24 20010204 15860036

-78.13.0-guix0-preview1 53984758 4063328
icecat-78.13.0-guix0-preview1 51.5MiB Backtrace:
In guix/ui.scm:
2148:10 19 (run-guix-command _ . _)
In ice-9/boot-9.scm:
1752:10 18 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/status.scm:
820:3 17 (_)
800:4 16 (call-with-status-report _ _)
In guix/store.scm:
1320:8 15 (call-with-build-handler _ _)
1320:8 14 (call-with-build-handler #<procedure 7f3d053078d0 at guix/ui.scm:1155:2 (continue store thing
In guix/build/syscalls.scm:
1374:3 13 (_)
1341:4 12 (call-with-file-lock/no-wait _ _ _)
In guix/scripts/package.scm:
148:19 11 (build-and-use-profile #<store-connection 256.99 7f3d065d0050> "/var/guix/profiles/per-user/m
In guix/store.scm:
2108:24 10 (run-with-store #<store-connection 256.99 7f3d065d0050> _ #:guile-for-build _ #:system _ #:ta
In guix/profiles.scm:
1803:2 9 (_ _)
In guix/store.scm:
1993:12 8 (_ #<store-connection 256.99 7f3d065d0050>)
1395:5 7 (map/accumulate-builds #<store-connection 256.99 7f3d065d0050> _ _)
1406:15 6 (_ #<store-connection 256.99 7f3d065d0050> _ _)
759:13 5 (process-stderr _ _)
In unknown file:
4 (display "@ substituter-succeeded /gnu/store/y21d8a1yk64fc2b7n7ckq83j6hdc75gb-gimp-2.10.24\n"
In guix/status.scm:
723:16 3 (write! _ _ _)
637:6 2 (_ (download-progress "/gnu/store/xj6m19yvs7b54lgafy5b3r10gk6c3k8f-icecat-78.13.0-guix0-previ
In guix/progress.scm:
223:17 1 (display-download-progress "nar@" _ #:tty? _ #:start-time _ #:transferred _ #:log-port _)
In ice-9/boot-9.scm:
1685:16 0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure =: Wrong type argument in position 1: #f
M
M
Maxim Cournoyer wrote on 1 Nov 2022 16:36
(address . 49862@debbugs.gnu.org)
87iljyd6ud.fsf@gmail.com
Hi,

Adding yet another backtrace of that problem, that was triggered while
running './pre-inst-env guix build python-astroquery@0.4.6 vorta@0.8.7
cura@4.13.1 komikku@1.2.0 jrnl@1.9.7 pantalaimon@0.10.5
python-harmony@0.7.1 caja-extensions@1.24.1 gourmet@0.17.4-0.8af29c8
python-swiftclient@4.0.1 dbxfs@1.0.63 orange@3.32.0 linuxdcpp@1.1.0
ikiwiki@3.20200202.3 breezy@3.2.2 python-nanopb@0.4.6.4
openconnect-sso@0.7.3 qtile@0.18.1' with python-keyring having been
modified:

Toggle snippet (63 lines)
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 7b7aac6201..def347c06d 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -49,6 +49,7 @@ (define-module (gnu packages python-crypto)
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix build-system cargo)
+ #:use-module (guix build-system pyproject)
#:use-module (guix build-system python)
#:use-module (guix utils)
#:use-module (gnu packages)
@@ -326,29 +327,34 @@ (define-public python-kerberos
(define-public python-keyring
(package
(name "python-keyring")
- (version "22.0.1")
+ (version "23.9.3")
(source
(origin
- (method url-fetch)
- (uri (pypi-uri "keyring" version))
- (sha256
- (base32
- "1pvqc6may03did0iz98gasg7cy4h8ljzs4ibh927bfzda8a3xjws"))))
- (build-system python-build-system)
+ (method url-fetch)
+ (uri (pypi-uri "keyring" version))
+ (sha256
+ (base32
+ "19f4jpsxng9sjfqi8ww5hgg196r2zh1zb8g71wjr1xa27kc1vc39"))))
+ (build-system pyproject-build-system)
(arguments
- `(#:phases
- (modify-phases %standard-phases
- (replace 'check
- (lambda* (#:key tests? #:allow-other-keys)
- (when tests?
- (invoke "pytest" "-vv" "-c" "/dev/null" "tests")))))))
+ (list
+ #:test-flags '(list "-c" "/dev/null") ;avoid extra test dependencies
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'check 'workaround-test-failure
+ (lambda _
+ ;; Workaround a failure in the test_entry_point test (see:
+ ;; https://github.com/jaraco/keyring/issues/526).
+ (delete-file-recursively "keyring.egg-info"))))))
(native-inputs
(list python-toml
python-pytest
python-setuptools
python-setuptools-scm))
(propagated-inputs
- (list python-secretstorage))
+ (list python-importlib-metadata
+ python-jaraco-classes
+ python-secretstorage))
(home-page "https://github.com/jaraco/keyring")
(synopsis "Store and access your passwords safely")
(description

Toggle snippet (36 lines)
Backtrace:
In guix/store.scm:
1300:8 19 (call-with-build-handler _ _)
1300:8 18 (call-with-build-handler #<procedure 7faf27904f90 at guix/ui.scm:1171:2 (continue store …> …)
In guix/ui.scm:
462:3 17 (_)
In ice-9/boot-9.scm:
1747:15 16 (with-exception-handler #<procedure 7faf18957540 at ice-9/boot-9.scm:1831:7 (exn)> _ # _ # …)
1752:10 15 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/ui.scm:
449:6 14 (_)
In guix/scripts/build.scm:
714:5 13 (_)
In srfi/srfi-1.scm:
673:15 12 (append-map _ _ . _)
586:17 11 (map1 ("x86_64-linux"))
In guix/scripts/build.scm:
716:21 10 (_ _)
In guix/store.scm:
1403:5 9 (map/accumulate-builds #<store-connection 256.99 7faf2a3e70f0> #<procedure 7faf263dd2d0 …> …)
1419:15 8 (_ #<store-connection 256.99 7faf2a3e70f0> _ _)
739:14 7 (process-stderr _ _)
In unknown file:
6 (display "@ substituter-succeeded /gnu/store/wjbisajny3c9pwj4crqyq3yd77gf2pfl-qtdeclarat…" …)
In guix/status.scm:
733:16 5 (write! _ _ _)
645:15 4 (_ (download-succeeded "/gnu/store/qwds28f6pqq5aaw90678v9qzfj6qiivq-texlive-amsf@" "s…" …) …)
272:33 3 (compute-status _ #<<build-status> building: (#<<build> derivation: "/gnu/store/xc34bvzi…> …)
In ice-9/boot-9.scm:
1685:16 2 (raise-exception _ #:continuable? _)
1685:16 1 (raise-exception _ #:continuable? _)
1685:16 0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:

--
Thanks,
Maxim
?
Your comment

Commenting via the web interface is currently disabled.

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

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