From 9774167d160a9e698211fa3dd7d4be93d7ba27f0 Mon Sep 17 00:00:00 2001 From: Dominik Meyer Date: Thu, 13 Sep 2018 21:14:50 +0200 Subject: [PATCH] FIX: check listing parameter --- lib/App/Git/IssueManager/List.pm | 83 ++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 26 deletions(-) diff --git a/lib/App/Git/IssueManager/List.pm b/lib/App/Git/IssueManager/List.pm index 7b9e916..608e3ee 100644 --- a/lib/App/Git/IssueManager/List.pm +++ b/lib/App/Git/IssueManager/List.pm @@ -7,55 +7,86 @@ extends qw(App::Git::IssueManager); use Git::LowLevel; use Git::IssueManager; use Git::IssueManager::Issue; - +use Text::ANSITable; use Term::ANSIColor; use Try::Tiny; - +use Data::Dumper; command_short_description 'list issues of a repository'; command_usage 'git issue list'; - -option 'use_color' => ( - is => 'ro', - isa => 'Bool', - required => 0, - documentation => q[use anso color to highlight critical issues], - cmd_aliases => [qw(color)], - default => 1 +option 'show_status' => ( + is => 'rw', + isa => 'ArrayRef[Str]', + required => 0, + documentation => q[select which issues with which stati should be displayd (open, assigned, inprogress, closed, all)], + cmd_aliases => [qw(s)], + default => sub {return ["open"];} ); sub run { my $self = shift; + my @stati=@{$self->show_status}; + + #remove all numbers from array + my @help; + for my $s (@stati) + { + push(@help,$s) unless $s =~/^\d+$/; + } + @stati=@help; + $self->show_status(\@help); + + my @all_stati=("open","closed","assigned","inprogress"); + + # check if a wrong status is requested + for my $s (@{$self->show_status}) + { + if(!grep( /^$s$/, @all_stati )) + { + die("ERROR: unkown status \"" . $s . "\"\n"); + } + } + + # check if all issues are requested + + if (grep( /^all$/, @stati ) ) + { + $self->show_status(['open','closed','inprogress','assigned']); + } + my $manager = Git::IssueManager->new(repository=>Git::LowLevel->new(git_dir=> ".")); if (!$manager->ready) { print("IssueManager not initialized yet. Please call \"init\" command to do so."); exit(-1); } - + binmode(STDOUT, ":utf8"); my @issues=$manager->list(); - print color('reset'); + my $t = Text::ANSITable->new; + $t->use_utf8(1); + $t->use_color(1); + $t->use_box_chars(1); + $t->border_style('Default::single_boxchar'); + $t->columns(["ID", "Subject", "Type", "Priority", "Severity", "Status", "Author", "Worker"]); + @stati=@{$self->show_status}; for my $i (@issues) { - if ($self->use_color && ($i->priority eq "high" || $i->priority eq "urgent" || $i->severity eq "hight" || $i->severity eq "critical")) - { - print color('bold red'); + my $status=$i->status; + if ( grep( /^$status$/, @stati ) ) { + if ( $i->priority eq "high" || $i->priority eq "urgent" || ($i->severity eq "high") || ($i->severity eq "critical") ) + { + $t->add_row([$i->id,$i->subject,$i->type, $i->priority,$i->severity,$i->status,$i->author,$i->worker],{bgcolor=>'c60505'}); + } + else + { + $t->add_row([$i->id,$i->subject,$i->type, $i->priority,$i->severity,$i->status,$i->author,$i->worker]); + } } - elsif ($self->use_color && ($i->priority eq "medium" || $i->severity eq "medium")) - { - print color('bold yellow'); - } - else - { - print color('reset'); - } - printf("%20s\t%15s\t%30s\t%10s\t%10s\t%20s\t%20s\n", $i->id, $i->type, $i->subject, $i->priority, $i->severity, - $i->author,$i->creation_date->ymd() . " " . $i->creation_date->hms()); } - print color('reset'); + print $t->draw; } 1;