I could not get DateTime to build from the repository using what I guess is
the ShipIt process and there's no instructions.

  $ shipit
  Unknown keys in configuration file: hg.push, hg.tagpattern

The real problem is that DateTime does not follow the normal
Build.PL/Makefile.PL process.  DateTime would get more contributions if it
could be built and tested straight out of the repository by any decent Perl
developer.  Anything more complicated risks losing casual contributors (or, in
this case, a serious one) either through lost interest or flat out not being
able to build the module.

I'm sorry I can't supply a patch, but I couldn't get it to build. :-/

That's the executive summary.  If you're already convinced you can stop
reading now and add the requisite build files to the repository.  Detail and
argument follows.

"But those are generated files and you're not supposed to commit generated
files!"  Generally speaking, yes, but let's examine this.  Why do you not
commit generated files?  Because they're usually different from machine to
machine, like the Makefile from Makefile.PL or Build from Build.PL, so they
would not be commonly useful.  But things like MANIFEST, MANIFEST.SKIP,
Makefile.PL and Build.PL are supposed to be exactly the same from machine to
machine.

Worse, by not checking in these generated but identical files you risk that
they *will not* be identical.  That I'll be using a different version of
ShipIt than you will, or some other build widget.  Different contributors will
now be using different build systems causing mysterious bugs and wasting
development time.

Finally, it just might not work, as it did not in my case.

"But serious contributors will learn the build process!"  By having a rite of
passage you sacrifice casual contributions.  And what are serious contributors
before they're serious contributors?

"Ok, we'll just document the process."  Its still extra work for contributors,
leading to a wall to climb over, leading to lost contributions.  They still
might have an incompatibility leading to mysterious differences.  And it still
just might not work.

"You're just lazy!"  I'm not just lazy, I am very lazy.  So are your
contributors.  They have better things to do then learn yet another build
system.  The more walls you put between checking out the code and fixing their
problem the more contributors you lose.

"You can work from the tarball."  Yes, I can.  And then I can't easily merge
my work with new changes and releases.

"Nobody's complained before."  Generally, lost contributors do not complain to
the developers.  They're out of energy and frustrated.  And when most people
fail at something their impulse is "I fucked up" not "is this system set up to
generate failure?"  Fortunately for DateTime, I have no such issues. :)


What follows is the log of my trying to build DateTime from the repo.  At any
point of failure in this process a casual contributor would throw up their
hands in frustration and walk away.  People reading this who are knowledgeable
in the build process may be thinking "but you should just do X!"  Of course,
but I don't know what you know.

I'm all fired up to put DateTime on a diet, as Dave and I talked briefly about
at OSCON.  So I get the latest copy from the repository using the META.yml
metadata (excellent) so I'm not working against an outdated version and can
keep up with upstream changes.

Ok, now, Build.PL... no, no Build.PL.  Makefile.PL?  No, no Makefile.PL.  At
this point a normal user stops and gives up, they can't build the software.
There's no README or INSTALL file.

Fortunately, I see a .shipit file and I'm vaguely aware of the existence of
ShipIt.  I guess I'll have to build it myself.

I find, download and install ShipIt.  I read the basic instructions and run
"shipit --write-config".  "This directory already has a .shipit config file.
I won't overwrite it.  Aborting."  Ok, I guess I don't do that.  Let's just
try "shipit".

$ shipit
Failed to load step module ShipIt::Step::DistTestExtra: Can't locate
ShipIt/Step/DistTestExtra.pm in @INC (@INC contains: lib
/usr/local/perl/5.10.1/lib/5.10.1/darwin-thread-multi-64int-ld-2level
/usr/local/perl/5.10.1/lib/5.10.1
/usr/local/perl/5.10.1/lib/site_perl/5.10.1/darwin-thread-multi-64int-ld-2level 
/usr/local/perl/5.10.1/lib/site_perl/5.10.1
.) at (eval 32) line 1.
BEGIN failed--compilation aborted at (eval 32) line 1.

Well crap, another module.  Ok, install that.

$ shipit
Failed to load step module ShipIt::Step::DistClean: Can't locate
ShipIt/Step/DistClean.pm in @INC (@INC contains: lib
/usr/local/perl/5.10.1/lib/5.10.1/darwin-thread-multi-64int-ld-2level
/usr/local/perl/5.10.1/lib/5.10.1
/usr/local/perl/5.10.1/lib/site_perl/5.10.1/darwin-thread-multi-64int-ld-2level 
/usr/local/perl/5.10.1/lib/site_perl/5.10.1
.) at (eval 37) line 1.
BEGIN failed--compilation aborted at (eval 37) line 1.

Ok, another one.  Install that.  This one has a lot of deps.

$ shipit
Unknown keys in configuration file: hg.push, hg.tagpattern

I already have ShipIt::VC::Mercurial.  There's no obvious next step.  Now I
give up.


-- 
Ahh email, my old friend.  Do you know that revenge is a dish that is best
served cold?  And it is very cold on the Internet!

Reply via email to