アドベントペアプロ #6 denoland/deno

ファシリテータ: @ggtmtgg セクリタリ: @ggtmtmgg 参加者: @binaryta, @Haga

h2

src/fs.rs

// TODO: on posix, set mode flags to 0o700

サンプルコード

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