Commit | Line | Data |
4d2ad771 |
1 | package DX::Lib::FS::Action::CreateDirectory; |
2 | |
3 | use aliased 'DX::Lib::FS::Fact::PathStatus'; |
4 | use aliased 'DX::Lib::FS::Fact::PathStatusInfo'; |
5 | use Moo; |
6 | |
7 | with 'DX::Role::Action'; |
8 | |
9 | has path => (is => 'ro', required => 1); |
10 | |
640fa37e |
11 | has mode => (is => 'ro', predicate => 1); |
12 | |
4d2ad771 |
13 | sub 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 | |
24 | sub _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 | |
37 | 1; |