アドベントペアプロ #6 denoland/deno
ファシリテータ: @ggtmtgg セクリタリ: @ggtmtmgg 参加者: @binaryta, @Haga
h2
src/fs.rs
// TODO: on posix, set mode flags to 0o700
- posixを理解する
- create_dirした後にstg::fs::set_permissionsをつかって権限を700にする
- main.rsでサンプルコードを書く
- 参考: https://doc.rust-lang.org/std/fs/fn.set_permissions.html
- そのtestを書く
サンプルコード
use std::fs; fn main() -> std::io::Result<()> { let d = fs::create_dir("/Users/naritatakuya/dir")?; fs::set_permissions("/Users/naritatakuya/dir", perms); println!("{:?}", d); Ok(()) }
- // TODO: on posix, set mode flags to 0o700. let r = create_dir(buf.as_path()); + let mut file; + match r { + Ok(_) => { + file = OpenOptions::new().open(buf.as_path())?; + }, + Err(e) => return Err(e), + } + + let r = set_permissions(&mut file, 0o700); + + match r {
このtestを通す
$ ./tools/test.py
use std::fs; use std::fs::{OpenOptions}; use std::os::unix::fs::PermissionsExt; fn main() -> std::io::Result<()> { // let d = fs::create_dir("/Users/TSUBASA/workspace/deno/foo")?; let file; let path = "/Users/TSUBASA/workspace/deno/foo"; let r = fs::create_dir(path); match r { Ok(_) => { file = OpenOptions::new().create(true).open(path)?; }, Err(e) => return Err(e), } let _r = file.set_permissions(PermissionsExt::from_mode(0o700 & 0o777)); Ok(()) }
が{ code: 22, kind: InvalidInput, message: "Invalid argument" }
を出しているのをなおす`
use std::fs; use std::fs::{OpenOptions}; use std::os::unix::fs::PermissionsExt; fn main() -> std::io::Result<()> { // let d = fs::create_dir("/Users/TSUBASA/workspace/deno/foo")?; let file; let path = "/Users/TSUBASA/workspace/deno/foo"; let r = fs::create_dir(path); match r { Ok(_) => { file = OpenOptions::new() .read(true) .write(true) .create(true) .open(path)?; }, Err(e) => return Err(e), } let _r = file.set_permissions(PermissionsExt::from_mode(0o700 & 0o777)); Ok(()) }
が Error: Os { code: 21, kind: Other, message: "Is a directory" }
を出しているのをなおす
僕らは file のpermissionを変更するやつをdirにやろうとしてた。 dirのpermissionを変え無くてはならない。
use std::path::PathBuf; use std::fs; use std::os::unix::fs::PermissionsExt; fn main() -> std::io::Result<()> { let path = PathBuf::from("/Users/naritatakuya/foo"); let r = fs::create_dir(path.as_path()); fs::set_permissions(path.as_path(), PermissionsExt::from_mode(0o700))?; Ok(()) }
が動いた
[Darwin (deno)] (master) $ find ./target/ -type f | grep msg_generated ./target//debug/gen/msg_generated.ts ./target//debug/gen/msg_generated.rs