Relax developer policy, allowing to skip optional dependencies when in a checkout
Peter Rabbitson [Wed, 2 Jun 2010 10:44:59 +0000 (10:44 +0000)]
Changes
Makefile.PL
t/lib/DBICTest/AuthorCheck.pm

diff --git a/Changes b/Changes
index 3efcfb4..246036e 100644 (file)
--- a/Changes
+++ b/Changes
@@ -53,8 +53,11 @@ Revision history for DBIx::Class
           connect() attributes to e.g. Schema::Versioned
 
     * Misc
-        - Add a warning to load_namespaces if a class in ResultSet/
-          is not a subclass of DBIx::Class::ResultSet
+        - Reformatted Changelog \o/
+        - Allow developers to skip optional dependency forcing when working
+          from a checkout
+        - Add a warning to load_namespaces if a class in ResultSet/ is not
+          a subclass of DBIx::Class::ResultSet
         - All DBIC exception-handling switched to Try::Tiny
         - Depend on optimized SQL::Abstract (faster SQL generation)
 
index d2cd848..3b4f588 100644 (file)
@@ -12,6 +12,14 @@ use lib "$FindBin::Bin/lib";
 use Config;
 $ENV{PERL5LIB} = join ($Config{path_sep}, @INC);
 
+use Getopt::Long qw/:config gnu_getopt bundling_override no_ignore_case pass_through/;
+my $args = {
+  skip_author_deps => undef,
+};
+GetOptions ($args, 'skip_author_deps');
+if (@ARGV) {
+  warn "\nIgnoring unrecognized option(s): @ARGV\n\n";
+}
 
 ###
 ### DO NOT ADD OPTIONAL DEPENDENCIES HERE, EVEN AS recommends()
@@ -64,23 +72,45 @@ my $reqs = {
 
 
 # require extra modules for testing if we're in a checkout
+my $optdep_msg;
 if ($Module::Install::AUTHOR) {
-  warn <<'EOW';
+  if ($args->{skip_author_deps}) {
+    $optdep_msg = <<'EOW';
+
+******************************************************************************
+******************************************************************************
+***                                                                        ***
+*** IGNORING AUTHOR MODE: no optional test dependencies will be forced.    ***
+***                                                                        ***
+*** If you are using this checkout with the intention of submitting a DBIC ***
+*** patch, you are *STRONGLY ENCOURAGED* to install all dependencies, so   ***
+*** that every possible unit-test will run.                                ***
+***                                                                        ***
+******************************************************************************
+******************************************************************************
+
+EOW
+  }
+  else {
+    $optdep_msg = <<'EOW';
+
 ******************************************************************************
 ******************************************************************************
 ***                                                                        ***
 *** AUTHOR MODE: all optional test dependencies converted to hard requires ***
+***      ( to disabled re-run Makefile.PL with --skip_author_deps )        ***
 ***                                                                        ***
 ******************************************************************************
 ******************************************************************************
 
 EOW
 
-  require DBIx::Class::Optional::Dependencies;
-  $reqs->{test_requires} = {
-    %{$reqs->{test_requires}},
-    map { %$_ } (values %{DBIx::Class::Optional::Dependencies->req_group_list}),
-  };
+    require DBIx::Class::Optional::Dependencies;
+    $reqs->{test_requires} = {
+      %{$reqs->{test_requires}},
+      map { %$_ } (values %{DBIx::Class::Optional::Dependencies->req_group_list}),
+    };
+  }
 }
 
 # compose final req list, for alphabetical ordering
@@ -104,7 +134,10 @@ for my $mod (sort keys %final_req) {
   $rtype->($mod, $ver);
 }
 
+# output twice since the deplist is > 70 lines
+warn $optdep_msg;
 auto_install();
+warn $optdep_msg;
 
 # re-create various autogenerated documentation bits
 if ($Module::Install::AUTHOR) {
@@ -180,7 +213,7 @@ WriteAll();
 
 
 # Re-write META.yml to _exclude_ all forced requires (we do not want to ship this)
-if ($Module::Install::AUTHOR) {
+if ($Module::Install::AUTHOR && ! $args->{skip_author_deps} ) {
 
   # FIXME test_requires is not yet part of META
   my %original_build_requires = ( %$build_requires, %$test_requires );
index 90903b4..c75b887 100644 (file)
@@ -66,10 +66,16 @@ sub _check_author_makefile {
 We have a number of reasons to believe that this is a development
 checkout and that you, the user, did not run `perl Makefile.PL`
 before using this code. You absolutely _must_ perform this step,
-and ensure you have all required dependencies present. Not doing
+to ensure you have all required dependencies present. Not doing
 so often results in a lot of wasted time for other contributors
 trying to assit you with spurious "its broken!" problems.
 
+By default DBICs Makefile.PL turns all optional dependenciess into
+*HARD REQUIREMENTS*, in order to make sure that the entire test
+suite is executed, and no tests are skipped due to missing modules.
+If you for some reason need to disable this behavior - supply the
+--skip_author_deps option when running perl Makefile.PL
+
 If you are seeing this message unexpectedly (i.e. you are in fact
 attempting a regular installation be it through CPAN or manually),
 please report the situation to either the mailing list or to the