Beagle
view release on metacpan or search on metacpan
lib/Beagle/Cmd/Command/mark.pm view on Meta::CPAN
$in = decode( 'utf8', read_file($path) );
}
else {
local $/;
$in = decode( 'utf8' => <STDIN> );
}
my $converted = JSON::from_json($in);
my $marks = {};
for my $id ( keys %$converted ) {
if ( defined $converted->{$id} ) {
if ( ref $converted->{$id} ) {
if ( ref $converted->{$id} eq 'ARRAY' ) {
next unless @{ $converted->{$id} };
$marks->{$id} =
{ map { $_ => 1 } @{ $converted->{$id} } };
}
elsif ( ref $converted->{$id} eq 'HASH' ) {
next unless %{ $converted->{$id} };
$marks->{$id} =
{ map { $_ => 1 } keys %{ $converted->{$id} } };
}
}
else {
$marks->{$id} = { $converted->{$id} => 1 };
}
}
}
set_marks($marks);
puts 'imported.';
return;
}
}
elsif ( $self->prune ) {
my $relation = relation();
my $pruned;
for my $id ( keys %$marks ) {
next if $relation->{$id};
delete $marks->{$id};
$pruned = 1;
}
if ( $pruned ) {
puts 'pruned.';
}
else {
puts 'no orphans found.';
}
return;
}
else {
my @ids;
$args = $self->resolve_ids( $args );
for my $i (@$args) {
if ( length $i == 32 ) {
push @ids, $i;
}
else {
my @ret = resolve_entry( $i, handle => current_handle() || undef );
unless (@ret) {
@ret = resolve_entry($i) or die_entry_not_found($i);
}
die_entry_ambiguous( $i, @ret ) unless @ret == 1;
push @ids, $ret[0]->{id};
}
}
if ( $self->add || $self->delete || $self->set || $self->unset ) {
for my $id (@ids) {
if ( $self->delete ) {
for my $mark ( @{ $self->delete } ) {
last unless $marks->{$id};
if ( exists $marks->{$id}{$mark} ) {
delete $marks->{$id}{$mark};
}
delete $marks->{$id} unless %{ $marks->{$id} };
}
}
if ( $self->unset ) {
if ( $marks->{$id} ) {
delete $marks->{$id};
}
}
if ( $self->set ) {
$marks->{$id} = {};
for my $mark ( @{ $self->set } ) {
$marks->{$id}{$mark} = 1;
}
}
if ( $self->add ) {
for my $mark ( @{ $self->add } ) {
if ( !$marks->{$id}{$mark} ) {
$marks->{$id}{$mark} = 1;
}
}
}
}
if (@ids) {
set_marks($marks);
puts 'updated.';
}
}
else {
@ids = keys %$marks unless @ids;
for my $id (@ids) {
puts "$id ",
$marks->{$id}
? ( join ', ', sort keys %{ $marks->{$id} } )
: '<not exist>';
}
}
}
( run in 0.787 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )