1 package DX::Lib::FS::Action::CreateFile;
3 use aliased 'DX::Lib::FS::Fact::PathStatus';
4 use aliased 'DX::Lib::FS::Fact::PathStatusInfo';
8 with 'DX::Role::Action';
10 has path => (is => 'ro', required => 1);
12 has mode => (is => 'ro', predicate => 1);
16 return +(path_status => PathStatus->new(
18 info => PathStatusInfo->new(
20 mode => ($self->has_mode ? $self->mode : '')
27 if ($self->has_mode) {
28 my $umask = umask(0000);
30 $self->path, POSIX::O_CREAT | POSIX::O_RDONLY, oct($self->mode)
31 ) or do { umask($umask); die "Couldn't create ${\$self->path}: $!" };
35 open my $fh, '>>', $self->path or die "Couldn't create ${\$self->path}: $!";
37 +(path_status => PathStatus->new(path => $self->path));