CPAN: Where is the source repository for $DIST?

grink on 2008-08-10T00:19:11

Something that would be nice to have:

The ability to embed a link to the project's source repository so that search.cpan.org could display it.

You can do this by sticking something in the POD, but having it in a standard place (like Links:) would be much, much better: * You could find the project's repository without hunting through the POD * You could tell, at a glance, if a project has a repository that the author would like to share * It would encourage users to contribute documentation and bug fixes


META.yml resources = {repository = ...}

Eric Wilhelm on 2008-08-10T03:21:06

It is even official.

And in your Module::Build->new() arguments:

    meta_merge => {
        resources => {
            repository => 'http://...',
        },
    },

I could say something about svn4cpan, but oh well...

Re:META.yml resources = {repository = ...}

Yanick on 2008-08-11T22:27:58

I could say something about svn4cpan, but oh well...

Good thing you didn't say anything: it made me curious enough to go take a gander at http://scratchcomputing.com/svn4cpan/. :-) Very interesting... Have you taken a look at Github recently? They have a system that is very close to what I think you're striving for. The network view of project repositories (e.g. http://github.com/andychilton/cil/network), in particular, is a thing of beauty.

hub hub

Eric Wilhelm on 2008-08-11T23:20:36

Very interesting... Have you taken a look at Github recently? They have a system that is very close to what I think you're striving for.

Github is interesting, but I don't think it really captures what I was going for with svn4cpan. (They do seem to have addressed some of the discoverability issues of git hosting, but their interface is still pretty noisy.)

What I thought was important about creating a repository tree around CPAN was the notion of using the http namespace (and proxying) to create a uniform addressing (like a DNS for code), including the trunk, tags, branches -- regardless of where you were hosting. It would basically have turned what is currently a possibly frustrating search into a simple lookup/dispatch. Git complicates things, because PAUSE and svn are basically analogous, and everybody has an svn client, yet a lot of comments have panned the idea of building it out of svn because "git is cooler." Git is, of course, a beautiful solution to the wrong problem in this case, so whatever -- what you have now is tarballs and now it is going to stay that way for the conceivable future.

So, historical view of CPAN, automatic tags, ready-to-use repository for all of you PAUSE authors, (author) discoverable forks, pod branches, cross-platform smoke test triggers, list/feed notifications, universal repository discovery, etc. Nope. Tarballs.

I'm convinced at this point that svn4cpan will not happen anytime soon because I don't have the time for it and nobody seems interested enough to back it (after 3 rewrites/tries for a TPF grant.) You could do it in pieces I guess, but I don't know how it will all get tied together.

Of course, when I started this git was but a gleam in Linus's eye, so maybe building it out of git will be practical in a couple more years at which point something else will be the cool new thing and it again won't get any support.

Re:hub hub

Aristotle on 2008-08-11T23:47:33

What does SVN offer for this that git doesn’t? Can you explain?

Re:hub hub

Eric Wilhelm on 2008-08-12T00:02:42

What does SVN offer for this that git doesn’t? Can you explain?

Apparently not.

    1. A simple web view: browseable url is the same as the checkout url, clicking on the filename downloads the file. These might be nits, but IMO they are a barrier to discoverability. Yes, I could build/install/whatever a view that does what I want, but a) we already established that I don't have the time and b) a GET on the .git file must return the file, right?

    2. The svn client is already installed or easily installable, and not strictly necessary anyway (see #1.)

So, what does git offer (for this use case) that svn doesn't? Anyway, I give up. If you are going to build it, use git.

Re:hub hub

Aristotle on 2008-08-12T08:40:32

Huh? I asked a question, I didn’t claim git was better.

Re:hub hub

Eric Wilhelm on 2008-08-12T16:31:23

Sorry, "Can't you just ...?" questions are like that.

Re:hub hub

Yanick on 2008-08-12T16:05:02

What does SVN offer for this that git doesn’t?

One argument that I can see for subversion: git clients can deal with svn repositories, but not the other way around -- so if you want to make the system accessible by a maximum of people, a svn repository is the way to go.

Re:hub hub

chromatic on 2008-08-12T20:47:08

What does git offer in this case that SVN doesn't? The value of svn4cpan isn't "Hooray, let's create yet another hosting service for a fraction of the world to use, isn't this great!" but rather using directory versioning software to keep a history of all of the public releases on CPAN under version control.

A distributed version control system isn't at all interesting because you're not going to fork CPAN history. That doesn't even make sense, at least not without a working time machine (and if you have a working time machine, you really ought to have better things to do than to change who uploaded what to PAUSE when).

Re:hub hub

Yanick on 2008-08-12T16:44:55

What I thought was important about creating a repository tree around CPAN was the notion of using the http namespace (and proxying) to create a uniform addressing (like a DNS for code), including the trunk, tags, branches -- regardless of where you were hosting. [..] Git is, of course, a beautiful solution to the wrong problem in this case, so whatever -- what you have now is tarballs and now it is going to stay that way for the conceivable future.

First, only now do I realize that you probably had someone chirp in something about Git every single step of the way you fleshed out svn4cpan, and that my comment might have had all the welcome quality of a forkstab at a convalescent eyeball. Sorry about that. <:-/ Although I currently have a preference for Git, I really think that svn4cpan is a wonderful idea, no matter what kind of vcs ends up being its backbone. My goal was merely to point out a possible way to deal with social programing that I find quite nifty and see what you think of it (as you obviously spent much more time musing over a Perl global repository than I have).

I'm convinced at this point that svn4cpan will not happen anytime soon because I don't have the time for it and nobody seems interested enough to back it (after 3 rewrites/tries for a TPF grant.) You could do it in pieces I guess, but I don't know how it will all get tied together.

Believe me, I feel your pain. But don't despair: all visionaries are eventually vindicated (okay, in most cases several hundred years after their passing, but hey, they *do* have the last word).

structuring chaos

Eric Wilhelm on 2008-08-12T20:27:58

something about Git every single step ... forkstab ... eyeball ...

Well, only recently. Nobody said much about git in early 2006.

My goal was merely to point out a possible way to deal with social programing that I find quite nifty and see what you think of it

Like I said, "interesting", but I don't immediately see it being useful to CPAN. We currently have the META.yml key (which started this thread) for discovery of repositories, and everyone using it will improve things. For now though, the existence of github just means that the landscape of repositories for CPAN modules will splinter more than it already was (it used to be that you would find the repository on sourceforge or perl.org or the author's own server, so now we have berlios, google code, and github too.) All of these tend to try to solve general-purpose collaboration issues and offer solutions which work within their own context, etc. None of that means much to a CPAN user wanting to figure out "$what broke $when" where $what may be one or more distributions and $when is a very simple linear sequence of said distributions having been released (despite claims that the ability to handle quantum releases is somehow necessary), and none of those systems will ever present a solution to those CPAN-centric issues.

But, I don't see this so much as a "social programming" problem, it's more about a historical record and discoverability (or at least, that's the chunk of our particular "social programing problem" which I chose to peel-off and attempt to solve.) Subversion provides a web service and a versioned filesystem, which IMO is exactly what is needed to create, publish, and maintain a CPAN history. With appropriate write access, said filesystem could also give every pause author a place to publish their work (including short branches of another author's work.) If they prefer CVS, perforce, bitkeeper, git, darcs, mercurial, blah, blah, or blah, they could simply use WebDAV to upload a YAML file indicating the location and type of their repository. That would take some standard/coordination to minimize pain on the client side, but would at least provide a standard place to start looking for forks/bugfixes/etc before you start hacking (and I would hope it could possibly become an accepted way to inform the author that you were interested in "trying something", as well as fun things involving smoke testing, documentations patches, etc.)

But these are just great and wonderful things which would be made possible by a simple versioned filesystem provided via a web service which paralleled CPAN. I think that is the important point and that limiting the implementation to something this simple is key to avoiding centralization bloat.

don't despair: all visionaries are eventually vindicated

Well, you can't eat "I told you so", but I have plenty of other unprofitable visions to pursue which are more important to me.

If you want to see it in the wild...

Alias on 2008-08-10T08:09:57

There's an example here... http://search.cpan.org/src/ADAMK/Module-Install-0.77/META.yml

Doing it from ExtUtils::MakeMaker

claes on 2008-08-10T09:38:28

WriteMakefile accepts a EXTRA_META argument that just get appended to the end of the generated META.yml so you can use it as for example:

EXTRA_META => q{
resources:
    repository: svn://svn.versed.se/public/Perl/modules/JavaScript
},

Re:Doing it from ExtUtils::MakeMaker

grink on 2008-08-12T20:59:03

Eric, Alias, & claes

This is good stuff. It's great that there's already a convention for it.

Maybe a bookmarklet or greasmonkey script could bring this feature to the forefront.

Re:Doing it from ExtUtils::MakeMaker

Yanick on 2008-08-13T01:32:23

Ask, and thou shalt receive: http://userscripts.org/scripts/show/31660. Enjoy! :-)

Re:Doing it from ExtUtils::MakeMaker

grink on 2008-08-13T02:28:05

Wow, that's frickin' sweet!

I made /repository:\s+(\S+)/ case insensitive by adding the /i at the end: /repository:\s+(\S+)/i

Cheers

Re:Doing it from ExtUtils::MakeMaker

Yanick on 2008-08-13T02:36:23

Wow, that's frickin' sweet!

*g* Thanks.

[ //i ]

Not a bad idea. I'll add it to the next iteration of the script!

Re:Doing it from ExtUtils::MakeMaker

grink on 2008-08-13T03:19:09

Yeah, I forgot to mention I changed it so it would work with Alias's example:

http://search.cpan.org/dist/ack/

Re:Doing it from ExtUtils::MakeMaker

Yanick on 2008-08-13T11:57:45

Andy breaking the specs? Tsk, tsk, tsk... ;-)

This being said, the script has been updated and will match on any capitalization of rEpOSitory now. Thanks again for pointing this out!

Re: repository

Eric Wilhelm on 2008-08-13T08:35:59

From my reading, 'repository' is an official key in the standard, so shouldn't need to be case insensitive. Are there dists using 'Repository'?

Re: repository

grink on 2008-08-13T08:41:21

Yes, Alias's example has 'Repository' instead of 'repository'

http://search.cpan.org/dist/ack/

As for being an official key, that may be true, but I can't think of a good case where TPTB would want to differentiate between a Repository: or repository: or rEpOsitOry: or whatever (so case insensitivity shouldn't hurt).

Re: repository

Eric Wilhelm on 2008-08-13T15:30:24

Hmm, either Andy was ahead of his time or not reading carefully enough.

As for being an official key, that may be true, but I can't think of a good case ... so case insensitivity shouldn't hurt.

Well, hash-lookups are case sensitive. If we're going to get into a case-insensitive-preserving behavior with META.yml, that could get frustrating really quick. And generally, with regard to standards: "couldn't hurt" ... will.

Re: repository

grink on 2008-08-13T18:54:34

You're right, a hash lookup would be problematic.
Maybe we can help people out by issuing warnings about their META. Some things that could help:

    1. A META validator
    2. A standard way of generating META during the dist build/ship process

Re: repository

Eric Wilhelm on 2008-08-13T21:04:25

1. A META validator

That would make a fine cpan module... possibly a kwalitee point?

2. A standard way of generating META during the dist build/ship process

Well, M::B already does a lot of that. I suppose it either needs to provide validation on the meta_merge or a nicer way to specify such things (extracted from standard sections in the pod would be nice too.)