Author: glen                         Date: Wed Jan  5 16:39:02 2011 GMT
Module: packages                      Tag: HEAD
---- Log message:
- create branch update to 0.6.3

---- Files affected:
packages/php-ffmpeg:
   branch.diff (NONE -> 1.1)  (NEW), branch.sh (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/php-ffmpeg/branch.diff
diff -u /dev/null packages/php-ffmpeg/branch.diff:1.1
--- /dev/null   Wed Jan  5 17:39:02 2011
+++ packages/php-ffmpeg/branch.diff     Wed Jan  5 17:38:57 2011
@@ -0,0 +1,6505 @@
+# Revision 677
+
+Property changes on: gd.h
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+
+Property changes on: LICENSE
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+Index: config.m4
+===================================================================
+--- config.m4  (.../branches/ffmpeg-php/ffmpeg-php-0.6.0)
++++ config.m4  (.../trunk/ffmpeg-php)
+@@ -1,5 +1,5 @@
+ PHP_ARG_WITH(ffmpeg,for ffmpeg support, 
+-[  --with-ffmpeg[=DIR]       Include ffmpeg support (requires ffmpeg >= 
0.49.0).])
++[  --with-ffmpeg[=DIR]       Include ffmpeg support (requires ffmpeg >= 
0.5).])
+ 
+ PHP_ARG_ENABLE(skip-gd-check, whether to force gd support in ffmpeg-php, [  
--enable-skip-gd-check     skip checks for gd libs and assume they are 
present.], no, no)
+ 
+@@ -106,7 +106,7 @@
+   CFLAGS="$CFLAGS -Wall -fno-strict-aliasing"
+ 
+   PHP_NEW_EXTENSION(ffmpeg, ffmpeg-php.c ffmpeg_movie.c ffmpeg_frame.c 
ffmpeg_errorhandler.c ffmpeg_tools.c, $ext_shared,, \\$(GDLIB_CFLAGS))
+-  PHP_ADD_EXTENSION_DEP(ffmpeg, gd)
++dnl PHP_ADD_EXTENSION_DEP(ffmpeg, gd)
+ 
+   PHP_SUBST(FFMPEG_SHARED_LIBADD)
+   AC_DEFINE(HAVE_FFMPEG_PHP,1,[ ])
+
+Property changes on: config.m4
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+Index: ffmpeg_movie.c
+===================================================================
+--- ffmpeg_movie.c     (.../branches/ffmpeg-php/ffmpeg-php-0.6.0)
++++ ffmpeg_movie.c     (.../trunk/ffmpeg-php)
+@@ -45,6 +45,7 @@
+ 
+ #include "ffmpeg_frame.h"
+ #include "ffmpeg_movie.h"
++#include "ffmpeg_tools.h"
+    
+ #define GET_MOVIE_RESOURCE(ff_movie_ctx) {\
+     zval **_tmp_zval;\
+@@ -122,7 +123,8 @@
+     FFMPEG_PHP_MALIAS(ffmpeg_movie, getaudiobitrate,     getAudioBitRate,     
NULL, 0)
+     FFMPEG_PHP_MALIAS(ffmpeg_movie, getvideobitrate,     getVideoBitRate,     
NULL, 0)
+     FFMPEG_PHP_MALIAS(ffmpeg_movie, getpixelaspectratio, getPixelAspectRatio, 
NULL, 0)
+-    {NULL, NULL, NULL, 0, 0}
++
++    FFMPEG_PHP_END_METHODS
+ };
+ /* }}} */
+ 
+@@ -270,7 +272,7 @@
+ /* {{{ proto object ffmpeg_movie(string filename) 
+    Constructor for ffmpeg_movie objects
+  */
+-FFMPEG_PHP_METHOD(ffmpeg_movie, __construct)
++FFMPEG_PHP_CONSTRUCTOR(ffmpeg_movie, __construct)
+ {
+     int persistent = 0, hashkey_length = 0;
+     char *filename = NULL, *fullpath = NULL, *hashkey = NULL;
+
+Property changes on: ffmpeg_movie.c
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+Index: ChangeLog
+===================================================================
+--- ChangeLog  (.../branches/ffmpeg-php/ffmpeg-php-0.6.0)
++++ ChangeLog  (.../trunk/ffmpeg-php)
+@@ -1,5 +1,15 @@
+ ChangeLog for ffmpeg-php (ffmpeg-php.sourceforge.net)
+ 
++version 0.6.3 (3/30/2009)
++    Bug Fixes
++    * Fixed compatibility with ffmpeg 0.5.0 release. ffmpeg-php is only
++    supporting offical releases from here on.
++
++version 0.6.2 (3/25/2009)
++    Bug Fixes
++    * Fixed building on php4
++    * Fixed compatibility with ffmpeg 0.5.0 release 
++
+ version 0.6.0 (10/15/2008)
+     New Features:
+     * Support for ffmpeg swscale API
+
+Property changes on: ChangeLog
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+
+Property changes on: test_ffmpeg.php
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+Index: ffmpeg_movie.h
+===================================================================
+--- ffmpeg_movie.h     (.../branches/ffmpeg-php/ffmpeg-php-0.6.0)
++++ ffmpeg_movie.h     (.../trunk/ffmpeg-php)
+@@ -33,7 +33,7 @@
+ #define FFMPEG_MOVIE_H
+ 
+ /* movie constructor */
+-FFMPEG_PHP_METHOD(ffmpeg_movie, __construct);
++FFMPEG_PHP_CONSTRUCTOR(ffmpeg_movie, __construct);
+ 
+ /* movie methods */
+ FFMPEG_PHP_METHOD(ffmpeg_movie, getDuration);
+
+Property changes on: ffmpeg_movie.h
+___________________________________________________________________
+Deleted: svn:keywords
+   - Author Date Id Revision
+Deleted: svn:eol-style
+   - native
+
+Index: run-tests.php
+===================================================================
+--- run-tests.php      (.../branches/ffmpeg-php/ffmpeg-php-0.6.0)
++++ run-tests.php      (.../trunk/ffmpeg-php)
+@@ -0,0 +1,2328 @@
++#!/usr/bin/php
++<?php
++/*
++   +----------------------------------------------------------------------+
++   | PHP Version 5, 6                                                     |
++   +----------------------------------------------------------------------+
++   | Copyright (c) 1997-2008 The PHP Group                                |
++   +----------------------------------------------------------------------+
++   | This source file is subject to version 3.01 of the PHP license,      |
++   | that is bundled with this package in the file LICENSE, and is        |
++   | available through the world-wide-web at the following url:           |
++   | http://www.php.net/license/3_01.txt                                  |
++   | If you did not receive a copy of the PHP license and are unable to   |
++   | obtain it through the world-wide-web, please send a note to          |
++   | [email protected] so we can mail you a copy immediately.               |
++   +----------------------------------------------------------------------+
++   | Authors: Ilia Alshanetsky <[email protected]>                            |
++   |          Preston L. Bannister <[email protected]>                   |
++   |          Marcus Boerger <[email protected]>                              |
++   |          Derick Rethans <[email protected]>                             |
++   |          Sander Roobol <[email protected]>                              |
++   | (based on version by: Stig Bakken <[email protected]>)                     |
++   | (based on the PHP 3 test framework by Rasmus Lerdorf)                |
++   +----------------------------------------------------------------------+
++ */
++
++/* $Id$ */
++
++/* Sanity check to ensure that pcre extension needed by this script is 
available.
++ * In the event it is not, print a nice error message indicating that this 
script will
++ * not run without it.
++ */
++
++if (!extension_loaded('pcre')) {
++      echo <<<NO_PCRE_ERROR
++
+++-----------------------------------------------------------+
++|                       ! ERROR !                           |
++| The test-suite requires that you have pcre extension      |
++| enabled. To enable this extension either compile your PHP |
++| with --with-pcre-regex or if you've compiled pcre as a    |
++| shared module load it via php.ini.                        |
+++-----------------------------------------------------------+
++
++NO_PCRE_ERROR;
++exit;
++}
++
++if (!function_exists('proc_open')) {
++      echo <<<NO_PROC_OPEN_ERROR
++
+++-----------------------------------------------------------+
++|                       ! ERROR !                           |
++| The test-suite requires that proc_open() is available.    |
++| Please check if you disabled it in php.ini.               |
+++-----------------------------------------------------------+
++
++NO_PROC_OPEN_ERROR;
++exit;
++}
++
++// If timezone is not set, use UTC.
++if (ini_get('date.timezone') == '') {
++      date_default_timezone_set('UTC');
++}
++
++// store current directory
++$CUR_DIR = getcwd();
++
++// change into the PHP source directory.
++
++if (getenv('TEST_PHP_SRCDIR')) {
++      @chdir(getenv('TEST_PHP_SRCDIR'));
++}
++
++// Delete some security related environment variables
++putenv('SSH_CLIENT=deleted');
++putenv('SSH_AUTH_SOCK=deleted');
++putenv('SSH_TTY=deleted');
++putenv('SSH_CONNECTION=deleted');
++
++$cwd = getcwd();
++set_time_limit(0);
++
++ini_set('pcre.backtrack_limit', PHP_INT_MAX);
++
++$valgrind_version = 0;
++$valgrind_header = '';
++
++// delete as much output buffers as possible
++while(@ob_end_clean());
++if (ob_get_level()) echo "Not all buffers were deleted.\n";
++
++error_reporting(E_ALL);
++if (PHP_MAJOR_VERSION < 6) {
++      ini_set('magic_quotes_runtime',0); // this would break tests by 
modifying EXPECT sections
++      if (ini_get('safe_mode')) {
++              echo <<< SAFE_MODE_WARNING
++
+++-----------------------------------------------------------+
++|                       ! WARNING !                         |
++| You are running the test-suite with "safe_mode" ENABLED ! |
++|                                                           |
++| Chances are high that no test will work at all,           |
++| depending on how you configured "safe_mode" !             |
+++-----------------------------------------------------------+
++
++
++SAFE_MODE_WARNING;
++      }
++}
++
++$environment = isset($_ENV) ? $_ENV : array();
++
++// Don't ever guess at the PHP executable location.
++// Require the explicit specification.
++// Otherwise we could end up testing the wrong file!
++
++$php = null;
++$php_cgi = null;
++
++if (getenv('TEST_PHP_EXECUTABLE')) {
++      $php = getenv('TEST_PHP_EXECUTABLE');
++
++      if ($php=='auto') {
++              $php = $cwd . '/sapi/cli/php';
++              putenv("TEST_PHP_EXECUTABLE=$php");
++
++              if (!getenv('TEST_PHP_CGI_EXECUTABLE')) {
++                      $php_cgi = $cwd . '/sapi/cgi/php-cgi';
++
++                      if (file_exists($php_cgi)) {
++                              putenv("TEST_PHP_CGI_EXECUTABLE=$php_cgi");
++                      } else {
++                              $php_cgi = null;
++                      }
++              }
++      }
++      $environment['TEST_PHP_EXECUTABLE'] = $php;
++}
++
++if (getenv('TEST_PHP_CGI_EXECUTABLE')) {
++      $php_cgi = getenv('TEST_PHP_CGI_EXECUTABLE');
++
++      if ($php_cgi=='auto') {
++              $php_cgi = $cwd . '/sapi/cgi/php-cgi';
++              putenv("TEST_PHP_CGI_EXECUTABLE=$php_cgi");
++      }
++
++      $environment['TEST_PHP_CGI_EXECUTABLE'] = $php_cgi;
++}
++
++function verify_config()
++{
++      global $php;
++
++      if (empty($php) || !file_exists($php)) {
++              error('environment variable TEST_PHP_EXECUTABLE must be set to 
specify PHP executable!');
++      }
++
++      if (function_exists('is_executable') && !is_executable($php)) {
++              error("invalid PHP executable specified by TEST_PHP_EXECUTABLE  
= $php");
++      }
++}
++
++if (getenv('TEST_PHP_LOG_FORMAT')) {
++      $log_format = strtoupper(getenv('TEST_PHP_LOG_FORMAT'));
++} else {
++      $log_format = 'LEOD';
++}
++
++// Check whether a detailed log is wanted.
++if (getenv('TEST_PHP_DETAILED')) {
++      $DETAILED = getenv('TEST_PHP_DETAILED');
++} else {
++      $DETAILED = 0;
++}
++
++// Check whether user test dirs are requested.
++if (getenv('TEST_PHP_USER')) {
++      $user_tests = explode (',', getenv('TEST_PHP_USER'));
++} else {
++      $user_tests = array();
++}
++
++$exts_to_test = array();
++$ini_overwrites = array(
++              'output_handler=',
++              'open_basedir=',
++              'safe_mode=0',
++              'disable_functions=',
++              'output_buffering=Off',
++              'error_reporting=' . (E_ALL | E_STRICT),
++              'display_errors=1',
++              'display_startup_errors=1',
++              'log_errors=0',
++              'html_errors=0',
++              'track_errors=1',
++              'report_memleaks=1',
++              'report_zend_debug=0',
++              'docref_root=',
++              'docref_ext=.html',
++              'error_prepend_string=',
++              'error_append_string=',
++              'auto_prepend_file=',
++              'auto_append_file=',
++              'magic_quotes_runtime=0',
++              'ignore_repeated_errors=0',
++              'unicode.runtime_encoding=ISO-8859-1',
++              'unicode.script_encoding=UTF-8',
++              'unicode.output_encoding=UTF-8',
++              'unicode.from_error_mode=U_INVALID_SUBSTITUTE',
++      );
++
++function write_information($show_html)
++{
++      global $cwd, $php, $php_cgi, $php_info, $user_tests, $ini_overwrites, 
$pass_options, $exts_to_test, $leak_check, $valgrind_header;
++
++      // Get info from php
++      $info_file = realpath(dirname(__FILE__)) . '/run-test-info.php';
++      @unlink($info_file);
++      $php_info = '<?php echo "
++PHP_SAPI    : " , PHP_SAPI , "
++PHP_VERSION : " , phpversion() , "
++ZEND_VERSION: " , zend_version() , "
++PHP_OS      : " , PHP_OS , " - " , php_uname() , "
++INI actual  : " , realpath(get_cfg_var("cfg_file_path")) , "
++More .INIs  : " , (function_exists(\'php_ini_scanned_files\') ? 
str_replace("\n","", php_ini_scanned_files()) : "** not determined **"); ?>';
++      save_text($info_file, $php_info);
++      $info_params = array();
++      settings2array($ini_overwrites, $info_params);
++      settings2params($info_params);
++      $php_info = `$php $pass_options $info_params "$info_file"`;
++      define('TESTED_PHP_VERSION', `$php -n -r "echo PHP_VERSION;"`);
++
++      if ($php_cgi && $php != $php_cgi) {
++              $php_info_cgi = `$php_cgi $pass_options $info_params -q 
"$info_file"`;
++              $php_info_sep = 
"\n---------------------------------------------------------------------";
++              $php_cgi_info = "$php_info_sep\nPHP         : $php_cgi 
$php_info_cgi$php_info_sep";
++      } else {
++              $php_cgi_info = '';
++      }
++
++      @unlink($info_file);
++
++      // load list of enabled extensions
++      save_text($info_file, '<?php echo join(",", get_loaded_extensions()); 
?>');
++      $exts_to_test = explode(',',`$php $pass_options $info_params 
"$info_file"`);
++      // check for extensions that need special handling and regenerate
++      $info_params_ex = array(
++              'session' => array('session.auto_start=0'),
++              'tidy' => array('tidy.clean_output=0'),
++              'zlib' => array('zlib.output_compression=Off'),
++              'xdebug' => array('xdebug.default_enable=0'),
++              'mbstring' => array('mbstring.func_overload=0'),
++      );
++
++      foreach($info_params_ex as $ext => $ini_overwrites_ex) {
++              if (in_array($ext, $exts_to_test)) {
++                      $ini_overwrites = array_merge($ini_overwrites, 
$ini_overwrites_ex);
++              }
++      }
++
++      @unlink($info_file);
++
++      // Write test context information.
++      echo "
++=====================================================================
++PHP         : $php $php_info $php_cgi_info
++CWD         : $cwd
++Extra dirs  : ";
++      foreach ($user_tests as $test_dir) {
++              echo "{$test_dir}\n              ";
++      }
++      echo "
++VALGRIND    : " . ($leak_check ? $valgrind_header : 'Not used') . "
++=====================================================================
++";
++}
++
++define('PHP_QA_EMAIL', '[email protected]');
++define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php');
++
++function save_or_mail_results()
++{
++      global $sum_results, $just_save_results, $failed_test_summary,
++             $PHP_FAILED_TESTS, $CUR_DIR, $php, $output_file, $compression;
++
++      /* We got failed Tests, offer the user to send an e-mail to QA team, 
unless NO_INTERACTION is set */
++      if (false) {
++              $fp = fopen("php://stdin", "r+");
++              if ($sum_results['FAILED'] || $sum_results['BORKED'] || 
$sum_results['WARNED'] || $sum_results['LEAKED'] || $sum_results['XFAILED']) {
++                      echo "\nYou may have found a problem in PHP.";
++              }
++              echo "\nWe would like to send this report automatically to 
the\n";
++              echo "PHP QA team, to give us a better understanding of 
how\nthe test cases are doing. If you don't want to send it\n";
++              echo "immediately, you can choose \"s\" to save the report 
to\na file that you can send us later.\n";
++              echo "Do you want to send this report now? [Yns]: ";
++              flush();
++
++              $user_input = fgets($fp, 10);
++              $just_save_results = (strtolower($user_input[0]) == 's');
++      }
++
++      if ($just_save_results || false) {
++              if ($just_save_results || strlen(trim($user_input)) == 0 || 
strtolower($user_input[0]) == 'y') {
++                      /*
++                       * Collect information about the host system for our 
report
++                       * Fetch phpinfo() output so that we can see the PHP 
enviroment
++                       * Make an archive of all the failed tests
++                       * Send an email
++                       */
++                      if ($just_save_results) {
++                              $user_input = 's';
++                      }
++
++                      /* Ask the user to provide an email address, so that QA 
team can contact the user */
++                      if (!strncasecmp($user_input, 'y', 1) || 
strlen(trim($user_input)) == 0) {
++                              echo "\nPlease enter your email address.\n(Your 
address will be mangled so that it will not go out on any\nmailinglist in plain 
text): ";
++                              flush();
++                              $user_email = trim(fgets($fp, 1024));
++                              $user_email = str_replace("@", " at ", 
str_replace(".", " dot ", $user_email));
++                      }
++
++                      $failed_tests_data = '';
++                      $sep = "\n" . str_repeat('=', 80) . "\n";
++                      $failed_tests_data .= $failed_test_summary . "\n";
++                      $failed_tests_data .= get_summary(true, false) . "\n";
++
++                      if ($sum_results['FAILED']) {
++                              foreach ($PHP_FAILED_TESTS['FAILED'] as 
$test_info) {
++                                      $failed_tests_data .= $sep . 
$test_info['name'] . $test_info['info'];
++                                      $failed_tests_data .= $sep . 
file_get_contents(realpath($test_info['output']));
++                                      $failed_tests_data .= $sep . 
file_get_contents(realpath($test_info['diff']));
++                                      $failed_tests_data .= $sep . "\n\n";
++                              }
++                              $status = "failed";
++                      } else {
++                              $status = "success";
++                      }
++
++                      $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' 
. $sep;
++                      $failed_tests_data .= "OS:\n" . PHP_OS . " - " . 
php_uname() . "\n\n";
++                      $ldd = $autoconf = $sys_libtool = $libtool = $compiler 
= 'N/A';
++
++                      if (substr(PHP_OS, 0, 3) != "WIN") {
++                              /* If PHP_AUTOCONF is set, use it; otherwise, 
use 'autoconf'. */
++                              if (getenv('PHP_AUTOCONF')) {
++                                      $autoconf = 
shell_exec(getenv('PHP_AUTOCONF') . ' --version');
++                              } else {
++                                      $autoconf = shell_exec('autoconf 
--version');
++                              }
++
++                              /* Always use the generated libtool - Mac OSX 
uses 'glibtool' */
++                              $libtool = shell_exec($CUR_DIR . '/libtool 
--version');
++
++                              /* Use shtool to find out if there is glibtool 
present (MacOSX) */
++                              $sys_libtool_path = 
shell_exec(realpath(dirname(__FILE__)) . '/build/shtool path glibtool libtool');
++
++                              if ($sys_libtool_path) {
++                                      $sys_libtool = 
shell_exec(str_replace("\n", "", $sys_libtool_path) . ' --version');
++                              }
++
++                              /* Try the most common flags for 'version' */
++                              $flags = array('-v', '-V', '--version');
++                              $cc_status = 0;
++
++                              foreach($flags AS $flag) {
++                                      system(getenv('CC') . " $flag 
>/dev/null 2>&1", $cc_status);
++                                      if ($cc_status == 0) {
++                                              $compiler = 
shell_exec(getenv('CC') . " $flag 2>&1");
++                                              break;
++                                      }
++                              }
++
++                              $ldd = shell_exec("ldd $php 2>/dev/null");
++                      }
++
++                      $failed_tests_data .= "Autoconf:\n$autoconf\n";
++                      $failed_tests_data .= "Bundled Libtool:\n$libtool\n";
++                      $failed_tests_data .= "System Libtool:\n$sys_libtool\n";
++                      $failed_tests_data .= "Compiler:\n$compiler\n";
++                      $failed_tests_data .= "Bison:\n". shell_exec('bison 
--version 2>/dev/null') . "\n";
++                      $failed_tests_data .= "Libraries:\n$ldd\n";
++                      $failed_tests_data .= "\n";
++
++                      if (isset($user_email)) {
++                              $failed_tests_data .= "User's E-mail: " . 
$user_email . "\n\n";
++                      }
++
++                      $failed_tests_data .= $sep . "PHPINFO" . $sep;
++                      $failed_tests_data .= shell_exec($php . ' 
-ddisplay_errors=stderr -dhtml_errors=0 -i 2> /dev/null');
++
++                      if ($just_save_results || 
!mail_qa_team($failed_tests_data, $compression, $status)) {
++                              file_put_contents($output_file, 
$failed_tests_data);
++
++                              if (!$just_save_results) {
++                                      echo "\nThe test script was unable to 
automatically send the report to PHP's QA Team\n";
++                              }
++
++                              echo "Please send " . $output_file . " to " . 
PHP_QA_EMAIL . " manually, thank you.\n";
++                      } else {
++                              fwrite($fp, "\nThank you for helping to make 
PHP better.\n");
++                              fclose($fp);
++                      }
++              }
++      }
++}
++
++// Determine the tests to be run.
++
++$test_files = array();
++$redir_tests = array();
++$test_results = array();
++$PHP_FAILED_TESTS = array('BORKED' => array(), 'FAILED' => array(), 'WARNED' 
=> array(), 'LEAKED' => array(), 'XFAILED' => array());
++
++// If parameters given assume they represent selected tests to run.
++$failed_tests_file= false;
++$pass_option_n = false;
++$pass_options = '';
++
++$compression = 0;
++$output_file = $CUR_DIR . '/php_test_results_' . date('Ymd_Hi') . '.txt';
++
++if ($compression) {
++      $output_file = 'compress.zlib://' . $output_file . '.gz';
++}
++
++$just_save_results = false;
++$leak_check = false;
++$html_output = false;
++$html_file = null;
++$temp_source = null;
++$temp_target = null;
++$temp_urlbase = null;
++$conf_passed = null;
++$no_clean = false;
++
++$cfgtypes = array('show', 'keep');
++$cfgfiles = array('skip', 'php', 'clean', 'out', 'diff', 'exp');
++$cfg = array();
++
++foreach($cfgtypes as $type) {
++      $cfg[$type] = array();
++
<<Diff was trimmed, longer than 597 lines>>
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to