Commit 27c45f66 authored by Alex Vandiver's avatar Alex Vandiver
Browse files

Version 0.03 releng

parent e9733525
Revision history for RT-Extension-LDAPImport-MuliEmail
Revision history for RT-Extension-LDAPImport-MultiEmail
0.02 - 2014-01-27
Initial release
0.03 2014-07-16
- Support more than one secondary email address attribute
- Packaging updates
0.02 2014-01-27
- Initial release
......@@ -3,16 +3,21 @@ inc/Module/Install.pm
inc/Module/Install/Base.pm
inc/Module/Install/Can.pm
inc/Module/Install/Fetch.pm
inc/Module/Install/Include.pm
inc/Module/Install/Makefile.pm
inc/Module/Install/Metadata.pm
inc/Module/Install/ReadmeFromPod.pm
inc/Module/Install/RTx.pm
inc/Module/Install/RTx/Runtime.pm
inc/Module/Install/Substitute.pm
inc/Module/Install/Win32.pm
inc/Module/Install/WriteAll.pm
inc/unicore/Name.pm
inc/YAML/Tiny.pm
lib/RT/Extension/LDAPImport/MultiEmail.pm
Makefile.PL
MANIFEST This list of files
MANIFEST.SKIP
META.yml
README
t/user-import.t.in
......@@ -58,4 +58,4 @@
#!end included /home/chmrr/prog/perlbrew/perls/perl-5.16.0/lib/5.16.0/ExtUtils/MANIFEST.SKIP
t/tmp
t/user-import.t
t/user-import.t$
---
abstract: 'RT Extension-LDAPImport-MultiEmail Extension'
abstract: 'RT-Extension-LDAPImport-MultiEmail Extension'
author:
- 'Alex Vandiver <alexmv@bestpractical.com>'
- 'Best Practical Solutions, LLC <modules@bestpractical.com>'
build_requires:
ExtUtils::MakeMaker: 6.36
ExtUtils::MakeMaker: 6.59
configure_requires:
ExtUtils::MakeMaker: 6.36
ExtUtils::MakeMaker: 6.59
distribution_type: module
dynamic_config: 1
generated_by: 'Module::Install version 1.06'
license: gplv2
generated_by: 'Module::Install version 1.08'
license: gpl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: 1.4
......@@ -21,6 +21,11 @@ no_index:
requires:
RT::Extension::LDAPImport: 0
RT::Extension::MergeUsers: 0
perl: 5.8.3
resources:
license: http://opensource.org/licenses/gpl-license.php
version: 0.02
version: '0.03'
x_module_install_rtx_version: 0.34_04
x_requires_rt: 4.0.0
x_requires_rt_plugins:
- RT::Extension::MergeUsers
use inc::Module::Install;
RTx 'RT-Extension-LDAPImport-MultiEmail';
all_from 'lib/RT/Extension/LDAPImport/MultiEmail.pm';
readme_from 'lib/RT/Extension/LDAPImport/MultiEmail.pm';
license 'gplv2';
requires_rt("4.0.0");
requires "RT::Extension::LDAPImport";
requires "RT::Extension::MergeUsers";
requires_rt_plugin "RT::Extension::LDAPImport";
requires_rt_plugin "RT::Extension::MergeUsers";
require File::Basename;
substitute(
......
......@@ -9,11 +9,15 @@ INSTALLATION
May need root permissions
Edit your /opt/rt4/etc/RT_SiteConfig.pm
Add this line:
If you are using RT 4.2 or greater, add this line:
Plugin('RT::Extension::LDAPImport::MultiEmail');
For RT 4.0, add this line:
Set(@Plugins, qw(RT::Extension::LDAPImport::MultiEmail));
or add "RT::Extension::LDAPImport::MultiEmail" to your existing
or add RT::Extension::LDAPImport::MultiEmail to your existing
@Plugins line.
You will also need to specify which attribute contains "alternate"
......@@ -21,11 +25,26 @@ INSTALLATION
Set( $LDAPMultiEmail, 'alternateEmail' );
Multiple alternate email address attributes can be specified using
an array reference:
Set( $LDAPMultiEmail, ['alternateEmail', 'homeEmail'] );
AUTHOR
Alex Vandiver <alexmv@bestpractical.com>
Best Practical Solutions, LLC <modules@bestpractical.com>
BUGS
All bugs should be reported via email to
L<bug-RT-Extension-LDAPImport-MultiEmail@rt.cpan.org|mailto:bug-RT-Extension-LDAPImport-MultiEmail@rt.cpan.org>
or via the web at
L<rt.cpan.org|http://rt.cpan.org/Public/Dist/Display.html?Name=RT-Extension-LDAPImport-MultiEmail>.
LICENSE AND COPYRIGHT
This software is Copyright (c) 2013 by Best Practical Solutions
COPYRIGHT
This extension is Copyright (C) 20013-2014 Best Practical Solutions,
LLC.
This is free software, licensed under:
......
......@@ -31,7 +31,7 @@ BEGIN {
# This is not enforced yet, but will be some time in the next few
# releases once we can make sure it won't clash with custom
# Module::Install extensions.
$VERSION = '1.06';
$VERSION = '1.08';
# Storage for the pseudo-singleton
$MAIN = undef;
......
......@@ -4,7 +4,7 @@ package Module::Install::Base;
use strict 'vars';
use vars qw{$VERSION};
BEGIN {
$VERSION = '1.06';
$VERSION = '1.08';
}
# Suspend handler for "redefined" warnings
......
......@@ -8,7 +8,7 @@ use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.06';
$VERSION = '1.08';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
......
......@@ -6,7 +6,7 @@ use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.06';
$VERSION = '1.08';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
......
#line 1
package Module::Install::Include;
use strict;
use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.08';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
sub include {
shift()->admin->include(@_);
}
sub include_deps {
shift()->admin->include_deps(@_);
}
sub auto_include {
shift()->admin->auto_include(@_);
}
sub auto_include_deps {
shift()->admin->auto_include_deps(@_);
}
sub auto_include_dependent_dists {
shift()->admin->auto_include_dependent_dists(@_);
}
1;
......@@ -8,7 +8,7 @@ use Fcntl qw/:flock :seek/;
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.06';
$VERSION = '1.08';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
......
......@@ -6,7 +6,7 @@ use Module::Install::Base ();
use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.06';
$VERSION = '1.08';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
......
......@@ -8,7 +8,7 @@ no warnings 'once';
use Module::Install::Base;
use base 'Module::Install::Base';
our $VERSION = '0.32';
our $VERSION = '0.34_04';
use FindBin;
use File::Glob ();
......@@ -20,93 +20,69 @@ my @INDEX_DIRS = qw(lib bin sbin);
sub RTx {
my ( $self, $name ) = @_;
my $original_name = $name;
my $RTx = 'RTx';
$RTx = $1 if $name =~ s/^(\w+)-//;
# Set up names
my $fname = $name;
$fname =~ s!-!/!g;
$self->name("$RTx-$name")
$self->name( $name )
unless $self->name;
$self->all_from( -e "$name.pm" ? "$name.pm" : "lib/$RTx/$fname.pm" )
$self->all_from( "lib/$fname.pm" )
unless $self->version;
$self->abstract("RT $name Extension")
$self->abstract("$name Extension")
unless $self->abstract;
my @prefixes = (qw(/opt /usr/local /home /usr /sw ));
my $prefix = $ENV{PREFIX};
@ARGV = grep { /PREFIX=(.*)/ ? ( ( $prefix = $1 ), 0 ) : 1 } @ARGV;
if ($prefix) {
$RT::LocalPath = $prefix;
$INC{'RT.pm'} = "$RT::LocalPath/lib/RT.pm";
} else {
local @INC = (
$ENV{RTHOME} ? ( $ENV{RTHOME}, "$ENV{RTHOME}/lib" ) : (),
@INC,
map { ( "$_/rt4/lib", "$_/lib/rt4", "$_/rt3/lib", "$_/lib/rt3", "$_/lib" )
} grep $_, @prefixes
);
until ( eval { require RT; $RT::LocalPath } ) {
warn
"Cannot find the location of RT.pm that defines \$RT::LocalPath in: @INC\n";
$_ = $self->prompt("Path to directory containing your RT.pm:") or exit;
$_ =~ s/\/RT\.pm$//;
push @INC, $_, "$_/rt3/lib", "$_/lib/rt3", "$_/lib";
}
$self->readme_from( "lib/$fname.pm",
{ options => [ quotes => "none" ] } );
$self->add_metadata("x_module_install_rtx_version", $VERSION );
# Try to find RT.pm
my @prefixes = qw( /opt /usr/local /home /usr /sw );
my @try = $ENV{RTHOME} ? ($ENV{RTHOME}, "$ENV{RTHOME}/lib") : ();
while (1) {
my @look = @INC;
unshift @look, grep {defined and -d $_} @try;
push @look, grep {defined and -d $_}
map { ( "$_/rt4/lib", "$_/lib/rt4", "$_/lib" ) } @prefixes;
last if eval {local @INC = @look; require RT; $RT::LocalLibPath};
warn
"Cannot find the location of RT.pm that defines \$RT::LocalPath in: @look\n";
$_ = $self->prompt("Path to directory containing your RT.pm:") or exit;
$_ =~ s{(/lib)?/RT\.pm$}{};
@try = ("$_/rt4/lib", "$_/lib/rt4", "$_/lib");
}
my $lib_path = File::Basename::dirname( $INC{'RT.pm'} );
my $local_lib_path = "$RT::LocalPath/lib";
print "Using RT configuration from $INC{'RT.pm'}:\n";
unshift @INC, "$RT::LocalPath/lib" if $RT::LocalPath;
my $local_lib_path = $RT::LocalLibPath;
unshift @INC, $local_lib_path;
my $lib_path = File::Basename::dirname( $INC{'RT.pm'} );
unshift @INC, $lib_path;
$RT::LocalVarPath ||= $RT::VarPath;
$RT::LocalPoPath ||= $RT::LocalLexiconPath;
$RT::LocalHtmlPath ||= $RT::MasonComponentRoot;
$RT::LocalStaticPath ||= $RT::StaticPath;
$RT::LocalLibPath ||= "$RT::LocalPath/lib";
my $with_subdirs = $ENV{WITH_SUBDIRS};
@ARGV = grep { /WITH_SUBDIRS=(.*)/ ? ( ( $with_subdirs = $1 ), 0 ) : 1 }
@ARGV;
my %subdirs;
%subdirs = map { $_ => 1 } split( /\s*,\s*/, $with_subdirs )
if defined $with_subdirs;
unless ( keys %subdirs ) {
$subdirs{$_} = 1 foreach grep -d "$FindBin::Bin/$_", @DIRS;
}
# Set a baseline minimum version
$self->requires_rt('4.0.0');
# If we're running on RT 3.8 with plugin support, we really wany
# to install libs, mason templates and po files into plugin specific
# directories
# Installation locations
my %path;
if ( $RT::LocalPluginPath ) {
die "Because of bugs in RT 3.8.0 this extension can not be installed.\n"
."Upgrade to RT 3.8.1 or newer.\n" if $RT::VERSION =~ /^3\.8\.0/;
$path{$_} = $RT::LocalPluginPath . "/$original_name/$_"
foreach @DIRS;
} else {
foreach ( @DIRS ) {
no strict 'refs';
my $varname = "RT::Local" . ucfirst($_) . "Path";
$path{$_} = ${$varname} || "$RT::LocalPath/$_";
}
$path{$_} = $RT::LocalPluginPath . "/$name/$_"
foreach @DIRS;
$path{$_} .= "/$name" for grep $path{$_}, qw(etc po var);
}
# Copy RT 4.2.0 static files into NoAuth; insufficient for
# images, but good enough for css and js.
$path{static} = "$path{html}/NoAuth/"
unless $RT::StaticPath;
# Delete the ones we don't need
delete $path{$_} for grep {not -d "$FindBin::Bin/$_"} keys %path;
my %index = map { $_ => 1 } @INDEX_DIRS;
$self->no_index( directory => $_ ) foreach grep !$index{$_}, @DIRS;
my $args = join ', ', map "q($_)", map { ($_, $path{$_}) }
grep $subdirs{$_}, keys %path;
sort keys %path;
print "./$_\t=> $path{$_}\n" for sort keys %subdirs;
printf "%-10s => %s\n", $_, $path{$_} for sort keys %path;
if ( my @dirs = map { ( -D => $_ ) } grep $subdirs{$_}, qw(bin html sbin) ) {
if ( my @dirs = map { ( -D => $_ ) } grep $path{$_}, qw(bin html sbin etc) ) {
my @po = map { ( -o => $_ ) }
grep -f,
File::Glob::bsd_glob("po/*.po");
......@@ -116,12 +92,15 @@ lexicons ::
.
}
$self->include('Module::Install::RTx::Runtime') if $self->admin;
$self->include_deps( 'YAML::Tiny', 0 ) if $self->admin;
my $postamble = << ".";
install ::
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Iinc -MModule::Install::RTx::Runtime -e"RTxPlugin()"
\t\$(NOECHO) \$(PERL) -MExtUtils::Install -e \"install({$args})\"
.
if ( $subdirs{var} and -d $RT::MasonDataDir ) {
if ( $path{var} and -d $RT::MasonDataDir ) {
my ( $uid, $gid ) = ( stat($RT::MasonDataDir) )[ 4, 5 ];
$postamble .= << ".";
\t\$(NOECHO) chown -R $uid:$gid $path{var}
......@@ -136,14 +115,16 @@ install ::
$has_etc{acl}++;
}
if ( -e 'etc/initialdata' ) { $has_etc{initialdata}++; }
if ( -d 'etc/upgrade/' ) { $has_etc{upgrade}++; }
if ( grep { /\d+\.\d+\.\d+.*$/ } glob('etc/upgrade/*.*.*') ) {
$has_etc{upgrade}++;
}
$self->postamble("$postamble\n");
unless ( $subdirs{'lib'} ) {
$self->makemaker_args( PM => { "" => "" }, );
} else {
if ( $path{lib} ) {
$self->makemaker_args( INSTALLSITELIB => $path{'lib'} );
$self->makemaker_args( INSTALLARCHLIB => $path{'lib'} );
} else {
$self->makemaker_args( PM => { "" => "" }, );
}
$self->makemaker_args( INSTALLSITEMAN1DIR => "$RT::LocalPath/man/man1" );
......@@ -151,69 +132,122 @@ install ::
$self->makemaker_args( INSTALLSITEARCH => "$RT::LocalPath/man" );
if (%has_etc) {
$self->load('RTxInitDB');
print "For first-time installation, type 'make initdb'.\n";
my $initdb = '';
$initdb .= <<"." if $has_etc{schema};
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(schema \$(NAME) \$(VERSION)))"
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Iinc -MModule::Install::RTx::Runtime -e"RTxDatabase(qw(schema \$(NAME) \$(VERSION)))"
.
$initdb .= <<"." if $has_etc{acl};
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(acl \$(NAME) \$(VERSION)))"
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Iinc -MModule::Install::RTx::Runtime -e"RTxDatabase(qw(acl \$(NAME) \$(VERSION)))"
.
$initdb .= <<"." if $has_etc{initialdata};
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(insert \$(NAME) \$(VERSION)))"
\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Iinc -MModule::Install::RTx::Runtime -e"RTxDatabase(qw(insert \$(NAME) \$(VERSION)))"
.
$self->postamble("initdb ::\n$initdb\n");
$self->postamble("initialize-database ::\n$initdb\n");
if ($has_etc{upgrade}) {
print "To upgrade from a previous version of this extension, use 'make upgrade-database'\n";
my $upgradedb = qq|\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Minc::Module::Install -e"RTxInitDB(qw(upgrade \$(NAME) \$(VERSION)))"\n|;
my $upgradedb = qq|\t\$(NOECHO) \$(PERL) -Ilib -I"$local_lib_path" -I"$lib_path" -Iinc -MModule::Install::RTx::Runtime -e"RTxDatabase(qw(upgrade \$(NAME) \$(VERSION)))"\n|;
$self->postamble("upgrade-database ::\n$upgradedb\n");
$self->postamble("upgradedb ::\n$upgradedb\n");
}
}
}
# stolen from RT::Handle so we work on 3.6 (cmp_versions came in with 3.8)
{ my %word = (
a => -4,
alpha => -4,
b => -3,
beta => -3,
pre => -2,
rc => -1,
head => 9999,
);
sub cmp_version($$) {
my ($a, $b) = (@_);
my @a = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef }
split /([^0-9]+)/, $a;
my @b = grep defined, map { /^[0-9]+$/? $_ : /^[a-zA-Z]+$/? $word{$_}|| -10 : undef }
split /([^0-9]+)/, $b;
@a > @b
? push @b, (0) x (@a-@b)
: push @a, (0) x (@b-@a);
for ( my $i = 0; $i < @a; $i++ ) {
return $a[$i] <=> $b[$i] if $a[$i] <=> $b[$i];
}
return 0;
}}
sub requires_rt {
my ($self,$version) = @_;
_load_rt_handle();
if ($self->is_admin) {
$self->add_metadata("x_requires_rt", $version);
my @sorted = sort RT::Handle::cmp_version $version,'4.0.0';
$self->perl_version('5.008003') if $sorted[0] eq '4.0.0'
and (not $self->perl_version or '5.008003' > $self->perl_version);
@sorted = sort RT::Handle::cmp_version $version,'4.2.0';
$self->perl_version('5.010001') if $sorted[0] eq '4.2.0'
and (not $self->perl_version or '5.010001' > $self->perl_version);
}
# if we're exactly the same version as what we want, silently return
return if ($version eq $RT::VERSION);
my @sorted = sort cmp_version $version,$RT::VERSION;
my @sorted = sort RT::Handle::cmp_version $version,$RT::VERSION;
if ($sorted[-1] eq $version) {
# should we die?
warn "\nWarning: prerequisite RT $version not found. Your installed version of RT ($RT::VERSION) is too old.\n\n";
die <<"EOT";
**** Error: This extension requires RT $version. Your installed version
of RT ($RT::VERSION) is too old.
EOT
}
}
sub requires_rt_plugin {
my $self = shift;
my ( $plugin ) = @_;
if ($self->is_admin) {
my $plugins = $self->{values}{"x_requires_rt_plugins"} || [];
push @{$plugins}, $plugin;
$self->add_metadata("x_requires_rt_plugins", $plugins);
}
my $path = $plugin;
$path =~ s{\:\:}{-}g;
$path = "$RT::LocalPluginPath/$path/lib";
if ( -e $path ) {
unshift @INC, $path;
} else {
my $name = $self->name;
warn <<"EOT";
**** Warning: $name requires that the $plugin plugin be installed and
enabled; it does not appear to be installed.
EOT
}
$self->requires(@_);
}
sub rt_too_new {
my ($self,$version,$msg) = @_;
my $name = $self->name;
$msg ||= <<EOT;
**** Error: Your installed version of RT (%s) is too new; this extension
only works with versions older than %s.
EOT
$self->add_metadata("x_rt_too_new", $version) if $self->is_admin;
_load_rt_handle();
my @sorted = sort RT::Handle::cmp_version $version,$RT::VERSION;
if ($sorted[0] eq $version) {
die sprintf($msg,$RT::VERSION,$version);
}
}
# RT::Handle runs FinalizeDatabaseType which calls RT->Config->Get
# On 3.8, this dies. On 4.0/4.2 ->Config transparently runs LoadConfig.
# LoadConfig requires being able to read RT_SiteConfig.pm (root) so we'd
# like to avoid pushing that on users.
# Fake up just enough Config to let FinalizeDatabaseType finish, and
# anyone later calling LoadConfig will overwrite our shenanigans.
sub _load_rt_handle {
unless ($RT::Config) {
require RT::Config;
$RT::Config = RT::Config->new;
RT->Config->Set('DatabaseType','mysql');
}
require RT::Handle;
}
1;
__END__
#line 336
#line 369
#line 1
package Module::Install::RTx::Runtime;
use base 'Exporter';
our @EXPORT = qw/RTxDatabase RTxPlugin/;
use strict;
use File::Basename ();
sub _rt_runtime_load {
require RT;
eval { RT::LoadConfig(); };
if (my $err = $@) {
die $err unless $err =~ /^RT couldn't load RT config file/m;
my $warn = <<EOT;
This usually means that your current user cannot read the file. You
will likely need to run this installation step as root, or some user
with more permissions.
EOT
$err =~ s/This usually means.*/$warn/s;
die $err;
}
}
sub RTxDatabase {
my ($action, $name, $version) = @_;
_rt_runtime_load();
require RT::System;
my $has_upgrade = RT::System->can('AddUpgradeHistory');
my $lib_path = File::Basename::dirname($INC{'RT.pm'});
my @args = (
"-Ilib",
"-I$RT::LocalLibPath",
"-I$lib_path",
"$RT::SbinPath/rt-setup-database",