-
Notifications
You must be signed in to change notification settings - Fork 0
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
Feature/#7 add custom file #59
Conversation
チェックリストのテストについてはどうするのがよいですか |
Ok(Directory { path }) | ||
} | ||
fn create_hardlink_to(&self, _path: PathBuf) -> Result<Self> { | ||
Err(anyhow!("hard link not allowed for directory")) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これ知りませんでしたごめんなさい
シンボリックリンクで同じような振る舞いを再現してほしいです
impl Drop for Directory { | ||
fn drop(&mut self) { | ||
if let Err(e) = std::fs::remove_dir_all(&self.path) { | ||
eprintln!("{:?}", e); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
grafanaについて調べてから実装したいので、この部分を!unimplementedに変更してほしいです
} | ||
|
||
impl TextFile { | ||
fn read(&self) -> Result<String> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
readがdead codeになる気がします
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@comavius どう対処すればよいですか?#[allow(dead_code)]
でよいですか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
クラス内部で呼び出さないならいらない気がします
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
設計に色々不備があってごめん
今回はなしでissue立てだけお願いします |
@comavius レビューお願いします. シンボリックリンクを発行する機能を
とする必要があります.これまでに指摘された点はすべて修正したつもりですが,反映忘れ等あったらすみません. #[cfg(test)]
mod tests {
use std::{
path::PathBuf,
sync::{Arc, RwLock},
thread::sleep,
time::Duration,
};
use uuid::Uuid;
use crate::custom_file::{
directory::{DirectoryEntity, DirectoryLink},
file_factory::FileFactory,
text_file::{TextFileEntity, TextFileLink},
traits::FileFactory as _,
};
fn create_entity() -> anyhow::Result<(
FileFactory,
Arc<RwLock<DirectoryEntity>>,
Arc<RwLock<TextFileEntity>>,
)> {
let ff = FileFactory::new(PathBuf::from("."))?;
let dir_entity = ff.create_file::<DirectoryEntity>(Uuid::new_v4(), ())?;
let txt_entity = ff.create_file::<TextFileEntity>(Uuid::new_v4(), "hoge".to_string())?;
Ok((ff, Arc::new(RwLock::new(dir_entity)), Arc::new(RwLock::new(txt_entity))))
}
fn create_symlink_of_entity() -> anyhow::Result<(FileFactory, DirectoryLink, TextFileLink)> {
let (ff, dir_entity, txt_entity) = create_entity()?;
let dir_symlink = ff.create_file::<DirectoryLink>(Uuid::new_v4(), dir_entity.clone())?;
let txt_symlink = ff.create_file::<TextFileLink>(Uuid::new_v4(), txt_entity.clone())?;
Ok((ff, dir_symlink, txt_symlink))
}
fn create_symlink_of_symlink() -> anyhow::Result<(FileFactory, DirectoryLink, TextFileLink)> {
let (ff, dir_symlink, txt_symlink) = create_symlink_of_entity()?;
let dir_symlink2 = ff.create_symlink_of(Uuid::new_v4(), &dir_symlink)?;
let txt_symlink2 = ff.create_symlink_of(Uuid::new_v4(), &txt_symlink)?;
Ok((ff, dir_symlink2, txt_symlink2))
}
#[test]
fn test_create_entity() -> anyhow::Result<()> {
// "." 以下に dir_entity, txt_entity が作られる.
// dir_entity, txt_entity が 5 秒後に消える.
let (_, dir_entity, txt_entity) = create_entity()?;
sleep(Duration::from_secs(5));
drop(dir_entity);
drop(txt_entity);
Ok(())
}
#[test]
fn test_create_symlink_of_entity() -> anyhow::Result<()> {
// "." 以下に dir_entity, txt_entity が作られる.
// "." 以下に dir_symlink, txt_symlink が作られる.
// dir_symlink, txt_symlink が 5 秒後に消える.
// dir_entity, txt_entity が 5 秒後に消える.
let (_, dir_symlink, txt_symlink) = create_symlink_of_entity()?;
sleep(Duration::from_secs(5));
drop(dir_symlink);
drop(txt_symlink);
Ok(())
}
#[test]
fn test_create_symlink_of_symlink() -> anyhow::Result<()> {
// "." 以下に dir_entity, txt_entity が作られる.
// "." 以下に dir_symlink, txt_symlink が作られる.
// "." 以下に dir_symlink2, txt_symlink2 が作られる.
// dir_symlink, txt_symlink が即消える.
// dir_symlink2, txt_symlink2 が 5 秒後に消える.
// dir_entity, txt_entity が 5 秒後に消える.
let (_, dir_symlink2, txt_symlink2) = create_symlink_of_symlink()?;
sleep(Duration::from_secs(5));
drop(dir_symlink2);
drop(txt_symlink2);
Ok(())
}
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM、言っていることが二転三転してごめん、ありがとう
関連Issue
概要
ファイルを管理する構造体を実装しました。下記のような使い方を想定しています。
FileFactory::new()
に基準となるパスを渡す。ファイル / ディレクトリ / ハードリンクはこのパス直下に作られる。FileFactory::create_file()
でファイル / ディレクトリを作成する。FileFactory::create_hardlink_of()
でファイルのハードリンクを作成する。チェックリスト
補足
use crate::custom_file::traits::FileFactory as _;
をする必要があります(struct
とtrait
の名前が被っているため)。