create directory and create file, now with mode setting
[scpubgit/DKit.git] / lib / DX / Lib / FS / Action / CreateDirectory.pm
CommitLineData
4d2ad771 1package DX::Lib::FS::Action::CreateDirectory;
2
3use aliased 'DX::Lib::FS::Fact::PathStatus';
4use aliased 'DX::Lib::FS::Fact::PathStatusInfo';
5use Moo;
6
7with 'DX::Role::Action';
8
9has path => (is => 'ro', required => 1);
10
640fa37e 11has mode => (is => 'ro', predicate => 1);
12
4d2ad771 13sub expected_effect {
14 my ($self) = @_;
15 return +(path_status => PathStatus->new(
16 path => $self->path,
640fa37e 17 info => PathStatusInfo->new(
18 is_directory => 1,
19 mode => ($self->has_mode ? $self->mode : '')
20 )
4d2ad771 21 ));
22}
23
24sub _do_run {
25 my ($self) = @_;
640fa37e 26 if ($self->has_mode) {
27 my $umask = umask(0000);
28 mkdir($self->path, oct($self->mode))
29 or do { umask($umask); die "Couldn't mkdir ${\$self->path}: $!" };
30 umask($umask);
31 } else {
32 mkdir($self->path) or die "Couldn't mkdir ${\$self->path}: $!";
33 }
4d2ad771 34 +(path_status => PathStatus->new(path => $self->path));
35}
36
371;