mirror of
https://github.com/danog/file.git
synced 2024-11-26 11:54:54 +01:00
Add optional time parameters to touch function (#22)
This commit is contained in:
parent
9a375918ae
commit
b67c83752c
@ -324,8 +324,10 @@ class BlockingDriver implements Driver {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function touch(string $path): Promise {
|
||||
return new Success((bool) \touch($path));
|
||||
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||
$time = $time ?? \time();
|
||||
$atime = $atime ?? $time;
|
||||
return new Success((bool) \touch($path, $time, $atime));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -196,9 +196,11 @@ interface Driver {
|
||||
* If the file does not exist it will be created automatically.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $time The touch time. If $time is not supplied, the current system time is used.
|
||||
* @param int $atime The access time. If $atime is not supplied, value passed to the $time parameter is used.
|
||||
* @return \Amp\Promise
|
||||
*/
|
||||
public function touch(string $path): Promise;
|
||||
public function touch(string $path, int $time = null, int $atime = null): Promise;
|
||||
|
||||
/**
|
||||
* Buffer the specified file's contents.
|
||||
|
@ -464,14 +464,15 @@ class EioDriver implements Driver {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function touch(string $path): Promise {
|
||||
$atime = $mtime = \time();
|
||||
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||
$time = $time ?? \time();
|
||||
$atime = $atime ?? $time;
|
||||
|
||||
$deferred = new Deferred;
|
||||
$this->poll->listen($deferred->promise());
|
||||
|
||||
$priority = \EIO_PRI_DEFAULT;
|
||||
\eio_utime($path, $atime, $mtime, $priority, [$this, "onGenericResult"], $deferred);
|
||||
\eio_utime($path, $atime, $time, $priority, [$this, "onGenericResult"], $deferred);
|
||||
|
||||
return $deferred->promise();
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Amp\File\Internal;
|
||||
|
||||
use Amp\File\BlockingDriver;
|
||||
|
@ -264,8 +264,8 @@ class ParallelDriver implements Driver {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function touch(string $path): Promise {
|
||||
return new Coroutine($this->runFileTask(new Internal\FileTask("touch", [$path])));
|
||||
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||
return new Coroutine($this->runFileTask(new Internal\FileTask("touch", [$path, $time, $atime])));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -458,13 +458,14 @@ class UvDriver implements Driver {
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function touch(string $path): Promise {
|
||||
$atime = $mtime = time();
|
||||
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||
$time = $time ?? \time();
|
||||
$atime = $atime ?? $time;
|
||||
|
||||
$deferred = new Deferred;
|
||||
$this->poll->listen($deferred->promise());
|
||||
|
||||
\uv_fs_utime($this->loop, $path, $mtime, $atime, function () use ($deferred) {
|
||||
\uv_fs_utime($this->loop, $path, $time, $atime, function () use ($deferred) {
|
||||
// The uv_fs_utime() callback does not receive any args at this time
|
||||
$deferred->resolve(true);
|
||||
});
|
||||
|
@ -305,10 +305,12 @@ function chown(string $path, int $uid, int $gid = -1): Promise {
|
||||
* If the file does not exist it will be created automatically.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $time The touch time. If $time is not supplied, the current system time is used.
|
||||
* @param int $atime The access time. If $atime is not supplied, value passed to the $time parameter is used.
|
||||
* @return \Amp\Promise<null>
|
||||
*/
|
||||
function touch(string $path): Promise {
|
||||
return filesystem()->touch($path);
|
||||
function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||
return filesystem()->touch($path, $time, $atime);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -316,8 +316,7 @@ abstract class DriverTest extends TestCase {
|
||||
yield File\put($touch, "touch me");
|
||||
|
||||
$oldStat = (yield File\stat($touch));
|
||||
sleep(1);
|
||||
yield File\touch($touch);
|
||||
yield File\touch($touch, \time() + 10, \time() + 20);
|
||||
File\StatCache::clear($touch);
|
||||
$newStat = (yield File\stat($touch));
|
||||
yield File\unlink($touch);
|
||||
|
Loading…
Reference in New Issue
Block a user