package SVK::Command::Mkdir; use strict; use SVK::Version; our $VERSION = $SVK::VERSION; use base qw( SVK::Command::Commit ); use SVK::XD; use SVK::I18N; use SVK::Util qw( abs2rel get_anchor ); sub options { ($_[0]->SUPER::options, 'p|parent' => 'parent'); } sub parse_arg { my ($self, @arg) = @_; # XXX: support multiple #return if $#arg != 0; my @paths; my @targets; my $parent = $self->{parent}; for my $path (@arg) { my ($addtargets, $addpaths) = $self->create($path); push @paths, @$addpaths; push @targets, @$addtargets; $self->{parent} = $parent; } if (scalar @paths) { return $self->rebless ( add => { recursive => 1 } )->parse_arg (@paths); } return @targets; } sub create { my $self = shift; my $path = shift; my @paths; my @targets; # parsing all of the folder we need to add. until (@targets = eval { ($self->arg_co_maybe ($path)) }) { my ($parent, $target) = get_anchor(1, $path); unless ($parent and $self->{parent}) { # non a copath or something wrong # XXX: better check for error types # should tell the user about parent not exist return ($self->arg_depotpath($path)); } my ($subtargets, $subpaths) = $self->create($parent); push @paths, @$subpaths; push @targets, @$subtargets; undef $self->{parent}; } # execute the mkdir if ($@ || grep {$_->{copath}} @targets) { my $target = $self->arg_condensed ($path); foreach (@{$target->{targets}}) { my $copath = $target->copath ($_); mkdir ($copath) or die "$copath: $!"; } push @paths, $path; } return (\@targets, \@paths); } sub run { my ($self, $target) = @_; $self->get_commit_message (); my ($anchor, $editor) = $self->get_dynamic_editor ($target); $editor->close_directory ($editor->add_directory (abs2rel ($target->path, $anchor => undef, '/'), 0, undef, -1)); $self->adjust_anchor ($editor); $self->finalize_dynamic_editor ($editor); return; } 1; __DATA__ =head1 NAME SVK::Command::Mkdir - Create a versioned directory =head1 SYNOPSIS mkdir DEPOTPATH mkdir PATH =head1 OPTIONS -m [--message] MESSAGE : specify commit message MESSAGE -F [--file] FILENAME : read commit message from FILENAME -p [--parent] : create intermediate directories as required -C [--check-only] : try operation but make no changes -P [--patch] NAME : instead of commit, save this change as a patch -S [--sign] : sign this change =head1 AUTHORS Chia-liang Kao E<lt>clkao@clkao.orgE<gt> =head1 COPYRIGHT Copyright 2003-2005 by Chia-liang Kao E<lt>clkao@clkao.orgE<gt>. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L<http://www.perl.com/perl/misc/Artistic.html> =cut