Git-Release
view release on metacpan or search on metacpan
lib/Git/Release/Branch.pm view on Meta::CPAN
return $self;
}
# options:
#
# ->delete( force => 1 , remote => 1 );
# ->delete( force => 1 , remote => ['origin','github'] );
# ->delete( force => 1 , remote => 'github' );
sub delete {
my ($self,%args) = @_;
if( $args{remote} ) {
if( ref($args{remote}) eq 'ARRAY' ) {
$self->manager->repo->command( 'push' , $_ , ':' . $self->name )
for @{ $args{remote} };
}
elsif( $args{remote} == 1 && $self->remote_name ) {
$self->manager->repo->command( 'push' , $self->remote_name , ':' . $self->name );
}
else {
$self->manager->repo->command( 'push' , ($args{remote}) , ':' . $self->name );
}
}
elsif( $args{local} || $self->is_local ) {
$self->manager->repo->command( 'branch' , $args{force} ? '-D' : '-d' , $self->ref );
}
elsif( $self->is_remote ) {
$self->manager->repo->command( 'push', $self->remote, ':' . $self->name );
}
$self->is_deleted(1);
return $self;
}
=head2 local_rename
Rename branch locally.
=cut
sub local_rename {
my ($self,$new_name,%args) = @_;
if( $self->is_local ) {
if( $args{force} ) {
$self->manager->repo->command( 'branch','-m',$self->name,$new_name);
} else {
$self->manager->repo->command( 'branch','-M',$self->name,$new_name);
}
$self->name($new_name);
$self->update_ref($new_name);
}
}
=head2 update_ref
update_ref by branch name
=cut
sub update_ref {
my ($self,$name) = @_;
if( $self->is_remote ) {
$self->ref( join '/','remotes',$self->remote,$name );
} elsif( $self->is_local ) {
$self->ref( $name );
}
}
sub rename {
my ($self,$new_name,%args) = @_;
if( $self->is_remote ) {
# if local branch is found, then checkout it
# if not found, then checkout remote tracking branch
my $local = $self->manager->branch->find_local_branches($self->name);
$local = $self->checkout unless $local;
$local->pull(
remote => $self->remote,
no_edit => 1,
fast_forward => 1
);
$local->delete( remote => 1 );
$local->local_rename( $new_name , %args );
$local->push( $self->remote );
$self->name($new_name);
$self->update_ref($new_name);
}
elsif( $self->is_local && $self->tracking_ref ) {
$self->delete( remote => 1 );
$self->local_rename( $new_name , %args );
$self->push( $self->remote_name ); # push to tracking remote
}
elsif( $self->is_local ) {
$self->local_rename($new_name,%args);
}
}
sub checkout {
my $self = shift;
if( $self->is_remote ) {
# find local branch to checkout if the branch exists
my $local = $self->manager->branch->find_local_branches($self->name);
if( $local ) {
$self->manager->repo->command( 'checkout' , $local->name );
return $local;
} else {
$self->manager->repo->command( 'checkout' , '-t' , $self->ref , '-b' , $self->name );
return $self->manager->branch->new_branch( ref => $self->name ); # local branch instance
}
}
elsif( $self->is_local && $self->tracking_ref ) {
my $local = $self->manager->branch->find_local_branches($self->name);
if( $local ) {
$self->manager->repo->command( 'checkout' , $local->name );
} else {
$self->manager->repo->command( 'checkout' , '-t' , $self->tracking_ref , '-b' , $self->name );
}
return $self;
}
( run in 0.990 second using v1.01-cache-2.11-cpan-98e64b0badf )