On Tue, 3 Jul 2012 09:47:00 -0400
Phil Pinkerton <pcpinker...@gmail.com> wrote:

> I was given a project that seems to require Perl
> 
> I could use a sample just to extract a list of names associated with
> a group or repo and print them.
> 
> 1) Assigned a task to extract data fron a text file.
> 2) Output file needs to be very specific, and created monthly
> 3) tried doing in korn shell too complex
> 4) Figured Perl my best option, but don't know Perl
> 5) Got  the Modern Perl in PDF format
> 6) Installed Strawberry Perl
> 
> Output format is simple ??, but extracting the data and printing it
> I haven't a clue where to start. ( I am not trying to get someone to
> write this for me, just a simple extract and print example and point
> me in the right direction )

First pointer - a lot of things you want to do in Perl will be a lot
easier if you consult CPAN to see if someone has done this before and
shared reusable code which will make your life easier.

In this case, you've not described what the input data is, but to me it
looks very much like a Subversion access control file.  So, with that
in mind, I searched CPAN, and found SVN::Access:

https://metacpan.org/module/SVN::Access

Ahah - looks like it takes all the hard work out of things for you -
it'll take care of the parsing, and let you just get at the data.

So, glancing at its docs and whipping something up:

[code]
#!/usr/bin/perl

use strict;
use SVN::Access;
my $acl = SVN::Access->new( acl_file => 'data' );

# Walk through the resources in the ACL file:
for my $repopath ($acl->resources) {
    # For this resource, find out what authorisations exist:
    for my $auth ($repopath->authorized) {

        # $repopath->authorized gives us hashrefs of group => perms
        # TODO: I don't know if it might also give individual users, if
        # had per-user grants.
        my ($group, $perms) = each %$auth;
        
        if ($group =~ s/^@//) {
            # For each group, list out the members, along with the repo
            # permissions

            for my $user ($acl->group($group)->members) {
                say join '~', $user, $repopath->name, $group, $perms;
            }
        } else {
            die "Can't handle individual user permissions!";
        }
    }
}
[/code]

If you install SVN::Access, the above should work for you, and should
produce mostly what you need, e.g.:

ritched2~repo1:/~repo1_devs~r
appalas~repo1:/~repo1_devs~r

Handing the _admn groups as a special case is left as an exercise to
you, but should be reasonably easy given the above as a starting point.



-- 
David Precious ("bigpresh") <dav...@preshweb.co.uk>
http://www.preshweb.co.uk/     www.preshweb.co.uk/twitter
www.preshweb.co.uk/linkedin    www.preshweb.co.uk/facebook
www.preshweb.co.uk/cpan        www.preshweb.co.uk/github


-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to