Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
1 change: 1 addition & 0 deletions packages/client/src/file/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ impl Builder {
.collect(),
executable: self.executable,
module: self.module,
size: None,
}))
}
}
4 changes: 4 additions & 0 deletions packages/client/src/graph/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,10 @@ pub struct File {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[tangram_serialize(id = 3, default, skip_serializing_if = "Option::is_none")]
pub module: Option<tg::module::Kind>,

#[serde(default, skip_serializing_if = "Option::is_none")]
#[tangram_serialize(id = 4, default, skip_serializing_if = "Option::is_none")]
pub size: Option<u64>,
}

#[serde_as]
Expand Down
5 changes: 5 additions & 0 deletions packages/client/src/graph/object.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ pub struct File {
pub dependencies: BTreeMap<tg::Reference, Option<Dependency>>,
pub executable: bool,
pub module: Option<tg::module::Kind>,
pub size: Option<u64>,
}

#[derive(Clone, Debug)]
Expand Down Expand Up @@ -288,11 +289,13 @@ impl File {
.collect();
let executable = self.executable;
let module = self.module;
let size = self.size;
tg::graph::data::File {
contents,
dependencies,
executable,
module,
size,
}
}

Expand All @@ -319,11 +322,13 @@ impl File {
.collect::<tg::Result<_>>()?;
let executable = data.executable;
let module = data.module;
let size = data.size;
let file = tg::graph::File {
contents,
dependencies,
executable,
module,
size,
};
Ok(file)
}
Expand Down
28 changes: 28 additions & 0 deletions packages/client/src/value/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,7 @@ fn directory_node_entry(input: &mut Input) -> ModalResult<tg::graph::Edge<tg::Ar
alt((
string.map(|s| {
let bytes = Bytes::from(s.into_bytes());
let size = bytes.len().to_u64().unwrap();
let leaf = tg::blob::object::Leaf { bytes };
let blob_object = tg::blob::Object::Leaf(leaf);
let blob = tg::Blob::with_object(blob_object);
Expand All @@ -402,6 +403,7 @@ fn directory_node_entry(input: &mut Input) -> ModalResult<tg::graph::Edge<tg::Ar
dependencies: BTreeMap::new(),
executable: false,
module: None,
size: Some(size),
};
let object = tg::file::Object::Node(node);
let file = tg::File::with_object(object);
Expand All @@ -428,6 +430,7 @@ fn file_string(input: &mut Input) -> ModalResult<tg::Object> {
string
.map(|s| {
let bytes = Bytes::from(s.into_bytes());
let size = bytes.len().to_u64().unwrap();
let leaf = tg::blob::object::Leaf { bytes };
let blob_object = tg::blob::Object::Leaf(leaf);
let blob = tg::Blob::with_object(blob_object);
Expand All @@ -436,6 +439,7 @@ fn file_string(input: &mut Input) -> ModalResult<tg::Object> {
dependencies: BTreeMap::new(),
executable: false,
module: None,
size: Some(size),
};
let object = tg::file::Object::Node(node);
tg::File::with_object(object).into()
Expand Down Expand Up @@ -467,6 +471,7 @@ fn file_node(input: &mut Input) -> ModalResult<tg::Object> {
let mut dependencies = BTreeMap::new();
let mut executable = false;
let mut module = None;
let mut size = None;
for (key, value) in entries {
match key.as_str() {
"contents" => {
Expand Down Expand Up @@ -519,6 +524,16 @@ fn file_node(input: &mut Input) -> ModalResult<tg::Object> {
.map_err(|_| tg::error!("expected a module kind"))?;
module.replace(value);
},
"size" => {
let value = value
.try_unwrap_number_ref()
.map_err(|_| tg::error!("expected number for size"))?;
size = Some(
value
.to_u64()
.ok_or_else(|| tg::error!("size must be a non-negative integer"))?,
);
},
_ => {
return Err(tg::error!("unexpected field in file: {}", key));
},
Expand All @@ -530,6 +545,7 @@ fn file_node(input: &mut Input) -> ModalResult<tg::Object> {
dependencies,
executable,
module,
size,
};
let object = tg::file::Object::Node(node);
Ok(tg::File::with_object(object).into())
Expand Down Expand Up @@ -1096,6 +1112,7 @@ fn parse_graph_node(map: &tg::value::Map) -> tg::Result<tg::graph::Node> {
let mut dependencies = BTreeMap::new();
let mut executable = false;
let mut module = None;
let mut size = None;
let mut artifact = None;
let mut path = None;
for (key, value) in map {
Expand Down Expand Up @@ -1177,6 +1194,16 @@ fn parse_graph_node(map: &tg::value::Map) -> tg::Result<tg::graph::Node> {
.map_err(|_| tg::error!("expected a module kind"))?;
module.replace(value);
},
"size" => {
let value = value
.try_unwrap_number_ref()
.map_err(|_| tg::error!("expected number for size"))?;
size = Some(
value
.to_u64()
.ok_or_else(|| tg::error!("size must be a non-negative integer"))?,
);
},
_ => {
return Err(tg::error!("unexpected field in graph node: {}", key));
},
Expand All @@ -1196,6 +1223,7 @@ fn parse_graph_node(map: &tg::value::Map) -> tg::Result<tg::graph::Node> {
dependencies,
executable,
module,
size,
}))
},
"symlink" => Ok(tg::graph::Node::Symlink(tg::graph::Symlink {
Expand Down
3 changes: 3 additions & 0 deletions packages/client/src/value/print.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,9 @@ where
if file.executable {
self.map_entry("executable", |s| s.bool(file.executable))?;
}
if let Some(size) = file.size {
self.map_entry("size", |s| s.number(size.to_f64().unwrap()))?;
}
if let Some(module) = &file.module {
self.map_entry("module", |s| s.string(&module.to_string()))?;
}
Expand Down
3 changes: 2 additions & 1 deletion packages/clients/js/src/file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ export class File {
);
let executable = arg.executable ?? false;
let module = arg.module;
let object = { contents, dependencies, executable, module };
let size = arg.size ?? undefined;
let object = { contents, dependencies, executable, module, size };
return tg.File.withObject(object);
}

Expand Down
15 changes: 15 additions & 0 deletions packages/clients/js/src/graph.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,14 @@ export class Graph {
);
let executable = node.executable ?? false;
let module = node.module ?? undefined;
let size = node.size ?? undefined;
return {
kind: "file" as const,
contents,
dependencies,
executable,
module,
size,
};
} else if (node.kind === "symlink") {
let artifact = tg.Graph.Edge.fromArg(node.artifact, arg.nodes);
Expand Down Expand Up @@ -195,6 +197,9 @@ export class Graph {
if ("executable" in argNode) {
node.executable = argNode.executable;
}
if ("size" in argNode) {
node.size = argNode.size;
}
nodes.push(node);
} else if (argNode.kind === "symlink") {
let artifact: tg.Graph.Arg.Edge<tg.Artifact> | undefined;
Expand Down Expand Up @@ -332,6 +337,7 @@ export namespace Graph {
| undefined;
executable?: boolean | undefined;
module?: string | undefined;
size?: number | undefined;
};

export type Symlink = {
Expand Down Expand Up @@ -560,6 +566,7 @@ export namespace Graph {
};
executable: boolean;
module: string | undefined;
size: number | undefined;
};

export namespace File {
Expand All @@ -581,6 +588,12 @@ export namespace Graph {
if (object.executable !== false) {
data.executable = object.executable;
}
if (object.module !== undefined) {
data.module = object.module;
}
if (object.size !== undefined) {
data.size = object.size;
}
return data;
};

Expand Down Expand Up @@ -609,6 +622,7 @@ export namespace Graph {
),
executable: data.executable ?? false,
module: data.module ?? undefined,
size: data.size ?? undefined,
};
};

Expand Down Expand Up @@ -998,6 +1012,7 @@ export namespace Graph {
};
executable?: boolean;
module?: string;
size?: number;
};

export type Symlink = {
Expand Down
4 changes: 4 additions & 0 deletions packages/js/src/tangram.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,8 @@ declare namespace tg {
}
| undefined;
executable?: boolean | undefined;
module?: string | undefined;
size?: number | undefined;
};

type Symlink = {
Expand Down Expand Up @@ -557,6 +559,8 @@ declare namespace tg {
[reference: tg.Reference]: tg.Graph.Dependency | undefined;
};
executable: boolean;
module: string | undefined;
size: number | undefined;
};

type Symlink = {
Expand Down
20 changes: 20 additions & 0 deletions packages/server/src/checkin/artifact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,18 @@ impl Server {
.collect::<tg::Result<_>>()?;
let executable = file.executable;
let module = file.module;
let size = file.size.or_else(|| {
file.contents.as_ref().and_then(|contents| match contents {
Contents::Write(output) => Some(output.length),
Contents::Id { .. } => None,
})
});
let data = tg::file::data::Node {
contents: Some(contents),
dependencies,
executable,
module,
size,
};
tg::file::Data::Node(data).into()
},
Expand Down Expand Up @@ -470,11 +477,18 @@ impl Server {
.collect::<tg::Result<_>>()?;
let executable = file.executable;
let module = file.module;
let size = file.size.or_else(|| {
file.contents.as_ref().and_then(|contents| match contents {
Contents::Write(output) => Some(output.length),
Contents::Id { .. } => None,
})
});
let data = tg::graph::data::File {
contents: Some(contents),
dependencies,
executable,
module,
size,
};
tg::graph::data::Node::File(data)
},
Expand Down Expand Up @@ -911,6 +925,12 @@ impl Server {
dependencies,
executable: file.executable,
module: file.module,
size: file.size.or_else(|| {
file.contents.as_ref().and_then(|contents| match contents {
Contents::Write(output) => Some(output.length),
Contents::Id { .. } => None,
})
}),
})
},
Variant::Directory(directory) => {
Expand Down
1 change: 1 addition & 0 deletions packages/server/src/checkin/blob.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ impl Server {
.unwrap()
.variant
.unwrap_file_mut();
file.size = Some(output.length);
file.contents = Some(Contents::Write(Box::new(output)));
}

Expand Down
1 change: 1 addition & 0 deletions packages/server/src/checkin/graph.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ pub struct File {
pub dependencies: BTreeMap<tg::Reference, Option<tg::graph::data::Dependency>>,
pub executable: bool,
pub module: Option<tg::module::Kind>,
pub size: Option<u64>,
}

#[derive(Clone, Debug)]
Expand Down
1 change: 1 addition & 0 deletions packages/server/src/checkin/input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ impl Server {
dependencies: BTreeMap::new(),
executable: metadata.permissions().mode() & 0o111 != 0,
module: None,
size: Some(metadata.len()),
})
} else if metadata.is_symlink() {
let path = std::fs::read_link(&item.path)
Expand Down
1 change: 1 addition & 0 deletions packages/server/src/checkin/lock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,7 @@ impl Server {
dependencies,
executable: file.executable,
module: file.module,
size: file.size,
};
(tg::graph::data::Node::File(data), children)
},
Expand Down
14 changes: 14 additions & 0 deletions packages/server/src/checkin/solve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -893,11 +893,18 @@ impl Server {
.collect();
let executable = file.executable;
let module = file.module;
let size = file.size.or_else(|| {
contents.as_ref().and_then(|contents| match contents {
Contents::Write(output) => Some(output.length),
Contents::Id { .. } => None,
})
});
Variant::File(File {
contents,
dependencies,
executable,
module,
size,
})
},
tg::artifact::Data::Symlink(tg::symlink::Data::Node(symlink)) => {
Expand Down Expand Up @@ -1063,11 +1070,18 @@ impl Server {
);
}
}
let size = file.size.or_else(|| {
contents.as_ref().and_then(|contents| match contents {
Contents::Write(output) => Some(output.length),
Contents::Id { .. } => None,
})
});
Variant::File(File {
contents,
dependencies,
executable: file.executable,
module: file.module,
size,
})
},

Expand Down
2 changes: 2 additions & 0 deletions packages/server/src/checkout/lock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ impl Server {
dependencies,
executable: node.executable,
module: node.module,
size: node.size,
};
let node = tg::graph::data::Node::File(file);
Ok(node)
Expand Down Expand Up @@ -535,6 +536,7 @@ impl Server {
dependencies,
executable: node.executable,
module: node.module,
size: node.size,
};
let node = tg::graph::data::Node::File(file);
Ok(node)
Expand Down
Loading