mirror of
https://github.com/danog/file.git
synced 2024-11-26 20:04:51 +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}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function touch(string $path): Promise {
|
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||||
return new Success((bool) \touch($path));
|
$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.
|
* If the file does not exist it will be created automatically.
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @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
|
* @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.
|
* Buffer the specified file's contents.
|
||||||
|
@ -464,14 +464,15 @@ class EioDriver implements Driver {
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function touch(string $path): Promise {
|
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||||
$atime = $mtime = \time();
|
$time = $time ?? \time();
|
||||||
|
$atime = $atime ?? $time;
|
||||||
|
|
||||||
$deferred = new Deferred;
|
$deferred = new Deferred;
|
||||||
$this->poll->listen($deferred->promise());
|
$this->poll->listen($deferred->promise());
|
||||||
|
|
||||||
$priority = \EIO_PRI_DEFAULT;
|
$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();
|
return $deferred->promise();
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Amp\File\Internal;
|
namespace Amp\File\Internal;
|
||||||
|
|
||||||
use Amp\File\BlockingDriver;
|
use Amp\File\BlockingDriver;
|
||||||
|
@ -264,8 +264,8 @@ class ParallelDriver implements Driver {
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function touch(string $path): Promise {
|
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||||
return new Coroutine($this->runFileTask(new Internal\FileTask("touch", [$path])));
|
return new Coroutine($this->runFileTask(new Internal\FileTask("touch", [$path, $time, $atime])));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -458,13 +458,14 @@ class UvDriver implements Driver {
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function touch(string $path): Promise {
|
public function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||||
$atime = $mtime = time();
|
$time = $time ?? \time();
|
||||||
|
$atime = $atime ?? $time;
|
||||||
|
|
||||||
$deferred = new Deferred;
|
$deferred = new Deferred;
|
||||||
$this->poll->listen($deferred->promise());
|
$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
|
// The uv_fs_utime() callback does not receive any args at this time
|
||||||
$deferred->resolve(true);
|
$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.
|
* If the file does not exist it will be created automatically.
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @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>
|
* @return \Amp\Promise<null>
|
||||||
*/
|
*/
|
||||||
function touch(string $path): Promise {
|
function touch(string $path, int $time = null, int $atime = null): Promise {
|
||||||
return filesystem()->touch($path);
|
return filesystem()->touch($path, $time, $atime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -316,8 +316,7 @@ abstract class DriverTest extends TestCase {
|
|||||||
yield File\put($touch, "touch me");
|
yield File\put($touch, "touch me");
|
||||||
|
|
||||||
$oldStat = (yield File\stat($touch));
|
$oldStat = (yield File\stat($touch));
|
||||||
sleep(1);
|
yield File\touch($touch, \time() + 10, \time() + 20);
|
||||||
yield File\touch($touch);
|
|
||||||
File\StatCache::clear($touch);
|
File\StatCache::clear($touch);
|
||||||
$newStat = (yield File\stat($touch));
|
$newStat = (yield File\stat($touch));
|
||||||
yield File\unlink($touch);
|
yield File\unlink($touch);
|
||||||
|
Loading…
Reference in New Issue
Block a user