Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Deno.FsFile.{utime,utimeSync}() and deprecate Deno.{futime,futimeSync} #22070

Merged
merged 7 commits into from
Jan 24, 2024
Merged
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions cli/tests/unit/utime_test.ts
Original file line number Diff line number Diff line change
@@ -27,6 +27,27 @@ Deno.test(
},
);

Deno.test(
{ permissions: { read: true, write: true } },
async function fsFileUtimeSyncSuccess() {
const testDir = await Deno.makeTempDir();
const filename = testDir + "/file.txt";
using file = await Deno.open(filename, {
create: true,
write: true,
});

const atime = 1000;
const mtime = 50000;
await file.utime(atime, mtime);
await file.dataSync();

const fileInfo = Deno.statSync(filename);
assertEquals(fileInfo.atime, new Date(atime * 1000));
assertEquals(fileInfo.mtime, new Date(mtime * 1000));
},
);

Deno.test(
{ permissions: { read: true, write: true } },
function futimeSyncSuccess() {
@@ -48,6 +69,27 @@ Deno.test(
},
);

Deno.test(
{ permissions: { read: true, write: true } },
function futimeSyncSuccess() {
const testDir = Deno.makeTempDirSync();
const filename = testDir + "/file.txt";
using file = Deno.openSync(filename, {
create: true,
write: true,
});

const atime = 1000;
const mtime = 50000;
file.utimeSync(atime, mtime);
file.dataSyncSync();

const fileInfo = Deno.statSync(filename);
assertEquals(fileInfo.atime, new Date(atime * 1000));
assertEquals(fileInfo.mtime, new Date(mtime * 1000));
},
);

Deno.test(
{ permissions: { read: true, write: true } },
function utimeSyncFileSuccess() {
32 changes: 32 additions & 0 deletions cli/tsc/dts/lib.deno.ns.d.ts
Original file line number Diff line number Diff line change
@@ -2616,6 +2616,32 @@ declare namespace Deno {
* @category I/O
*/
dataSyncSync(): void;
/**
* Changes the access (`atime`) and modification (`mtime`) times of the
* file stream resource. Given times are either in seconds (UNIX epoch
* time) or as `Date` objects.
*
* ```ts
* using file = await Deno.open("file.txt", { create: true, write: true });
* await file.utime(1556495550, new Date());
* ```
*
* @category File System
*/
utime(atime: number | Date, mtime: number | Date): Promise<void>;
/**
* Synchronously changes the access (`atime`) and modification (`mtime`)
* times of the file stream resource. Given times are either in seconds
* (UNIX epoch time) or as `Date` objects.
*
* ```ts
* using file = Deno.openSync("file.txt", { create: true, write: true });
* file.utime(1556495550, new Date());
* ```
*
* @category File System
*/
utimeSync(atime: number | Date, mtime: number | Date): void;
/** Close the file. Closing a file when you are finished with it is
* important to avoid leaking resources.
*
@@ -5359,6 +5385,9 @@ declare namespace Deno {
* Deno.futimeSync(file.rid, 1556495550, new Date());
* ```
*
* @deprecated Use {@linkcode Deno.FsFile.utimeSync} instead.
* {@linkcode Deno.futimeSync} will be removed in Deno 2.0.
*
* @category File System
*/
export function futimeSync(
@@ -5377,6 +5406,9 @@ declare namespace Deno {
* await Deno.futime(file.rid, 1556495550, new Date());
* ```
*
* @deprecated Use {@linkcode Deno.FsFile.utime} instead.
* {@linkcode Deno.futime} will be removed in Deno 2.0.
*
* @category File System
*/
export function futime(
8 changes: 8 additions & 0 deletions ext/fs/30_fs.js
Original file line number Diff line number Diff line change
@@ -747,6 +747,14 @@ class FsFile {
op_fs_fsync_sync(this.rid);
}

async utime(atime, mtime) {
await futime(this.#rid, atime, mtime);
}

utimeSync(atime, mtime) {
futimeSync(this.#rid, atime, mtime);
}

[SymbolDispose]() {
core.tryClose(this.rid);
}
7 changes: 5 additions & 2 deletions ext/node/polyfills/_fs/_fs_futimes.ts
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
// deno-lint-ignore-file prefer-primordials

import type { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
import { FsFile } from "ext:deno_fs/30_fs.js";

function getValidTime(
time: number | string | Date,
@@ -38,7 +39,8 @@ export function futimes(
atime = getValidTime(atime, "atime");
mtime = getValidTime(mtime, "mtime");

Deno.futime(fd, atime, mtime).then(() => callback(null), callback);
// TODO(@littledivy): Treat `fd` as real file descriptor.
new FsFile(fd).utime(atime, mtime).then(() => callback(null), callback);
iuioiua marked this conversation as resolved.
Show resolved Hide resolved
}

export function futimesSync(
@@ -49,5 +51,6 @@ export function futimesSync(
atime = getValidTime(atime, "atime");
mtime = getValidTime(mtime, "mtime");

Deno.futimeSync(fd, atime, mtime);
// TODO(@littledivy): Treat `fd` as real file descriptor.
new FsFile(fd).utimeSync(atime, mtime);
iuioiua marked this conversation as resolved.
Show resolved Hide resolved
}
18 changes: 16 additions & 2 deletions runtime/js/90_deno_ns.js
Original file line number Diff line number Diff line change
@@ -80,8 +80,22 @@ const denoNs = {
truncate: fs.truncate,
ftruncateSync: fs.ftruncateSync,
ftruncate: fs.ftruncate,
futime: fs.futime,
futimeSync: fs.futimeSync,
async futime(rid, atime, mtime) {
internals.warnOnDeprecatedApi(
"Deno.futime()",
new Error().stack,
"Use `Deno.FsFile.utime()` instead.",
);
await fs.futime(rid, atime, mtime);
},
futimeSync(rid, atime, mtime) {
internals.warnOnDeprecatedApi(
"Deno.futimeSync()",
new Error().stack,
"Use `Deno.FsFile.utimeSync()` instead.",
);
fs.futimeSync(rid, atime, mtime);
},
errors: errors.errors,
inspect: console.inspect,
env: os.env,