Ignore:
Timestamp:
02/19/19 19:43:08 (5 years ago)
Author:
nanardon
Message:

Add a begin command

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Cli.pm

    r2175 r2203  
    3232my $OUT = $term->OUT || \*STDOUT; 
    3333 
    34 my $trans_mode = 0; 
     34our $trans_mode = 0; 
     35my $trans_start = 0; 
    3536 
    3637=head1 FUNCTIONS 
     
    4647sub globalenv { 
    4748    my ($labase) = @_; 
    48     my $env = LATMOS::Accounts::Cli->new({ prompt => sub { $_[0]->base->label . " cli > " }, }, 
     49    my $env = LATMOS::Accounts::Cli->new({ prompt => sub { $_[0]->base->label . " cli" }, }, 
    4950        $labase); 
    5051    $env->add_func('unexported', { 
     
    251252        { 
    252253            prompt => sub { 
    253                 sprintf("%s %s/%s > ", 
     254                sprintf("%s %s/%s", 
    254255                    $_[0]->base->label, 
    255256                    $_[0]->{_otype}, 
     
    722723        ); 
    723724        $env->add_func( 
     725            'begin', { 
     726                help => 'Start transaction', 
     727                code => sub { 
     728                    $trans_start = 1; 
     729                }, 
     730            } 
     731        ); 
     732        $env->add_func( 
    724733            'commit', { 
    725734                help => 'commit pending change', 
     
    871880sub prompt { 
    872881    my ($self) = @_; 
    873     if (!$self->{prompt}) { 
    874         return "LA cli > "; 
    875     } else { 
    876         $self->{prompt}->($self); 
    877     } 
     882    my $pr = $self->{prompt} 
     883        ? $self->{prompt}->($self) 
     884        : "LA cli"; 
     885    return sprintf( 
     886        "%s%s%s ", 
     887        $pr, 
     888        $trans_start ? '-' : '=', 
     889        $trans_mode  ? '#' : '>', 
     890    ); 
    878891} 
    879892 
     
    896909 
    897910=cut 
    898  
    899 # TODO: hide this 
    900911 
    901912sub getoption { 
     
    906917 
    907918    return @ARGV; 
    908 } 
    909  
    910 # TODO: useless ? 
    911  
    912 sub _parse_arg { 
    913     my ($self, $name, @args) = @_; 
    914     return @args; 
    915919} 
    916920 
     
    929933        $self->complete($lastw, @{$self->{funcs}{$name}{alias}}, @args); 
    930934    } elsif ($self->{funcs}{$name}{completion}) { 
    931         my @pargs = $self->_parse_arg($name, @args); 
    932         return map { my $t = $_; $t =~ s/\s/\\ /g; $t } grep { $_ && /^\Q$lastw\E/ } $self->{funcs}{$name}{completion}->($self, $lastw, @pargs); 
     935        return map { my $t = $_; $t =~ s/\s/\\ /g; $t } grep { $_ && /^\Q$lastw\E/ } $self->{funcs}{$name}{completion}->($self, $lastw, @args); 
    933936    } else { 
    934937        return (); 
     
    950953        $self->run(@{$self->{funcs}{$name}{alias}}, @args); 
    951954    } elsif ($self->{funcs}{$name}{code}) { 
    952         my @pargs = $self->_parse_arg($name, @args); 
    953955        $self->{funcs}{$name}{code}->($self, @args); 
    954956    } else { 
     
    965967sub commit { 
    966968    my ($self) = @_; 
    967     if ($trans_mode) { 
     969    if ($trans_mode || $trans_start) { 
     970        $trans_start = 1; 
    968971    } else { 
    969972        $self->_commit; 
     
    974977    my ($self) = @_; 
    975978    $self->base->commit; 
     979    $trans_start = 0; 
    976980} 
    977981 
     
    987991        print $OUT "All pending changes get rollback\n"; 
    988992    } 
    989     $self->_rollback; 
     993    if (!$trans_start) { 
     994        $self->_rollback; 
     995    } 
    990996} 
    991997 
     
    993999    my ($self) = @_; 
    9941000    $self->base->rollback; 
     1001    $trans_start = 0; 
    9951002} 
    9961003 
Note: See TracChangeset for help on using the changeset viewer.