Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Make $*USER and $*GROUP on-demand
  • Loading branch information
lizmat committed Jun 5, 2014
1 parent 65f5f2c commit 28d6725
Showing 1 changed file with 38 additions and 23 deletions.
61 changes: 38 additions & 23 deletions src/core/Process.pm
Expand Up @@ -24,39 +24,54 @@
PROCESS::<$TMPDIR> = IO::Spec.tmpdir().path;

class IdName {
has Int $.id;
has Str $.name;
has Int $!id;
has Str $!name;

submethod BUILD (:$!id, :$!name) { }

method Numeric { $!id }
method Str { $!name }
method gist { "$!name ($!id)" }
}
}

class IdFetch {
has Str $!name;

# probably needs some nqp::op, LHF for someone?
if !$*DISTRO.is-win && try { qx/id/ } -> $id {
if $id ~~ m/^
[ uid "=" $<uid>=(\d+) ]
[ "(" $<user>=(<-[ ) ]>+) ")" ]
\s+
[ gid "=" $<gid>=(\d+) ]
[ "(" $<group>=(<-[ ) ]>+) ")" ]
/ {
PROCESS::<$USER> := IdName.new( :id(+$<uid>), :name(~$<user>) );
PROCESS::<$GROUP> := IdName.new( :id(+$<gid>), :name(~$<group>) );
submethod BUILD (:$!name) { PROCESS::{$!name} := self }

sub fetch {
once if !$*DISTRO.is-win && try { qx/id/ } -> $id {
if $id ~~ m/^
[ uid "=" $<uid>=(\d+) ]
[ "(" $<user>=(<-[ ) ]>+) ")" ]
\s+
[ gid "=" $<gid>=(\d+) ]
[ "(" $<group>=(<-[ ) ]>+) ")" ]
/ {
PROCESS::<$USER> :=
IdName.new( :id(+$<uid>), :name(~$<user>) );
PROCESS::<$GROUP> :=
IdName.new( :id(+$<gid>), :name(~$<group>) );
}

# alas, no support yet
else {
PROCESS::<$USER> := Nil;
PROCESS::<$GROUP> := Nil;
}
}
}

# alas, no support yet
else {
PROCESS::<$USER> := Nil;
PROCESS::<$GROUP> := Nil;
method Numeric { return Nil unless fetch(); +PROCESS::{$!name} }
method Str { return Nil unless fetch(); ~PROCESS::{$!name} }
method gist {
return Nil unless fetch();
PROCESS::{$!name} ~ ' (' ~ +PROCESS::{$!name} ~ ')';
}
}

# alas, no support yet
else {
PROCESS::<$USER> := Nil;
PROCESS::<$GROUP> := Nil;
}
IdFetch.new( :name<$USER> );
IdFetch.new( :name<$GROUP> );
}

# vim: ft=perl6 expandtab sw=4

0 comments on commit 28d6725

Please sign in to comment.