Hello community,

here is the log from the commit of package pmdk-convert for openSUSE:Factory 
checked in at 2019-10-23 15:51:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pmdk-convert (Old)
 and      /work/SRC/openSUSE:Factory/.pmdk-convert.new.2352 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pmdk-convert"

Wed Oct 23 15:51:58 2019 rev:3 rq:741997 version:1.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/pmdk-convert/pmdk-convert.changes        
2019-05-02 19:21:35.577816286 +0200
+++ /work/SRC/openSUSE:Factory/.pmdk-convert.new.2352/pmdk-convert.changes      
2019-10-23 15:52:07.490777266 +0200
@@ -1,0 +2,8 @@
+Fri Oct 11 14:27:45 UTC 2019 - Nicolas Morey-Chaisemartin 
<nmoreychaisemar...@suse.com>
+
+- Update to pmdk-convert v1.7 (jsc#SLE-9886)
+  - Adds support for PMDK 1.7.
+- Add cmake_hash.patch because binary file are dropped to avoid ClamAV 
warnings, pre downloaded
+    tarballs have not the expected hash.
+
+-------------------------------------------------------------------

Old:
----
  nvml-1.0.tar.gz
  nvml-1.1.tar.gz
  nvml-1.2.3.tar.gz
  nvml-1.3.1.tar.gz
  nvml-1.4.2.tar.gz
  nvml-1.5.1.tar.gz
  pmdk-convert-1.5.1.tar.gz

New:
----
  1.0.tar.gz
  1.1.tar.gz
  1.2.4.tar.gz
  1.3.3.tar.gz
  1.4.3.tar.gz
  1.5.2.tar.gz
  1.6.1.tar.gz
  1.7.tar.gz
  cmake_hash.patch
  pmdk-convert-1.7.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pmdk-convert.spec ++++++
--- /var/tmp/diff_new_pack.oUV31e/_old  2019-10-23 15:52:08.354778200 +0200
+++ /var/tmp/diff_new_pack.oUV31e/_new  2019-10-23 15:52:08.354778200 +0200
@@ -18,7 +18,7 @@
 
 
 Name:           pmdk-convert
-Version:        1.5.1
+Version:        1.7
 Release:        0
 Summary:        PMDK pool conversion tool
 License:        BSD-3-Clause
@@ -27,20 +27,25 @@
 Source:         
https://github.com/pmem/pmdk-convert/archive/%version.tar.gz#/%{name}-%{version}.tar.gz
 # Script to predownload the artifacts needed for building and add them for 
commit
 Source999:      download_artifacts.sh
+Patch0:         cmake_hash.patch
 
 # This section is autogenerated by download_artifacts.sh
 # DO NOT MODIFY it nor the START/END markers
 ## START_NVML_SOURCE
-Source1:        nvml-1.0.tar.gz
-Source2:        nvml-1.1.tar.gz
-Source3:        nvml-1.2.3.tar.gz
-Source4:        nvml-1.3.1.tar.gz
-Source5:        nvml-1.4.2.tar.gz
-Source6:        nvml-1.5.1.tar.gz
+Source1:        1.0.tar.gz
+Source2:        1.1.tar.gz
+Source3:        1.2.4.tar.gz
+Source4:        1.3.3.tar.gz
+Source5:        1.4.3.tar.gz
+Source6:        1.5.2.tar.gz
+Source7:        1.6.1.tar.gz
+Source8:        1.7.tar.gz
 
 ## END_NVML_SOURCE
 
 BuildRequires:  cmake
+BuildRequires:  gcc
+BuildRequires:  gcc-c++
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 # By design, NVML does not support any 32-bit architecture.
@@ -58,6 +63,7 @@
 
 %prep
 %setup -q
+%patch0 -p1
 # Copy And Extract pre downloaded nvml tarball
 # This section is autogenerated by download_artifacts.sh
 # This copy/extract is needed to mimic a previous execution of
@@ -76,6 +82,10 @@
 tar -xf %{S:5}
 cp %{S:6} .
 tar -xf %{S:6}
+cp %{S:7} .
+tar -xf %{S:7}
+cp %{S:8} .
+tar -xf %{S:8}
 
 ## END_NVML_SETUP
 

++++++ nvml-1.0.tar.gz -> 1.0.tar.gz ++++++

++++++ nvml-1.0.tar.gz -> 1.1.tar.gz ++++++
++++ 115722 lines of diff (skipped)

++++++ nvml-1.2.3.tar.gz -> 1.2.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/.travis.yml new/pmdk-1.2.4/.travis.yml
--- old/pmdk-1.2.3/.travis.yml  2017-05-19 08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/.travis.yml  2019-08-27 15:37:26.000000000 +0200
@@ -1,3 +1,15 @@
+dist: trusty
+# use temporarily the previous version of Trusty image
+# until Travis fixes issue with mounting permissions
+group: deprecated-2017Q2
+
+sudo: required
+
+language: c
+
+services:
+  - docker
+
 before_install:
   - export HOST_WORKDIR=`pwd`
   - cd utils/docker
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/.version new/pmdk-1.2.4/.version
--- old/pmdk-1.2.3/.version     1970-01-01 01:00:00.000000000 +0100
+++ new/pmdk-1.2.4/.version     2019-08-27 15:37:26.000000000 +0200
@@ -0,0 +1 @@
+1.2.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/ChangeLog new/pmdk-1.2.4/ChangeLog
--- old/pmdk-1.2.3/ChangeLog    2017-05-19 08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/ChangeLog    2019-08-27 15:37:26.000000000 +0200
@@ -1,3 +1,8 @@
+Tue Aug 27 2019 Marcin Ĺšlusarz <marcin.slus...@intel.com>
+
+       * Version 1.2.4
+       Bug fixes:
+       - common: fix device dax detection (compatibility with newer kernels)
 
 Thu May 18 2017 Krzysztof Czurylo <krzysztof.czur...@intel.com>
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/src/common/file.c 
new/pmdk-1.2.4/src/common/file.c
--- old/pmdk-1.2.3/src/common/file.c    2017-05-19 08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/src/common/file.c    2019-08-27 15:37:26.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2016, Intel Corporation
+ * Copyright 2014-2019, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -51,7 +51,6 @@
 #include "out.h"
 #include "mmap.h"
 
-#define DEVICE_DAX_PREFIX "/sys/class/dax"
 #define MAX_SIZE_LENGTH 64
 
 #ifndef _WIN32
@@ -137,7 +136,12 @@
        if (rpath == NULL)
                goto out;
 
-       ret = strcmp(DEVICE_DAX_PREFIX, rpath) == 0;
+       char *basename = strrchr(rpath, '/');
+       if (!basename || strcmp("dax", basename + 1) != 0) {
+               LOG(3, "%s path does not match device dax prefix path", rpath);
+               goto out;
+       }
+       ret = 1;
 
 out:
        errno = olderrno;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/src/test/obj_realloc/TEST1 
new/pmdk-1.2.4/src/test/obj_realloc/TEST1
--- old/pmdk-1.2.3/src/test/obj_realloc/TEST1   2017-05-19 08:57:18.000000000 
+0200
+++ new/pmdk-1.2.4/src/test/obj_realloc/TEST1   2019-08-27 15:37:26.000000000 
+0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2015-2016, Intel Corporation
+# Copyright 2015-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -41,7 +41,7 @@
 # standard unit test setup
 . ../unittest/unittest.sh
 
-require_test_type medium
+require_test_type long
 
 
 # XXX reduce the number of reallocs performed under pmemcheck so that the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/utils/docker/build.sh 
new/pmdk-1.2.4/utils/docker/build.sh
--- old/pmdk-1.2.3/utils/docker/build.sh        2017-05-19 08:57:18.000000000 
+0200
+++ new/pmdk-1.2.4/utils/docker/build.sh        2019-08-27 15:37:26.000000000 
+0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2016-2017, Intel Corporation
+# Copyright 2016-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -51,8 +51,8 @@
        TEST_BUILD=all
 fi
 
-imageName=pmem/nvml:${OS}-${OS_VER}
-containerName=nvml-${OS}-${OS_VER}
+imageName=pmem/pmdk:1.2-${OS}-${OS_VER}
+containerName=pmdk-${OS}-${OS_VER}
 
 if [[ $CC == "clang" ]]; then export CXX="clang++"; else export CXX="g++"; fi
 if [[ $MAKE_PKG -eq 0 ]] ; then command="./run-build.sh"; fi
@@ -60,7 +60,7 @@
 
 if [ -n "$DNS_SERVER" ]; then DNS_SETTING=" --dns=$DNS_SERVER "; fi
 
-WORKDIR=/nvml
+WORKDIR=/pmdk
 SCRIPTSDIR=$WORKDIR/utils/docker
 
 # Run a container with
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/utils/docker/images/build-image.sh 
new/pmdk-1.2.4/utils/docker/images/build-image.sh
--- old/pmdk-1.2.3/utils/docker/images/build-image.sh   2017-05-19 
08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/utils/docker/images/build-image.sh   2019-08-27 
15:37:26.000000000 +0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2016-2017, Intel Corporation
+# Copyright 2016-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -60,8 +60,8 @@
        exit 1
 fi
 
-# Build a Docker image tagged with pmem/nvml:OS-VER
-tag=pmem/nvml:$1
+# Build a Docker image tagged with pmem/pmdk:OS-VER
+tag=pmem/pmdk:1.2-$1
 sudo docker build -t $tag \
        --build-arg http_proxy=$http_proxy \
        --build-arg https_proxy=$https_proxy \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/utils/docker/images/install-valgrind.sh 
new/pmdk-1.2.4/utils/docker/images/install-valgrind.sh
--- old/pmdk-1.2.3/utils/docker/images/install-valgrind.sh      2017-05-19 
08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/utils/docker/images/install-valgrind.sh      2019-08-27 
15:37:26.000000000 +0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2016, Intel Corporation
+# Copyright 2016-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -34,10 +34,13 @@
 # install-valgrind.sh - installs valgrind for persistent memory
 #
 
-git clone --recursive https://github.com/pmem/valgrind.git
+git clone https://github.com/pmem/valgrind.git
 cd valgrind
+# valgrind v3.11 with pmemcheck
+git checkout 9e4c877a4c833565211c70e34cccbb4292327099
 ./autogen.sh
-./configure
+./configure --prefix=/usr
 make
 make install
+cd ..
 rm -rf valgrind
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/utils/docker/images/push-image.sh 
new/pmdk-1.2.4/utils/docker/images/push-image.sh
--- old/pmdk-1.2.3/utils/docker/images/push-image.sh    2017-05-19 
08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/utils/docker/images/push-image.sh    2019-08-27 
15:37:26.000000000 +0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2016-2017, Intel Corporation
+# Copyright 2016-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -53,8 +53,8 @@
        exit 1
 fi
 
-# Check if the image tagged with nvml/OS-VER exists locally
-if [[ ! $(sudo docker images -a | awk -v pattern="^pmem/nvml:$1\$" \
+# Check if the image tagged with pmdk/OS-VER exists locally
+if [[ ! $(sudo docker images -a | awk -v pattern="^pmem/pmdk:1.2-$1\$" \
        '$1":"$2 ~ pattern') ]]
 then
        echo "ERROR: wrong argument."
@@ -66,5 +66,4 @@
 sudo docker login -u="$DOCKER_USER" -p="$DOCKER_PASSWORD"
 
 # Push the image to the repository
-sudo docker push pmem/nvml:$1
-
+sudo docker push pmem/pmdk:1.2-$1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pmdk-1.2.3/utils/docker/pull-or-rebuild-image.sh 
new/pmdk-1.2.4/utils/docker/pull-or-rebuild-image.sh
--- old/pmdk-1.2.3/utils/docker/pull-or-rebuild-image.sh        2017-05-19 
08:57:18.000000000 +0200
+++ new/pmdk-1.2.4/utils/docker/pull-or-rebuild-image.sh        2019-08-27 
15:37:26.000000000 +0200
@@ -1,6 +1,6 @@
 #!/bin/bash -e
 #
-# Copyright 2016-2017, Intel Corporation
+# Copyright 2016-2019, Intel Corporation
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -91,12 +91,12 @@
                popd
 
                # Check if the image has to be pushed to Docker Hub
-               # (i.e. the build is triggered by commits to the pmem/nvml
-               # repository's master branch, and the Travis build is not
+               # (i.e. the build is triggered by commits to the pmem/pmdk
+               # repository's stable-1.2 branch, and the Travis build is not
                # of the "pull_request" type). In that case, create the empty
                # file.
-               if [[ $TRAVIS_REPO_SLUG == "pmem/nvml" \
-                       && $TRAVIS_BRANCH == "master" \
+               if [[ $TRAVIS_REPO_SLUG == "pmem/pmdk" \
+                       && $TRAVIS_BRANCH == "stable-1.2" \
                        && $TRAVIS_EVENT_TYPE != "pull_request" ]]
                then
                        echo "The image will be pushed to Docker Hub"
@@ -110,5 +110,4 @@
 
 # Getting here means rebuilding the Docker image is not required.
 # Pull the image from Docker Hub.
-sudo docker pull pmem/nvml:${OS}-${OS_VER}
-
+sudo docker pull pmem/pmdk:1.2-${OS}-${OS_VER}

++++++ nvml-1.2.3.tar.gz -> 1.3.3.tar.gz ++++++
++++ 199322 lines of diff (skipped)

++++++ nvml-1.2.3.tar.gz -> 1.4.3.tar.gz ++++++
++++ 386101 lines of diff (skipped)

++++++ nvml-1.2.3.tar.gz -> 1.5.2.tar.gz ++++++
++++ 430060 lines of diff (skipped)

++++++ nvml-1.2.3.tar.gz -> 1.6.1.tar.gz ++++++
++++ 445697 lines of diff (skipped)

++++++ nvml-1.0.tar.gz -> 1.7.tar.gz ++++++
++++ 513240 lines of diff (skipped)

++++++ cmake_hash.patch ++++++
--- pmdk-convert-1.7/CMakeLists.txt.orig        2019-10-11 17:08:31.902957611 
+0200
+++ pmdk-convert-1.7/CMakeLists.txt     2019-10-11 17:08:36.834990730 +0200
@@ -361,7 +361,7 @@
 if(BUILD_CONVERT_V6)
        set(VER17 1.7)
 
-       get_pmdk(${VER17} 
865ce1b422bc83109cb4a63dcff8fd1077eea3617e668faf6a043208d8be03ca ${VER17})
+       get_pmdk(${VER17} 
1f392065dc6d9a1a23c936bb45cd1227f2aab992c09164efd21f6ef06782bb2c ${VER17})
 
        function(build_libpmem_convert)
                set(LIBPMEM_SOURCES
@@ -732,7 +732,7 @@
 if(BUILD_CONVERT_V5)
        set(VER16 1.6.1)
 
-       get_pmdk(${VER16} 
f263c8301f86ddf8bc5e020909ac52350baedba5c169a1a3a7786df64f129446 ${VER16})
+       get_pmdk(${VER16} 
06cc78859025e2d9a5615a61aaa100fec9bf5576a961fee334e0de2737c8b882 ${VER16})
 
        set(SOURCES_16
                ${VER16}/src/libpmemobj/alloc_class.c
@@ -903,7 +903,7 @@
 if(BUILD_15)
        set(VER15 1.5.2)
 
-       get_pmdk(${VER15} 
a72691971a98b8472b26271f19d69e6c9b849c1ca42124ea2e2bd8c3fcdff1b1 ${VER15})
+       get_pmdk(${VER15} 
6e0dd6c9384bd6b5b964869181c4d4f290e8a762b8dff3280e245bed5e352334 ${VER15})
 
        set(SOURCES_15
                ${VER15}/src/libpmemobj/alloc_class.c
@@ -1014,7 +1014,7 @@
 
        set(VER14 1.4.3)
 
-       get_pmdk(${VER14} 
93a8ba7383fa02dfd176d50aff56ace6bbac86bbaf26b8b1949ee703a4ec3a31 ${VER14})
+       get_pmdk(${VER14} 
18ff747baf5db7eb5216e0f6d1923d1d7c1708dc6426453c5faf9fa68ad2101e ${VER14})
 
        set(SOURCES_14
                ${VER14}/src/libpmemobj/alloc_class.c
@@ -1178,7 +1178,7 @@
 
        set(VER13 1.3.3)
 
-       get_pmdk(${VER13} 
5d46497bb151e6a36e801aed45bfef0d068c55cb2267329053e7489e01742f47 ${VER13})
+       get_pmdk(${VER13} 
bca2bb34cd14ec1ea458c98b6487eb76085713657109886963ccab0f8b5df7f8 ${VER13})
 
        set(SOURCES_13
                ${VER13}/src/libpmemobj/alloc_class.c
@@ -1281,7 +1281,7 @@
 
        set(VER12 1.2.4)
 
-       get_pmdk(${VER12} 
aa57b4d969a7582ad5897b5e979b3f2a4015ace7777388227826a65dbf626edd ${VER12})
+       get_pmdk(${VER12} 
e1a3471191123ca28eba92e5e9ac363d51929890507c4e7abf2f00a5b18fe315 ${VER12})
 
        set(SOURCES_12
                ${VER12}/src/libpmemobj/bucket.c
@@ -1374,7 +1374,7 @@
 
        set(VER11 1.1)
 
-       get_pmdk(${VER11} 
2d51a356bf0bd61b0259844894223305d5d825af68d51a07aa1d2bc926b65c43 ${VER11})
+       get_pmdk(${VER11} 
0c33b9502a2ec0fd4726404f0793607312485c88daeca56d1c0a1e968029b34a ${VER11})
 
        set(SOURCES_11
                ${VER11}/src/libpmemobj/bucket.c
@@ -1461,7 +1461,7 @@
 
        set(VER10 1.0)
 
-       get_pmdk(${VER10} 
e9c9ed72168047f65fae72808933bfeafd965ed3237ab3fbfb199c362bf5b773 ${VER10})
+       get_pmdk(${VER10} 
7b61f6aa18679141a86a3703ede1db5637c85e152dfd91b3ce5a1c2e4a5d8946 ${VER10})
 
        set(SOURCES_10
                ${VER10}/src/libpmemobj/bucket.c
++++++ download_artifacts.sh ++++++
--- /var/tmp/diff_new_pack.oUV31e/_old  2019-10-23 15:52:14.902785278 +0200
+++ /var/tmp/diff_new_pack.oUV31e/_new  2019-10-23 15:52:14.902785278 +0200
@@ -1,5 +1,5 @@
 #!/bin/bash -ex
-rm -f nvml-[0-9.]*.tar.gz
+rm -f nvml-[0-9.]*.tar.gz [0-9.]*.tar.gz
 VERSION=$(rpmspec --parse pmdk-convert.spec | egrep '^Version' | awk '{ print 
$NF}')
 tar -xf pmdk-convert-$VERSION.tar.gz
 cd pmdk-convert-$VERSION
@@ -8,15 +8,18 @@
 cd build
 cmake .. || true
 cd ..
-cp nvml-[0-9.]*.tar.gz ..
+cp [0-9.]*.tar.gz ..
 cd ../
-FILELIST=(nvml-[0-9.]*.tar.gz)
+FILELIST=([0-9.]*.tar.gz)
 osc add "${FILELIST[@]}"
 
 
 SOURCES=""
 SETUP=""
 i=1
+
+cp pmdk-convert-$VERSION/CMakeLists.txt 
pmdk-convert-$VERSION/CMakeLists.txt.orig
+
 for file in "${FILELIST[@]}"; do
        # Remove tests bins from the tarball as they may contain binaries that 
mess up ClamAV
        dir=$(tar -tf $file | head -n 1 | awk '{ print $NF}')
@@ -29,9 +32,19 @@
        tar --owner=root --group=root -czf  $file $dir
        SOURCES+="Source$i:        $file\n"
        SETUP+="cp %{S:$i} .\ntar -xf %{S:$i}\n"
+
+       VER=$(basename $file .tar.gz | sed -e 's/^nvml-//')
+       # And now time for some very ugly hacking to regenerate the hash in 
CMakeLists.txt so
+       # the patched tarball will not be redownloaded again...
+       VERSTR=$(egrep "set\(VER.* $VER\)" 
pmdk-convert-$VERSION/CMakeLists.txt.orig | sed -e 's/.*(\(VER[0-9]*\) .*/\1/')
+       HASH=$(sha256sum $file | awk '{ print $1 }')
+
+       sed -i -e 's/\(get_pmdk(${'$VERSTR'} \)[0-9a-f]* /\1'$HASH' /' 
pmdk-convert-$VERSION/CMakeLists.txt
        i=$(($i + 1))
 done
 
+diff -u pmdk-convert-$VERSION/CMakeLists.txt.orig 
pmdk-convert-$VERSION/CMakeLists.txt > cmake_hash.patch
+
 # Magical sed macro to replace the old content between the comment
 # strings so we don't have to manually edit
 # the nvml file list

++++++ pmdk-convert-1.5.1.tar.gz -> pmdk-convert-1.7.tar.gz ++++++
++++ 4767 lines of diff (skipped)


Reply via email to