App-PS1

 view release on metacpan or  search on metacpan

lib/App/PS1/Plugin/Branch.pm  view on Meta::CPAN

    my ($len, $status) = status($type);
    return $self->surround(
        $len + length $type . $branch,
        $self->colour('branch_label') . $type
        . $self->colour('branch') . $branch
        . $status
    );
}

sub status {
    my ($type) = @_;
    return (0, '') if $type ne 'git ';

    my %status = (
        staged    => 0,
        unstaged  => 0,
        untracked => 0,
    );
    my @status = `git status --porcelain`;
    for my $status (@status) {
        my ($staged, $unstaged) = $status =~ /^(.)(.)/;
        $status{staged}++ if $staged ne '?' && $staged ne ' ';
        $status{unstaged}++ if $unstaged ne '?' && $unstaged ne ' ';
        $status{untracked}++ if $staged eq '?' && $unstaged eq '?';
    }

    my @chars = (' ', '①','②','③','④','⑤','⑥','⑦','⑧','⑨','⑩','⑪','⑫','⑬','⑭','⑮','⑯','⑰','⑱','⑲','⑳','㉑','㉒','㉓','㉔','㉕','㉖','㉗','㉘','㉙','㉚','㉛','㉜','㉝','㉞','㉟', '∞');
    my $str = '';
    $str .= ' ' . color('green') . ($chars[$status{staged}   ] || $chars[36]) if $status{staged};
    $str .= ' ' . color('red'  ) . ($chars[$status{unstaged} ] || $chars[36]) if $status{unstaged};
    $str .= ' ' . color('white') . ($chars[$status{untracked}] || $chars[36]) if $status{untracked};

    return (
        (! $status{staged}    ? 0 : $status{staged}    > 20 ? 3 : 2) +
        (! $status{unstaged}  ? 0 : $status{unstaged}  > 20 ? 3 : 2) +
        (! $status{untracked} ? 0 : $status{untracked} > 20 ? 3 : 2),
        $str
    );
}

sub git {
    for (split /:/, $ENV{PATH}) {
        return "$_/git" if -x "$_/git";
    }
    return 'git';
}

sub cvs {
    for (split /:/, $ENV{PATH}) {
        return "$_/cvs" if -x "$_/cvs";
    }
    return 'cvs';
}

1;

__END__

=head1 NAME

App::PS1::Plugin::Branch - Adds the current branch to prompt

=head1 VERSION

This documentation refers to App::PS1::Plugin::Branch version 0.08.

=head1 SYNOPSIS

   use App::PS1::Plugin::Branch;

   # Brief but working code example(s) here showing the most common usage(s)
   # This section will be as far as many users bother reading, so make it as
   # educational and exemplary as possible.


=head1 DESCRIPTION

=head1 SUBROUTINES/METHODS

=head3 C<branch ()>

If the current is under source code control returns the current branch etc

=head3 C<git ()>

Returns the full path for the git executable

=head3 C<cvs ()>

Returns the full path for the cvs executable

=head3 C<status ()>

Adds a status of the number of changes present for git repositories.

=head1 DIAGNOSTICS

=head1 CONFIGURATION AND ENVIRONMENT

=head1 DEPENDENCIES

=head1 INCOMPATIBILITIES

=head1 BUGS AND LIMITATIONS

There are no known bugs in this module.

Please report problems to Ivan Wills (ivan.wills@gmail.com).

Patches are welcome.

=head1 AUTHOR

Ivan Wills - (ivan.wills@gmail.com)

=head1 LICENSE AND COPYRIGHT

Copyright (c) 2011 Ivan Wills (14 Mullion Close, Hornsby Heights, NSW, Australia 2077)
All rights reserved.

This module is free software; you can redistribute it and/or modify it under



( run in 0.785 second using v1.01-cache-2.11-cpan-6aa56a78535 )