App-GitGot
view release on metacpan or search on metacpan
lib/App/GitGot/Command.pm view on Meta::CPAN
sub _build_outputter {
my $self = shift;
my $scheme = $self->color_scheme;
if ( $scheme =~ /^\+/ ) {
$scheme =~ s/^\+//;
}
else {
$scheme = "App::GitGot::Outputter::$scheme"
}
try {
eval "use $scheme";
die $@ if $@;
}
catch {
say "Failed to load color scheme '$scheme'.\nExitting now.\n";
exit(5);
};
return $scheme->new({ no_color => $self->no_color });
}
sub execute {
my( $self , $opt , $args ) = @_;
$self->_set_args( $args );
$self->_set_opt( $opt );
# set up colored output if we page thru less
# also exit pager immediately if <1 page of output
$ENV{LESS} = 'RFX';
# don't catch any errors here; if this fails we just output stuff like
# normal and nobody is the wiser.
eval 'use IO::Page' if $self->_use_io_page;
$self->_execute($opt,$args);
}
sub local_repo {
my $self = shift;
my $dir = $self->_find_repo_root( getcwd() );
return first { $_->path eq $dir->absolute } $self->all_repos;
}
sub max_length_of_an_active_repo_label {
my( $self ) = @_;
my $sort_key = $self->by_path ? 'path' : 'name';
return max ( map { length $_->$sort_key } $self->active_repos);
}
sub prompt_yn {
my( $self , $message ) = @_;
printf '%s [y/N]: ' , $message;
chomp( my $response = <STDIN> );
return lc($response) eq 'y';
}
sub search_repos {
my $self = shift;
return App::GitGot::Repositories->new(
repos => [ $self->all_repos ]
);
}
sub write_config {
my ($self) = @_;
DumpFile(
$self->configfile,
[
sort { $a->{name} cmp $b->{name} }
map { $_->in_writable_format } $self->all_repos
] ,
);
}
sub _expand_arg_list {
my $args = shift;
## no critic
return [
map {
s!/$!!;
if (/^(\d+)-(\d+)?$/) { ( $1 .. $2 ) }
else { ($_) }
} @$args
];
## use critic
}
sub _fetch {
my( $self , @repos ) = @_;
my $max_len = $self->max_length_of_an_active_repo_label;
REPO: for my $repo ( @repos ) {
next REPO unless $repo->repo;
my $name = $repo->name;
my $msg = sprintf "%3d) %-${max_len}s : ", $repo->number, $repo->label;
my ( $status, $fxn );
my $repo_type = $repo->type;
lib/App/GitGot/Command.pm view on Meta::CPAN
sub _update {
my( $self , @repos ) = @_;
my $max_len = $self->max_length_of_an_active_repo_label;
REPO: for my $repo ( @repos ) {
next REPO unless $repo->repo;
my $name = $repo->name;
my $msg = sprintf "%3d) %-${max_len}s : ", $repo->number, $repo->label;
my ( $status, $fxn );
my $repo_type = $repo->type;
if ( $repo_type eq 'git' ) { $fxn = '_git_update' }
### FIXME elsif( $repo_type eq 'svn' ) { $fxn = 'svn_update' }
else { $status = $self->error("ERROR: repo type '$_' not supported") }
$status = $self->$fxn($repo) if ($fxn);
next REPO if $self->quiet and !$status;
say "$msg$status";
}
}
# override this in commands that shouldn't use IO::Page -- i.e., ones that
# need to do incremental output
sub _use_io_page { 1 }
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
App::GitGot::Command - Base class for App::GitGot commands
=head1 VERSION
version 1.339
=head1 METHODS
=head2 local_repo
Checks to see if $CWD is inside a Git repo managed by Got, and returns the
corresponding L<App::GitGot::Repo> object if it is.
=head2 max_length_of_an_active_repo_label
Returns the length of the longest name in the active repo list.
=head2 prompt_yn
Takes a message argument and uses it to prompt for a yes/no response.
Response defaults to 'no'.
=head2 search_repos
Returns a L<App::GitGot::Repositories> object containing all repos managed by
Got.
=head2 write_config
Dumps configuration out to disk.
=for Pod::Coverage args opt options
=head1 AUTHOR
John SJ Anderson <john@genehack.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2020 by John SJ Anderson.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
( run in 1.345 second using v1.01-cache-2.11-cpan-6aa56a78535 )