MCPcopy Create free account
hub / github.com/cloudflare/computer / truncateFileSync

Function truncateFileSync

packages/dofs/src/fs/writeFile.ts:848–918  ·  view source on GitHub ↗
(
  db: Database,
  path: string,
  size: number,
  now: () => number,
)

Source from the content-addressed store, hash-verified

846}
847
848export function truncateFileSync(
849 db: Database,
850 path: string,
851 size: number,
852 now: () => number,
853): void {
854 const { path: canonical } = canonicalizePath(path);
855 assertNotReadOnly(db, canonical);
856 if (!Number.isInteger(size) || size < 0) {
857 throw createWorkspaceError("EINVAL", `invalid truncate size: ${size}`, canonical);
858 }
859 const mtime = now();
860
861 // Pending-create files truncate in-place on the path-keyed buffer.
862 const pending = getPendingWriteBufferByPath(db, canonical);
863 if (pending !== undefined) {
864 if (size > pending.size) {
865 ensureBufferCapacity(pending, size);
866 pending.buf.fill(0, pending.size, size);
867 }
868 pending.size = size;
869 pending.dirty = true;
870 return;
871 }
872
873 const { inode, mode } = resolveFileInode(db, path);
874 const buffered = getWriteBuffer(db, inode);
875
876 if (buffered !== undefined) {
877 hydrateBufferIfNeeded(db, inode, buffered);
878 if (size > buffered.size) {
879 ensureBufferCapacity(buffered, size);
880 buffered.buf.fill(0, buffered.size, size);
881 }
882 buffered.size = size;
883 buffered.dirty = true;
884 return;
885 }
886
887 db.transactionSync(() => {
888 const oldSize = fileSizeForInode(db, inode);
889 if (oldSize === size) return;
890
891 if (size === 0) {
892 db.run("DELETE FROM vfs_chunks WHERE inode = ?", inode);
893 const rev = incrementRev(db);
894 db.run(
895 "UPDATE vfs_nodes SET mode = ?, mtime = ?, rev = ?, size = 0, manifest_hash = NULL WHERE inode = ?",
896 mode,
897 mtime,
898 rev,
899 inode,
900 );
901 return;
902 }
903
904 applyChunkedInodeUpdate(
905 db,

Callers 2

writeRange.test.tsFile · 0.85

Calls 13

canonicalizePathFunction · 0.85
assertNotReadOnlyFunction · 0.85
resolveFileInodeFunction · 0.85
getWriteBufferFunction · 0.85
hydrateBufferIfNeededFunction · 0.85
fileSizeForInodeFunction · 0.85
incrementRevFunction · 0.85
applyChunkedInodeUpdateFunction · 0.85
transactionSyncMethod · 0.65
setMethod · 0.65
createWorkspaceErrorFunction · 0.50

Tested by

no test coverage detected