text:
Upgrade the license to an open one

I realize you probably picked deliberately, but I will ask anyway. :-)
For personal use the license is fine, but it would be nicer if the software had a properly open license (apache, bsd or MIT for example) for "corporate use". It's not about not contributing back, but just the added legal hassle using contagious licenses in anything.

A quick status update:
@spf13 has started a thread on 2014-10-12 to collect sign-offs by contributors to agree to the move from SimPL 2.0 to Apache License 2.0:

http://discuss.gohugo.io/t/switching-to-apache-2-license/173

23 sign-offs have been collected as of today (2015-01-21).  Making good progress, but still quote some way to go before we reach our goal.
A small note about the upcoming license change was added to http://gohugo.io/meta/license/ two days ago.
I am starting to think that perhaps we need to add an explicit statement in README.md and the documentation for contributors that all contributions from this point forward (from today?  from 2015-01-01?  From 2014-10-12?) automatically fall under the Apache License v2.0 (or SimPL/Apache dual license)?
And perhaps we will need to individually contact our past contributors, especially those who were active in 2013 and early 2014 but have since moved on, to obtain permissions from them for the license switch?  E.g. @tychoish, @noahcampbell, and others?  :-)

@dch How's the legwork going? We need a list of contributors and a list of people who have signed off.

git_fame (gem install git_fame) currently reports this:
+-------------------------+--------+---------+-------+--------------------+
| name                    | loc    | commits | files | distribution       |
+-------------------------+--------+---------+-------+--------------------+
| spf13                   | 20,681 | 374     | 219   | 38.1 / 38.5 / 54.9 |
| William McGann          | 13,976 | 1       | 27    | 25.7 / 0.1 / 6.8   |
| bep                     | 3,835  | 92      | 56    | 7.1 / 9.5 / 14.0   |
| Anthony Fok             | 3,529  | 60      | 114   | 6.5 / 6.2 / 28.6   |
| Noah Campbell           | 2,604  | 109     | 42    | 4.8 / 11.2 / 10.5  |
| Tatsushi Demachi        | 2,138  | 17      | 13    | 3.9 / 1.8 / 3.3    |
| Tibor Vass              | 1,153  | 1       | 12    | 2.1 / 0.1 / 3.0    |
| Michael Henderson       | 1,130  | 4       | 1     | 2.1 / 0.4 / 0.3    |
| Owen Waller             | 656    | 11      | 6     | 1.2 / 1.1 / 1.5    |
| Austin Ziegler          | 651    | 20      | 29    | 1.2 / 2.1 / 7.3    |
| Derek Perkins           | 620    | 3       | 13    | 1.1 / 0.3 / 3.3    |
| Nate Finch              | 348    | 18      | 12    | 0.6 / 1.9 / 3.0    |
| Phil Pennock            | 334    | 5       | 13    | 0.6 / 0.5 / 3.3    |
| Egon Elbre              | 307    | 5       | 18    | 0.6 / 0.5 / 4.5    |
| Joel Scoble             | 300    | 23      | 25    | 0.6 / 2.4 / 6.3    |
| Arjen Schwarz           | 255    | 1       | 4     | 0.5 / 0.1 / 1.0    |
| Vincent Batoufflet      | 239    | 10      | 12    | 0.4 / 1.0 / 3.0    |
| mattn                   | 227    | 1       | 4     | 0.4 / 0.1 / 1.0    |
| Spencer Lyon            | 130    | 2       | 2     | 0.2 / 0.2 / 0.5    |
| Naoya Inada             | 126    | 2       | 8     | 0.2 / 0.2 / 2.0    |
| Will Stevens            | 107    | 2       | 2     | 0.2 / 0.2 / 0.5    |
| Marek Stanley           | 98     | 1       | 2     | 0.2 / 0.1 / 0.5    |
| Alexandre Normand       | 56     | 2       | 1     | 0.1 / 0.2 / 0.3    |
| Alex Dunn               | 51     | 4       | 5     | 0.1 / 0.4 / 1.3    |
| Ryan Martinsen          | 50     | 1       | 3     | 0.1 / 0.1 / 0.8    |
| Kartik Singhal          | 43     | 10      | 17    | 0.1 / 1.0 / 4.3    |
| Tom Helmer Hansen       | 40     | 4       | 3     | 0.1 / 0.4 / 0.8    |
| Ross Lawley             | 40     | 6       | 5     | 0.1 / 0.6 / 1.3    |
| Augustin Riedinger      | 40     | 1       | 1     | 0.1 / 0.1 / 0.3    |
| Rasmus Stougaard        | 36     | 4       | 3     | 0.1 / 0.4 / 0.8    |
| Dan Hersam              | 36     | 4       | 8     | 0.1 / 0.4 / 2.0    |
| Fabrizio (Misto) Milo   | 31     | 4       | 2     | 0.1 / 0.4 / 0.5    |
| Ask Bjørn Hansen        | 29     | 10      | 6     | 0.1 / 1.0 / 1.5    |
| Dave Cottlehuber        | 29     | 1       | 1     | 0.1 / 0.1 / 0.3    |
| Michael Whatcott        | 25     | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Ahsanul Haque           | 23     | 3       | 6     | 0.0 / 0.3 / 1.5    |
| Ruben                   | 22     | 5       | 3     | 0.0 / 0.5 / 0.8    |
| Franklin Wise           | 20     | 3       | 2     | 0.0 / 0.3 / 0.5    |
| Mark Sanborn            | 17     | 2       | 2     | 0.0 / 0.2 / 0.5    |
| Rahul Bansal            | 17     | 2       | 2     | 0.0 / 0.2 / 0.5    |
| philgs                  | 17     | 3       | 2     | 0.0 / 0.3 / 0.5    |
| Jake Mitchell           | 16     | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Dato Simó               | 16     | 4       | 3     | 0.0 / 0.4 / 0.8    |
| tycho garen             | 15     | 9       | 13    | 0.0 / 0.9 / 3.3    |
| LK4D4                   | 14     | 1       | 3     | 0.0 / 0.1 / 0.8    |
| Ryan Kimber             | 13     | 3       | 1     | 0.0 / 0.3 / 0.3    |
| Billie H. Cleek         | 10     | 2       | 1     | 0.0 / 0.2 / 0.3    |
| Mike Keesey             | 10     | 1       | 5     | 0.0 / 0.1 / 1.3    |
| Caleb Spare             | 10     | 1       | 4     | 0.0 / 0.1 / 1.0    |
| Dave Johnston           | 9      | 2       | 3     | 0.0 / 0.2 / 0.8    |
| Chase Adams             | 9      | 3       | 2     | 0.0 / 0.3 / 0.5    |
| Nicholas Whittier       | 8      | 2       | 2     | 0.0 / 0.2 / 0.5    |
| fundon                  | 7      | 1       | 2     | 0.0 / 0.1 / 0.5    |
| Jonathan Anderson       | 7      | 2       | 3     | 0.0 / 0.2 / 0.8    |
| Christoph Burgdorf      | 7      | 1       | 2     | 0.0 / 0.1 / 0.5    |
| Zach Chadwick           | 7      | 1       | 2     | 0.0 / 0.1 / 0.5    |
| Henry                   | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| jesper-mortensen        | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Brandon Black           | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Tim Esselens            | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Jorin Vogel             | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Kristoffer Grönlund     | 6      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Danilo Cabello          | 6      | 3       | 1     | 0.0 / 0.3 / 0.3    |
| Daniel Fairhead         | 5      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Lorenzo Bolla           | 5      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Michael D. Johas Teener | 5      | 2       | 3     | 0.0 / 0.2 / 0.8    |
| Marcelo Glezer          | 4      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Joe Kopena              | 4      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Raphael Estrada         | 3      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Andrew Gerrand          | 3      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Nathan Youngman         | 3      | 2       | 2     | 0.0 / 0.2 / 0.5    |
| Nelson Silva            | 3      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Nikolay Kirsh           | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Anton Ageev             | 2      | 2       | 1     | 0.0 / 0.2 / 0.3    |
| Gour                    | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Rolando Pereira         | 2      | 2       | 2     | 0.0 / 0.2 / 0.5    |
| Jakub Turski            | 2      | 3       | 2     | 0.0 / 0.3 / 0.5    |
| Kevin Burke             | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Jian Zhou               | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Matt Way                | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Jacob Gillespie         | 2      | 4       | 1     | 0.0 / 0.4 / 0.3    |
| Oscar Bolmsten          | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Tomas Roos              | 2      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| LordFPL                 | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Krisztián Szabó         | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Dan Connolly            | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Ciaran Downey           | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Peter Krautzberger      | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Danillo Souza           | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Mantas                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| GuoJing                 | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Brian Payne             | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Maarten Everts          | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| ojan                    | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Marc Liyanage           | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Mike Dillon             | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Tim Heaney              | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Rinat Abdullin          | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Gergely Imreh           | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Abe Pazos               | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| David Kebler            | 1      | 2       | 1     | 0.0 / 0.2 / 0.3    |
| Wade Wegner             | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Tim Dumol               | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Hideo Hattori           | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| ls6                     | 1      | 1       | 1     | 0.0 / 0.1 / 0.3    |
| Dana Woodman            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Andrew Jones            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ant Zucaro              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Aurelius Prochazka      | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Brandon Philips         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Andrew Codispoti        | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Daniel Alan Miller      | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Arroyo            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Gay               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Duncan Beevers          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gina White              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| GraemeCaldwell          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Hugo Duncan             | 0      | 3       | 0     | 0.0 / 0.3 / 0.0    |
| Javed Khan              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Justin Calleja          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kieran Healy            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kyle Mahan              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Luke Holder             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nathan LeClaire         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nick Sabine             | 0      | 2       | 0     | 0.0 / 0.2 / 0.0    |
| Niels Widger            | 0      | 2       | 0     | 0.0 / 0.2 / 0.0    |
| Roberto Dip             | 0      | 2       | 0     | 0.0 / 0.2 / 0.0    |
| Sebastian Müller        | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Stephen Eglen           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Valeri Karpov           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| VonC                    | 0      | 3       | 0     | 0.0 / 0.3 / 0.0    |
| William King            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| elij                    | 0      | 5       | 0     | 0.0 / 0.5 / 0.0    |
| rawfalafel              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| rybi                    | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| tummychow               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| windch                  | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Øyvind Skaar            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
+-------------------------+--------+---------+-------+--------------------+
138 rows in set

It uses Git blame -- so this is "active content".

Wow, that's some neat stats. :smile:

@anthonyfok. Agree with the approach. We should draw a line in the sand and say all contributions going forward are under Apache. Not sure what the best way to do that within the legal constraints are.

Please have a look at - https://www.clahub.com/
Not sure if its relevant here. But might help for future pull requests. Basically in CLA we can add something like:

The project is undergoing license change . Your contribution (i.e. pull request) will be accepted under Apache license.

This will make future contributions obey Apache license. Then for old contributions over the time we might be able to collect sign-offs from most people.
Finally we can try to separate out code v/s docs contribution.
Please note that above are just my ideas and I have no legal knowledge of the process.
On sidenote, wordpress.org accepts plugins with MIT and Apache license in their plugin repo even though WordPress is GPL. So can we make project dual license.

I would strongly recommend making it clear that all future contributions accepted must be under the Apache license.  CLAHub may well be one way to make that easier, I haven't used it, but any tooling to make 1) licensing easier to use and enforce, and 2) make people aware of different licenses before they contribute is a good thing in general.
I would imagine that updating readme/license to note that some existing portions of the software are under X license, but that as of date X all new contributions must be under the Apache license to be included.
Re: @rahul286, I personally don't see the need to use a dual-license.  First, you'd need to have previous copyright owners/contributors agree to dual license.  Plus, in just about all cases Apache licensed code is accepted within GPL licensed projects or products, even as patches or within products.  The ASF has a legal FAQ-like page discussing this:
http://www.apache.org/licenses/GPL-compatibility.html
Note that any Apache project (i.e. hosted at the ASF) cannot accept GPL'd code, and some/many independent projects that use the Apache license also won't accept GPL code within their software products.
Note that Wordpress policies are a separate question.  I.e. the license for the WordPress core code is immaterial to the license of plugins used, since there's a clear and well understood plugin API between the components, meaning the licenses don't interact with each other.  This lets different plugin authors continue development of their plugin under their preferred license.
In any case, I'm personally excited Hugo is switching to Apache license, since I'm hoping to use it to run several websites going forward, and personally I prefer a permissive license like Apache.
Thanks!

I was under impression that we can use dual-license in different way.
For example:

Old code will stay under old license, till we don't get permission from everyone
As above will take time, new contribution can use new license so we don't have to repeat step 1, for contributions coming while we are stuck in step 1.
Once step 1 is completed, all codes will under single license.

So dual-license was temporary thing. Not sure if such arrangement is legally possible. :|

Some use of the GitHub API/jq/comm/scraping discourse got me this.
Checked means they signed off in the thread; not checked means they haven't.

[ ] abdullin
[x] abh
[x] acodispo
[ ] adg
[ ] ahsanulhaque
[ ] alexandre-normand
[ ] andrewrjones
[ ] antage
[x] anthonyfok
[x] antzucaro
[ ] ariejan
[x] arjenschwarz
[ ] aug-riedinger
[ ] aure
[ ] batmat
[ ] bayne
[ ] bborysenko
[x] bep (signed as bjornerik)
[ ] bhcleek
[ ] bojako
[ ] brandonblack
[ ] burntsushi
[ ] cabello
[ ] cactus
[ ] calavera
[ ] cburgdorf
[ ] cespare
[ ] chaseadamsio
[ ] chreliot
[ ] ciarand
[ ] clam-
[ ] complexsplit
[ ] consequently
[ ] cryptix
[ ] dalanmiller
[ ] danapsimer
[ ] danawoodman
[ ] dannys42
[ ] dato
[x] dch
[ ] dckc
[ ] delputnam
[x] derekperkins
[ ] digitalcraftsman
[ ] dkebler
[ ] duncanbeevers
[ ] dunn
[ ] dylanmackenzie
[ ] egonelbre
[ ] emarshal
[ ] franklinwise
[x] fredxinfan
[x] fundon
[ ] galaktor
[ ] gato
[ ] ginabythebay
[ ] gitter-badger
[ ] glabra
[ ] gour
[ ] graemecaldwell
[ ] guojing
[x] h4tch
[x] halostatue
[ ] hamoid
[ ] hatieth
[ ] hhatto
[ ] hugoduncan
[ ] hut8
[ ] ifraixedes
[x] imperialwicket
[ ] imrehg
[ ] jacobwgillespie
[x] jaden
[ ] janzhou
[ ] jbrodriguez
[ ] jesper-mortensen
[ ] jmhodges
[ ] jmitchell
[ ] johnsto
[ ] jorin-vogel
[ ] josephkaptur
[ ] jramnani
[x] k4rtik
[ ] kangkona
[ ] karland
[ ] kevinburke
[ ] kjhealy
[ ] klakegg
[ ] krig
[ ] kylewm
[ ] lbolla
[ ] liyanage
[ ] lk4d4
[ ] loongmxbt
[ ] lordfpl
[x] lotrfan
[ ] ls6
[x] lukeholder
[ ] mariobox
[ ] maruel
[ ] mattn
[ ] md5
[ ] mdhender
[ ] mdwhatcott
[ ] mhe
[ ] midinastasurazz
[x] mikejt
[ ] mistobaan
[ ] mjanda
[x] mkeesey
[x] mohae
[x] moxiegirl
[x] naoina
[x] natefinch
[ ] nathanleclaire
[ ] nathany
[ ] nelsonsilva
[x] noahcampbell
[ ] noqqe
[ ] nsabine
[ ] ntns
[ ] null
[x] nwidger
[ ] oddshocks
[ ] ojan
[x] oscar-b
[x] owenwaller
[ ] oylenshpeegul
[ ] oyvindsk
[ ] paniko0
[ ] pcdummy
[ ] philgs
[ ] philips
[ ] philpennock
[ ] piotrkowalczuk
[ ] pkra
[ ] popthestack
[ ] ptomasroos
[x] quoha
[x] rahul286
[ ] rauhs
[x] rickcogley
[ ] rolpereira
[ ] roperzh
[x] rozza
[ ] rubenn
[ ] rubenv
[ ] ruimashita
[ ] rustyoz
[x] ryanclarke
[ ] ryan-kimber
[ ] rybi
[ ] sainaen
[ ] samueldebruyn
[ ] sanbornm
[x] schumacherfm
[x] scottcwilson
[ ] sebastianm
[ ] secretmapper
[ ] sje30
[ ] skybon
[ ] slel
[x] spencerlyon2
[ ] spf13
[ ] stou
[ ] svaigstu
[ ] szymonkatra
[x] tatsushid
[ ] tehbilly
[ ] thenonameguy
[ ] timdumol
[ ] timesselens
[ ] tjkopena
[ ] tnolet
[ ] tomhelmer
[ ] trombonehero
[ ] tummychow
[ ] tuxcanfly
[ ] tychoish
[ ] vbatoufflet
[ ] vharitonsky
[ ] vielmetti
[ ] vjeantet
[ ] vkarpov15
[x] vonc
[ ] vsopvsop
[ ] wadewegner
[ ] windch
[ ] wmat
[ ] xboston
[ ] yacoob
[ ] zachad

There were also a couple who signed and don't any commits listed:

[x] bjornerik (checked off bep above)
[x] grumble
[x] rombonehero
[x] roperezh
[x] tom

Seriously, I dont understand the issue here... You DO NOT need the approval of all contributors to relicense it under the GPL 2.0, because they have already agreed to do so by accepting the SimPL 2.0 license.
As @unor already quoted before:

If you distribute the software or a Derived Work, you must give back to the community by:
[…]

Licensing it to everyone under SimPL, or substantially similar terms (such as GPL 2.0), without adding further restrictions to the rights provided […]

As you see the SimPL 2.0 license is perfectly compatible to the GPL 2.0.

We are not changing to GPL 2.0. We are changing to Apache 2.

Well, you could of course try to switch to apache 2.0, but seriously I dont see this happening (do you really hope to get all those agreements?).
As I have understood the main issue of the SimPL 2.0 license is that it's not "known" and reviewed by lawyers of corporations. The GPL 2.0, 3.0 or the Apache 2.0 license would solve this, but obviously (at least for now) the latter is not reachable.
So while years will pass, this issue will still not be resolved and corporations will reject hugo. So by logical thinking I would just transfer to GPL 3.0 immediatly (thus solving the main issue), and still try to get those contributor agreements for apache 2.0 if the move desired.
I really see no sense however in keeping things as they are.

@Nuc1eoN I agree with you. :-)
Had it been GPL instead of SimPL I would have started working earlier on this project!

The list may look long:
+--------------------------+--------+---------+-------+--------------------+
| name                     | loc    | commits | files | distribution       |
+--------------------------+--------+---------+-------+--------------------+
| spf13                    | 20,186 | 416     | 228   | 30.9 / 27.2 / 45.2 |
| William McGann           | 13,973 | 1       | 27    | 21.4 / 0.1 / 5.4   |
| bep                      | 11,949 | 373     | 165   | 18.3 / 24.4 / 32.7 |
| Anthony Fok              | 5,130  | 122     | 200   | 7.9 / 8.0 / 39.7   |
| Noah Campbell            | 2,695  | 109     | 39    | 4.1 / 7.1 / 7.7    |
| Tatsushi Demachi         | 1,717  | 27      | 17    | 2.6 / 1.8 / 3.4    |
| Michael Henderson        | 1,221  | 5       | 3     | 1.9 / 0.3 / 0.6    |
| Tibor Vass               | 913    | 1       | 12    | 1.4 / 0.1 / 2.4    |
| Cyrill Schumacher        | 734    | 14      | 6     | 1.1 / 0.9 / 1.2    |
| Owen Waller              | 630    | 12      | 4     | 1.0 / 0.8 / 0.8    |
| Austin Ziegler           | 493    | 20      | 28    | 0.8 / 1.3 / 5.6    |
| Joel Scoble              | 469    | 24      | 26    | 0.7 / 1.6 / 5.2    |
| Rick Cogley              | 406    | 11      | 14    | 0.6 / 0.7 / 2.8    |
| Nate Finch               | 319    | 18      | 11    | 0.5 / 1.2 / 2.2    |
| Egon Elbre               | 315    | 8       | 20    | 0.5 / 0.5 / 4.0    |
| Phil Pennock             | 300    | 5       | 12    | 0.5 / 0.3 / 2.4    |
| Derek Perkins            | 286    | 4       | 10    | 0.4 / 0.3 / 2.0    |
| mdhender                 | 249    | 4       | 5     | 0.4 / 0.3 / 1.0    |
| Arjen Schwarz            | 215    | 1       | 4     | 0.3 / 0.1 / 0.8    |
| mattn                    | 211    | 1       | 4     | 0.3 / 0.1 / 0.8    |
| Vincent Batoufflet       | 183    | 11      | 12    | 0.3 / 0.7 / 2.4    |
| Ariejan de Vroom         | 167    | 6       | 4     | 0.3 / 0.4 / 0.8    |
| Alex Dunn                | 145    | 5       | 6     | 0.2 / 0.3 / 1.2    |
| Spencer Lyon             | 123    | 2       | 2     | 0.2 / 0.1 / 0.4    |
| Naoya Inada              | 112    | 3       | 5     | 0.2 / 0.2 / 1.0    |
| Marek Stanley            | 93     | 1       | 2     | 0.1 / 0.1 / 0.4    |
| Jeff Ramnani             | 79     | 3       | 4     | 0.1 / 0.2 / 0.8    |
| Jeff Hodges              | 77     | 3       | 4     | 0.1 / 0.2 / 0.8    |
| Russell Oliver           | 77     | 1       | 3     | 0.1 / 0.1 / 0.6    |
| Takuya Wakisaka          | 76     | 2       | 3     | 0.1 / 0.1 / 0.6    |
| Benny Wu                 | 70     | 2       | 3     | 0.1 / 0.1 / 0.6    |
| Sam Debruyn              | 67     | 2       | 2     | 0.1 / 0.1 / 0.4    |
| Marek Janda              | 66     | 1       | 3     | 0.1 / 0.1 / 0.6    |
| karland                  | 66     | 3       | 3     | 0.1 / 0.2 / 0.6    |
| coderzh                  | 62     | 1       | 3     | 0.1 / 0.1 / 0.6    |
| Scott C Wilson           | 61     | 8       | 7     | 0.1 / 0.5 / 1.4    |
| Alexandre Normand        | 50     | 2       | 1     | 0.1 / 0.1 / 0.2    |
| Dylan MacKenzie          | 50     | 1       | 3     | 0.1 / 0.1 / 0.6    |
| chrongzhang              | 45     | 1       | 7     | 0.1 / 0.1 / 1.4    |
| Dan Hersam               | 44     | 5       | 10    | 0.1 / 0.3 / 2.0    |
| René Jochum              | 42     | 1       | 3     | 0.1 / 0.1 / 0.6    |
| Ross Lawley              | 39     | 6       | 5     | 0.1 / 0.4 / 1.0    |
| Augustin Riedinger       | 38     | 1       | 1     | 0.1 / 0.1 / 0.2    |
| Baptiste Mathus          | 35     | 2       | 4     | 0.1 / 0.1 / 0.8    |
| digitalcraftsman         | 34     | 3       | 3     | 0.1 / 0.2 / 0.6    |
| Rasmus Stougaard         | 33     | 4       | 2     | 0.1 / 0.3 / 0.4    |
| Andrew Brampton          | 31     | 2       | 4     | 0.0 / 0.1 / 0.8    |
| Erlend Klakegg Bergheim  | 31     | 1       | 3     | 0.0 / 0.1 / 0.6    |
| Jonathan Anderson        | 29     | 5       | 5     | 0.0 / 0.3 / 1.0    |
| Fabrizio (Misto) Milo    | 28     | 4       | 2     | 0.0 / 0.3 / 0.4    |
| Bill Traynor             | 25     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Arian Allenson M. Valdez | 25     | 3       | 2     | 0.0 / 0.2 / 0.4    |
| Michael Whatcott         | 22     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Dave Cottlehuber         | 20     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Mary Anthony             | 20     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Ruben Vermeersch         | 20     | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Ask Bjørn Hansen         | 19     | 10      | 5     | 0.0 / 0.7 / 1.0    |
| Franklin Wise            | 18     | 3       | 2     | 0.0 / 0.2 / 0.4    |
| Michael Diamond          | 18     | 2       | 3     | 0.0 / 0.1 / 0.6    |
| Ahsanul Haque            | 18     | 3       | 6     | 0.0 / 0.2 / 1.2    |
| Juan B. Rodriguez        | 18     | 2       | 4     | 0.0 / 0.1 / 0.8    |
| Ruben                    | 18     | 5       | 3     | 0.0 / 0.3 / 0.6    |
| Kartik Singhal           | 18     | 10      | 9     | 0.0 / 0.7 / 1.8    |
| Sebastian Krause         | 17     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Rahul Bansal             | 16     | 2       | 2     | 0.0 / 0.1 / 0.4    |
| jlengstorf               | 16     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Mark Sanborn             | 16     | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Kohei Yoshino            | 15     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Dato Simó                | 15     | 4       | 3     | 0.0 / 0.3 / 0.6    |
| Greg Restall             | 15     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Jake Mitchell            | 15     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Richard Sumilang         | 15     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| tycho garen              | 15     | 9       | 13    | 0.0 / 0.6 / 2.6    |
| philgs                   | 15     | 3       | 2     | 0.0 / 0.2 / 0.4    |
| tim                      | 14     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Szymon Katra             | 14     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| kangkona                 | 14     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Yosuke INOUE             | 13     | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Benoit Benedetti         | 13     | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Mario Sanchez Carrion    | 13     | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Piotr Kowalczuk          | 13     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Ryan Kimber              | 12     | 3       | 1     | 0.0 / 0.2 / 0.2    |
| Tom Helmer Hansen        | 12     | 4       | 1     | 0.0 / 0.3 / 0.2    |
| Karim Ali                | 11     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Ryan Martinsen           | 11     | 1       | 3     | 0.0 / 0.1 / 0.6    |
| sainaen                  | 11     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Hugh Grigg               | 11     | 1       | 1     | 0.0 / 0.1 / 0.2    |
| sergeant                 | 10     | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Bruno Calheira           | 10     | 2       | 1     | 0.0 / 0.1 / 0.2    |
| David Calavera           | 9      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Dave Johnston            | 9      | 2       | 3     | 0.0 / 0.1 / 0.6    |
| Chase Adams              | 9      | 3       | 2     | 0.0 / 0.2 / 0.4    |
| Ryan Clarke              | 8      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Mike Keesey              | 8      | 1       | 5     | 0.0 / 0.1 / 1.0    |
| Will Stevens             | 8      | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Valere JEANTET           | 7      | 2       | 3     | 0.0 / 0.1 / 0.6    |
| Billie H. Cleek          | 7      | 2       | 1     | 0.0 / 0.1 / 0.2    |
| fundon                   | 7      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Liam Bowen               | 7      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Danilo Cabello           | 6      | 3       | 1     | 0.0 / 0.2 / 0.2    |
| Kristoffer Grönlund      | 6      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Jeffrey Tolar            | 6      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Henry                    | 6      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Tim Esselens             | 6      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Nicholas Whittier        | 5      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Marc-Antoine Ruel        | 5      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Lorenzo Bolla            | 5      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Jorin Vogel              | 5      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Daniel Fairhead          | 4      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| LK4D4                    | 4      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Christoph Burgdorf       | 4      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Isaac Gregson            | 4      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Joe Kopena               | 4      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| jesper-mortensen         | 4      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Michael D. Johas Teener  | 4      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Artem Vorotnikov         | 4      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Clam-                    | 3      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Marcelo Glezer           | 3      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Raphael Estrada          | 3      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Dana H. P'Simer          | 3      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Andre R                  | 3      | 1       | 3     | 0.0 / 0.1 / 0.6    |
| Andrew Gerrand           | 3      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Matt Way                 | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Brandon Black            | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Ivan Fraixedes           | 2      | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Tomas Roos               | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Kevin Burke              | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Caleb Spare              | 2      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| Rolando Pereira          | 2      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Nathan Youngman          | 2      | 2       | 2     | 0.0 / 0.1 / 0.4    |
| Éli Marshal              | 2      | 1       | 2     | 0.0 / 0.1 / 0.4    |
| complexsplit             | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Nikolay Kirsh            | 2      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Wade Wegner              | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Jacob Gillespie          | 1      | 4       | 1     | 0.0 / 0.3 / 0.2    |
| vsopvsop                 | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Maxime Michel            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Hideo Hattori            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| LordFPL                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Andrew Gallant           | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Joseph Kaptur            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Jakub Turski             | 1      | 3       | 1     | 0.0 / 0.2 / 0.2    |
| Andrew Carter            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Danny Sung               | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Abe Pazos                | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Tim Dumol                | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Christopher Eliot        | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Borys Borysenko          | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Francois Lanthier Nadeau | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Anton Ageev              | 1      | 2       | 1     | 0.0 / 0.1 / 0.2    |
| Marc Liyanage            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Brian Payne              | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Dan Connolly             | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Mantas                   | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| riboflavin               | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Peter Krautzberger       | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Samuel Lelièvre          | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Krisztián Szabó          | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Danillo Souza            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Zach Chadwick            | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| delputnam                | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Rinat Abdullin           | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Oscar Bolmsten           | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Edward Vielmetti         | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Saint Asky               | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| ojan                     | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| GuoJing                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Vitaly Haritonsky        | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Dan Hatch                | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Icaro Seara              | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Bruno Clermont           | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| The Gitter Badger        | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Florian Baumann          | 1      | 1       | 1     | 0.0 / 0.1 / 0.2    |
| Andrew Codispoti         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Andrew Jones             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ant Zucaro               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Aurelius Prochazka       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Austin Dizzy             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Brandon Philips          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ciaran Downey            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Dana Woodman             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Daniel Alan Miller       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Arroyo             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Gay                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Kebler             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Duncan Beevers           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gergely Imreh            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gina White               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gour                     | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| GraemeCaldwell           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Hugo Duncan              | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Javed Khan               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Jian Zhou                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Justin Calleja           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kieran Healy             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kyle Mahan               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Luke Holder              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Maarten Everts           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Mike Dillon              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nathan LeClaire          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nelson Silva             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nick Sabine              | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Niels Widger             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Nuno Antunes             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Roberto Dip              | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Sebastian Müller         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Stephen Eglen            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Tim Heaney               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Valeri Karpov            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| VonC                     | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| William King             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Xin Fan                  | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| elij                     | 0      | 5       | 0     | 0.0 / 0.3 / 0.0    |
| ls6                      | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| midinastasurazz          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| quoha                    | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| rawfalafel               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| rybi                     | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| tummychow                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| windch                   | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Øyvind Skaar             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
+--------------------------+--------+---------+-------+--------------------+

But it's only 25 people with more than 100 lines of code/doc left in the project. So this is manageable, it just needs some work, the best would be that @spf13 took some charge.

Alert the people on the list. The people with lots of contributions, try to find them via other channels as well -- dig up their Twitter, phone number etc. (it's not many).
For the people not responding, rewrite their code. Simple.

Here is the same list, but excluding Doc contributions:
+--------------------------+--------+---------+-------+--------------------+
| name                     | loc    | commits | files | distribution       |
+--------------------------+--------+---------+-------+--------------------+
| William McGann           | 13,973 | 1       | 27    | 33.5 / 0.1 / 14.1  |
| bep                      | 10,380 | 373     | 96    | 24.9 / 24.4 / 50.3 |
| spf13                    | 5,188  | 416     | 82    | 12.4 / 27.2 / 42.9 |
| Noah Campbell            | 2,694  | 109     | 38    | 6.5 / 7.1 / 19.9   |
| Anthony Fok              | 2,177  | 122     | 79    | 5.2 / 8.0 / 41.4   |
| Tatsushi Demachi         | 1,627  | 27      | 15    | 3.9 / 1.8 / 7.9    |
| Tibor Vass               | 913    | 1       | 12    | 2.2 / 0.1 / 6.3    |
| Cyrill Schumacher        | 636    | 14      | 5     | 1.5 / 0.9 / 2.6    |
| Owen Waller              | 630    | 12      | 4     | 1.5 / 0.8 / 2.1    |
| Joel Scoble              | 444    | 24      | 23    | 1.1 / 1.6 / 12.0   |
| Egon Elbre               | 315    | 8       | 20    | 0.8 / 0.5 / 10.5   |
| Nate Finch               | 314    | 18      | 9     | 0.8 / 1.2 / 4.7    |
| Derek Perkins            | 233    | 4       | 8     | 0.6 / 0.3 / 4.2    |
| Austin Ziegler           | 227    | 20      | 15    | 0.5 / 1.3 / 7.9    |
| Phil Pennock             | 218    | 5       | 7     | 0.5 / 0.3 / 3.7    |
| mattn                    | 211    | 1       | 4     | 0.5 / 0.1 / 2.1    |
| Vincent Batoufflet       | 157    | 11      | 10    | 0.4 / 0.7 / 5.2    |
| Ariejan de Vroom         | 148    | 6       | 3     | 0.4 / 0.4 / 1.6    |
| Naoya Inada              | 100    | 3       | 4     | 0.2 / 0.2 / 2.1    |
| Marek Stanley            | 93     | 1       | 2     | 0.2 / 0.1 / 1.0    |
| Jeff Hodges              | 77     | 3       | 4     | 0.2 / 0.2 / 2.1    |
| Takuya Wakisaka          | 76     | 2       | 3     | 0.2 / 0.1 / 1.6    |
| coderzh                  | 62     | 1       | 3     | 0.1 / 0.1 / 1.6    |
| Benny Wu                 | 54     | 2       | 2     | 0.1 / 0.1 / 1.0    |
| Marek Janda              | 54     | 1       | 2     | 0.1 / 0.1 / 1.0    |
| Dylan MacKenzie          | 50     | 1       | 3     | 0.1 / 0.1 / 1.6    |
| chrongzhang              | 43     | 1       | 6     | 0.1 / 0.1 / 3.1    |
| René Jochum              | 42     | 1       | 3     | 0.1 / 0.1 / 1.6    |
| Andrew Brampton          | 31     | 2       | 4     | 0.1 / 0.1 / 2.1    |
| Erlend Klakegg Bergheim  | 31     | 1       | 3     | 0.1 / 0.1 / 1.6    |
| Fabrizio (Misto) Milo    | 28     | 4       | 2     | 0.1 / 0.3 / 1.0    |
| Jonathan Anderson        | 27     | 5       | 4     | 0.1 / 0.3 / 2.1    |
| Rasmus Stougaard         | 21     | 4       | 1     | 0.1 / 0.3 / 0.5    |
| Ruben Vermeersch         | 20     | 2       | 1     | 0.0 / 0.1 / 0.5    |
| Mary Anthony             | 20     | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Scott C Wilson           | 20     | 8       | 4     | 0.0 / 0.5 / 2.1    |
| Ask Bjørn Hansen         | 19     | 10      | 5     | 0.0 / 0.7 / 2.6    |
| Russell Oliver           | 19     | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Ahsanul Haque            | 18     | 3       | 6     | 0.0 / 0.2 / 3.1    |
| Ruben                    | 18     | 5       | 3     | 0.0 / 0.3 / 1.6    |
| Juan B. Rodriguez        | 18     | 2       | 4     | 0.0 / 0.1 / 2.1    |
| Ross Lawley              | 17     | 6       | 3     | 0.0 / 0.4 / 1.6    |
| Mark Sanborn             | 16     | 2       | 2     | 0.0 / 0.1 / 1.0    |
| Dato Simó                | 15     | 4       | 3     | 0.0 / 0.3 / 1.6    |
| Jake Mitchell            | 15     | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Kartik Singhal           | 14     | 10      | 6     | 0.0 / 0.7 / 3.1    |
| Piotr Kowalczuk          | 13     | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Dan Hersam               | 11     | 5       | 3     | 0.0 / 0.3 / 1.6    |
| Ryan Martinsen           | 11     | 1       | 3     | 0.0 / 0.1 / 1.6    |
| David Calavera           | 9      | 2       | 2     | 0.0 / 0.1 / 1.0    |
| Chase Adams              | 8      | 3       | 1     | 0.0 / 0.2 / 0.5    |
| Dave Johnston            | 8      | 2       | 2     | 0.0 / 0.1 / 1.0    |
| Mike Keesey              | 8      | 1       | 5     | 0.0 / 0.1 / 2.6    |
| Ryan Clarke              | 8      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Liam Bowen               | 7      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Valere JEANTET           | 7      | 2       | 3     | 0.0 / 0.1 / 1.6    |
| Billie H. Cleek          | 7      | 2       | 1     | 0.0 / 0.1 / 0.5    |
| fundon                   | 7      | 1       | 2     | 0.0 / 0.1 / 1.0    |
| Jeffrey Tolar            | 6      | 2       | 2     | 0.0 / 0.1 / 1.0    |
| Tim Esselens             | 6      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Kristoffer Grönlund      | 6      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Henry                    | 6      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Lorenzo Bolla            | 5      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Yosuke INOUE             | 5      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Nicholas Whittier        | 5      | 2       | 2     | 0.0 / 0.1 / 1.0    |
| LK4D4                    | 4      | 1       | 2     | 0.0 / 0.1 / 1.0    |
| Artem Vorotnikov         | 4      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Joe Kopena               | 4      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Christoph Burgdorf       | 4      | 1       | 2     | 0.0 / 0.1 / 1.0    |
| Marc-Antoine Ruel        | 4      | 2       | 1     | 0.0 / 0.1 / 0.5    |
| Andrew Gerrand           | 3      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Raphael Estrada          | 3      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Dana H. P'Simer          | 3      | 1       | 2     | 0.0 / 0.1 / 1.0    |
| Marcelo Glezer           | 3      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Michael D. Johas Teener  | 2      | 2       | 1     | 0.0 / 0.1 / 0.5    |
| Nathan Youngman          | 2      | 2       | 2     | 0.0 / 0.1 / 1.0    |
| Kevin Burke              | 2      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Matt Way                 | 2      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Baptiste Mathus          | 2      | 2       | 1     | 0.0 / 0.1 / 0.5    |
| Brandon Black            | 2      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Caleb Spare              | 2      | 1       | 2     | 0.0 / 0.1 / 1.0    |
| digitalcraftsman         | 1      | 3       | 1     | 0.0 / 0.2 / 0.5    |
| Andrew Gallant           | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| LordFPL                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Franklin Wise            | 1      | 3       | 1     | 0.0 / 0.2 / 0.5    |
| Oscar Bolmsten           | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| delputnam                | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Rinat Abdullin           | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Vitaly Haritonsky        | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Danny Sung               | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Edward Vielmetti         | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Jacob Gillespie          | 1      | 4       | 1     | 0.0 / 0.3 / 0.5    |
| GuoJing                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Krisztián Szabó          | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Andre R                  | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Brian Payne              | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Icaro Seara              | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| tycho garen              | 1      | 9       | 1     | 0.0 / 0.6 / 0.5    |
| Mantas                   | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| The Gitter Badger        | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Andrew Carter            | 1      | 1       | 1     | 0.0 / 0.1 / 0.5    |
| Anton Ageev              | 1      | 2       | 1     | 0.0 / 0.1 / 0.5    |
| Valeri Karpov            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Alex Dunn                | 0      | 5       | 0     | 0.0 / 0.3 / 0.0    |
| Alexandre Normand        | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Andrew Codispoti         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Andrew Jones             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ant Zucaro               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Arian Allenson M. Valdez | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Arjen Schwarz            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Augustin Riedinger       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Aurelius Prochazka       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Austin Dizzy             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Benoit Benedetti         | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Bill Traynor             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Borys Borysenko          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Brandon Philips          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Bruno Calheira           | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Bruno Clermont           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Christopher Eliot        | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ciaran Downey            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Clam-                    | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Dan Connolly             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Dan Hatch                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Dana Woodman             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Daniel Alan Miller       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Daniel Fairhead          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Danillo Souza            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Danilo Cabello           | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Dave Cottlehuber         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Arroyo             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Gay                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| David Kebler             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Duncan Beevers           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Florian Baumann          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Francois Lanthier Nadeau | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gergely Imreh            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gina White               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Gour                     | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| GraemeCaldwell           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Greg Restall             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Hideo Hattori            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Hugh Grigg               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Hugo Duncan              | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Isaac Gregson            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Ivan Fraixedes           | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Jakub Turski             | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Javed Khan               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Jeff Ramnani             | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Jian Zhou                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Jorin Vogel              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Joseph Kaptur            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Justin Calleja           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Karim Ali                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kieran Healy             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kohei Yoshino            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Kyle Mahan               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Luke Holder              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Maarten Everts           | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Marc Liyanage            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Mario Sanchez Carrion    | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Maxime Michel            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Michael Diamond          | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Michael Henderson        | 0      | 5       | 0     | 0.0 / 0.3 / 0.0    |
| Michael Whatcott         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Mike Dillon              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nathan LeClaire          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nelson Silva             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nick Sabine              | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Niels Widger             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Nikolay Kirsh            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Nuno Antunes             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Peter Krautzberger       | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Rahul Bansal             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Richard Sumilang         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Rick Cogley              | 0      | 11      | 0     | 0.0 / 0.7 / 0.0    |
| Roberto Dip              | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Rolando Pereira          | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Ryan Kimber              | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Saint Asky               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Sam Debruyn              | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Samuel Lelièvre          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Sebastian Krause         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Sebastian Müller         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Spencer Lyon             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| Stephen Eglen            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Szymon Katra             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Tim Dumol                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Tim Heaney               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Tom Helmer Hansen        | 0      | 4       | 0     | 0.0 / 0.3 / 0.0    |
| Tomas Roos               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Abe Pazos                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| VonC                     | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| Wade Wegner              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Will Stevens             | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| William King             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Xin Fan                  | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Zach Chadwick            | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| complexsplit             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| elij                     | 0      | 5       | 0     | 0.0 / 0.3 / 0.0    |
| jesper-mortensen         | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| jlengstorf               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| kangkona                 | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| karland                  | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| ls6                      | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| mdhender                 | 0      | 4       | 0     | 0.0 / 0.3 / 0.0    |
| midinastasurazz          | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| ojan                     | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| philgs                   | 0      | 3       | 0     | 0.0 / 0.2 / 0.0    |
| quoha                    | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| rawfalafel               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| riboflavin               | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| rybi                     | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| sainaen                  | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| sergeant                 | 0      | 2       | 0     | 0.0 / 0.1 / 0.0    |
| tim                      | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| tummychow                | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| vsopvsop                 | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| windch                   | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Éli Marshal              | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
| Øyvind Skaar             | 0      | 1       | 0     | 0.0 / 0.1 / 0.0    |
+--------------------------+--------+---------+-------+--------------------+

Wouldn'd it be easier to accept future PR's from new contributors only if they've signed the contributor license agreement?

Hi, I've just been asked to sign the CLA, but I can't do so without my employer's permission. My employer reviewed it and they said it assigns away ownership, which my employer doesn't allow.
By making a contribution to this project, I grant Steve Francia all rights to contributions of ideas, code, documentation, or work provided to this project and I grant him the rights to release my contributions under the Apache 2 license and warrant that these contributions are free of the rightful claim of any third party and I have the right to submit it under the Apache 2 license.

They suggest instead the standard Apache CLA would be acceptable: https://www.apache.org/licenses/cla-corporate.txt

uh, yeah... when did that happen?  That's not a CLA (Contributor License Agreement), that's a Copyright Assignment, which is a full-on deal breaker for many corporations, and is completely unnecessary.

Will, can we switch license without assigning these rights? Or better question is what rights are needed to change licenses?
I don’t love the apache CLA but I do like http://developercertificate.org/ and plan on switching to it once the license is changed.
I believe neither the Apache or DCO permit changing licensing.
On October 18, 2015 at 3:28:58 PM, Will Norris (notifications@github.com) wrote:
uh, yeah... when did that happen? That's not a CLA (Contributor License Agreement), that's a Copyright Assignment, which is a full-on deal breaker for many corporations, and is completely unnecessary.
—
Reply to this email directly or view it on GitHub.

I was thinking that the Apache CLA did allow relicensing, but I'd have to double check.  But either way, a full copyright assignment is a non-starter.

I would certainly look at the Aapche Individual CLA:
https://www.apache.org/licenses/icla.txt
The difference between signing a CLA with the ASF and signing something with Steve is that the ASF's CLA notes "the Foundation shall not use Your Contributions in a way that
is contrary to the public benefit or inconsistent with its nonprofit
status and bylaws in effect at the time of the Contribution".  Since the CLA allows sublicensing, the recipient is covered, but the donor has to trust the recipient.  With the ASF, hopefully we have a long history of keeping our Apache license.
I agree copyright assignments are not good, but if you can get the community to think about this specific problem, all you need is for various authors to assign "enough" rights to the contributions already in this codebase to allow the primary author to relicense.  Personally, if I had been contributing, I'd be happy to give Steve my copyrights to specific changes here if it made things easier.  But again, personally, I'm waiting until it's under the Apache license before I contribute.  8-)
One actionable suggestion: it would be nice both to contributors and to users if this plan and the status of the licensing were more obvious on the front page of the project.

This should be fixed. I may have signed this CLA, but wasn't even considering it would "sign away my copyrights", but I allow you to relicense it.

As the person opening the issue I'll just state that switching to GPL 2 (or even worse GPL 3) would not fix "the main issue".

After a careful reading of the Apache CLA, it also has copyright assignment and assigns rights to the Apache Foundation. It does not permit for changing the license in the manner which we desire to for Hugo.
So as soon as we have sign off of all contributors with "active" contributions we will change the license to Apache 2.0 and change to using the DCO http://developercertificate.org as the CLA for the project.
I wrote a program to analyze all PRs and who has signed. Here is the output:
https://gist.github.com/spf13/fe97ded396faefff1ba9
I will reach out to everyone on this list and request they click the button to sign the current CLA. We will explore rewriting remaining code in a week. I currently don't examine this along with git blame so some contributions may not be current.
I'll update the Gist throughout the week.
The email to these contributions will read as follows.
X,
Thank you for your contributions to Hugo (http://gohugo.io). In order to facilitate an even more open community and additional contributions the Hugo team has decided to change the project to the Apache 2.0 license from the current license (SimPL-2.0). To change licenses requires approval from all contributors. The simplest way to do is to have everyone assign rights to their Hugo contributions to the project owner so we can change the license. Once we have released Hugo under the Apache 2.0 license we will change to project to utilize the DCO http://developercertificate.org as the CLA for the project.
To sign simply go to https://cla-assistant.io/spf13/hugo and click the button to agree to the CLA.

@bojako @zackp30 @danke-click @hagbarddenstore @rawfalafel @stevenshchin @rauhs @tummychow @jamesmcmahon
I wasn't able to find email addresses or any other contact information for you. Trying to notify you here. Please sign the CLA linked in the comment above.

Signed. Link above was broken, correct link is https://cla-assistant.io/spf13/hugo.

oh weird. It linked that oddly. Thanks @JamesMcMahon.

After a careful reading of the Apache CLA, it assigns rights to the Apache Foundation and does not permit for changing the license in the manner which we desire to for Hugo.

Lawyers in here may chime in, but why does the future CLA need to permit a license change?
What is needed, in my head, is:

The CLA for future contributions should be Apache (with no Copyright Assignment)
For the license change approvals from the contributors of the past: "Is it OK if we change the license of your and others' contributions ...? Yes or No?"

I apologize, I didn't word that very clearly.  Let me clarify and expand here.
Why DCO over Apache CLA?
After significant research I decided to go with the DCO for a few reasons:

It works in a general fashion (apache doesn't)
It assigns only the minimum rights needed to apply an open source license.
It requires the contributor to warrant that the code is clean in all the ways that protect the project.
It does this in the most succinct way possible without any extra fluff.

The DCO works well because it leverages the license that is applied for the terms rather than redefining them in the CLA itself. In this sense the DCO is the minimal way to ensure that the contribution adheres to the Apache 2.0 license.
In contrast the Apache CLA was designed for projects that the Apache foundation has ownership of. It assigns more rights directly to them and requires contributors to warrant and grant significantly more things. It is considerably and needlessly longer, duplicating much of the Apache 2.0 license in it's text. It's not intended for general use, but specifically for the Apache Foundation.
As for the current CLA/Waivers.
The Simpl 2.0 license doesn't permit for sub licensing. This means we can't just change the license... which is a good thing. It's one of the protections built into the license. The safest way to change the license from a legal perspective is for all rights to all contributions to be granted to a single copywriter holder who then can legally change the license. The current text also explicitly calls out that they grant him permission to change the license to Apache 2.0. This provides protection so nobody later can say that they don't agree with the license change and sue me personally as the one who made the change. They have in effect given up their rights to doing so when they signed the CLA. Now I don't think anyone would do that, but that's not the point. The point is that we need to do this the right way and do it once so that everyone in the future can feel comfortable that it's 100% clean.
Does this all make sense. I'm sorry we have to go through this. Looking back 3 years to when I released Hugo, virtually all of my personal experience with my own open source projects was scripting languages where the source and the running application were synonymous. As I looked to what the community used on complied projects for direction I found a significant amount used the GPL. It does provide more protection for contributors than the more open licenses like MIT, BSD and Apache. I pretty well hate legalese and liked the plain text rendering that the simpl 2.0 license provided.  Thanks to very helpful people I have seen the light and now realize that using a standard and pre-approved license will enable corporate employees to safely contribute without unnecessary friction with lawyers. After consulting with lawyers with expertise in open source licensing law (yes, those do exist), I determined that the Apache license was the best fit providing the best protection for the project and all those who contribute while remaining open enough to facilitate easy contributions.
I thank everyone for their understanding and support as we make this change. I know that the project will be even more successful in the future as a result.

The Simpl 2.0 license doesn't permit for sub licensing. This means we can't just change the license... which is a good thing. It's one of the protections built into the license.

No, but as this is a contractual thing, it is perfectly fine to just agree on the change of license.

The safest way to change the license from a legal perspective is for all rights to all contributions to be granted to a single copywriter holder who then can legally change the license.

I don't believe this to be correct, but it's your project, do as you please. I just wanted to say that I don't agree.

Allow our employees to sign a document assigning away "all rights to contributions of ideas, code, documentation, or work provided to this project"?

Providing a license to the contribution is one thing, but as I said earlier, a copyright assignment is a non-starter.

@willnorris Can you explain why this is an issue?  I understand it sounds scary, but isn't it specifically on contributions to the project, and exists in a ton of CLAs for (it is my understand) worldwide distribution reasons.
I am legitimately trying to understand the practical implications of this.

This is not at all common in CLAs.  In fact, it couldn't accurately even be called a Contributor License Agreement at this point, it's a Copyright Assignment.  The most notable group that does copyright assignment is the FSF, and they do it largely so that they can actively go after violators of the GPL.
A standard CLA gives the project a non-exclusive right to use the contribution under the terms of the agreement.  So the contributor is still the owner of the code, and they are still free to use it however they want, even in ways that are otherwise incongruous the license of the the project they contributed it to.  For example, I could submit a patch to a GPL licensed project, and then later submit the same patch to an MIT license project.  Or do anything else I want to with it... it's my code.
If however, I assign that copyright to someone else, then I no longer have any rights to use my own code except as defined by the license of the project.  In some cases, that might not be a big deal, but it's not something we would do without a really good reason.  (For what it's worth, Google has signed FSF's copyright assignment.)

https://cla-assistant.io/spf13/hugo has the additional problem that it is not only a copyright assignment, but could be read to include both a patent and trademark assignment (the "all rights to contributions of ideas, code, documentation, or work provided to this project" language that I mentioned above).
The FSF copyright assignment language is very specific about calling out that patents are licensed, not assigned:

I hereby agree that if I have or acquire hereafter any patent or interface copyright or other intellectual property interest dominating the program enhanced by the Work (or use of that program), such dominating interest will not be used to undermine the effect of this assignment, i.e. the Foundation and the general public will be licensed to use, in that program and its derivative works, without royalty or limitation, the subject matter of the dominating interest.  This license provision will be binding on my heirs, assignees, or other successors to the dominating interest, as well as on me.

See also the Legal Matters chapter from Producing OSS that goes into further detail.

@willnorris Would copyright license make everything acceptable -- or is that still an issue?

yes, depending on the actual language of the agreement, a copyright license would be fine, which is exactly what we do for our own projects.
I'm fairly certain that our lawyers believe the Apache CLA to include the ability to relicense, but I'd have to double check that.  If that's a concern, then add language that explicitly grants the right to relicense as Apache 2.0, similar to what https://cla-assistant.io/spf13/hugo currently has.  Or execute a separate agreement that just grants the right to relicense for all SimPL contributors, and then use the DCO going forward, which I think was Steve's preference.

There, I've signed it. I can be reached at hagbarddenstore@gmail.com.

I grant Steve Francia all rights to contributions of ideas, code, documentation
Sorry, but nope. I'd agree if you simply wanted to change the license. But my contributions remain mine.

Just to make thins crystal clear if I haven't already: I don't agree with the mentioned CLA, so any relicensing using this CLA will have to be without my contributions.
I'm happy to license, but with an adjusted CLA as discussed above.

I'm working on a revised CLA based on feedback here and have asked @willnorris for help ensuring it's acceptable. Thanks for your patience on this.

I might as well put this one into the open as well: I have read @spf13 s new revised CLA, and it addresses my concerns to the point. Happy to sign it. Then we can get this damn Hugo 1.5 out the door.

@bep I've updated the CLA to a friendlier one.

That's a good change Steve. What does this mean for people that have perviously signed the CLA?

If you've already signed, you're covered legally with the switch we're about to do. People are welcome to sign this one if they want. It's very short lived though, and will be replaced by the standard DCO as soon as Hugo 0.15 (under Apache) is released.

New CLA text looks good.  Thanks @spf13!

Thanks for the help @willnorris

Thanks @willnorris, @spf13, and others. I have now signed.

Signed, sealed -- now deliver Hugo 0.15!

All current contributors have signed the CLA. I have changed the license over to Apache 2.0 and switched the CLA over to the DCO. It is finished.

authors: JamesMcMahon Nuc1eoN ShaneCurcuru abh anthonyfok bep bjornerik bramp digitalcraftsman hagbarddenstore k4rtik lotrfan rahul286 robertmeta skybon spf13 willnorris


text:
Google Analytics Async not working

When I use this:
{{ template "_internal/google_analytics_async.html" . }}
when I generate the site I get this error:
ERROR: 2016/06/05 html/template:theme/partials/footer.html:27:16: no such template "_internal/google_analytics_async.html" in theme/partials/footer.html
Where as if I use the non-async Google Analytics option, it works fine as shown below:
{{ template "_internal/google_analytics.html" . }}
Instructions for the above steps is from here:
https://gohugo.io/extras/analytics/

Hello @vguhesan,
the async version was accidently documented as it was part of the dev version.
A few hours ago we released a new version of Hugo that actually ships this template. Just upgrade to the latest version.
Happy Hugoing,
Digitalcraftsman

source: gharchive/issue

authors: digitalcraftsman vguhesan

license_type: permissive

license_source: github-api


text:
Add check-vendor target to Makefile

The check-vendor target will exit with an error if any files in vendor/
differ from what's checked into git.
govendor checksums can get out of sync if extraneous files are in the
local, third-party repo (see kardianos/govendor#129).  govendor also
updates the vendor.json upon "sync."  We can use that quirk to detect
out of sync checksums in CI, so I've added check-vendor to the check
target dependencies.

The vendor file is currently out of sync, so I expect CI to fail.

@moorereason I merged this, but then removed it from make check. I could not get the build to succeed, so I suspect there are some flaw(s) in the script.

source: gharchive/pull-request

authors: bep moorereason


text:
MaterialDesignThemes.WPF 5.0.0

Hi,
Is there any further dev to support coming soon v5 of MaterialDesignThemes.WPF?
Testing prereleases reveals issue loading themes.
System.Windows.Markup.XamlParseException: 'Set property 'System.Windows.Setter.Property' threw an exception.' ArgumentNullException: Value cannot be null. (Parameter 'property')
Regards,

Having similar issues with Alert / Confirmation Boxes being out of Sync with MaterialDesignThemes.WPF 5.0.0
Wonder if there is any progress with this.

I started the migration recently

Hello, how is it going with the update to MaterialDesignThemes v5+?

Any news on the update?

Accidentally posted a duplicate of this (https://github.com/spiegelp/MaterialDesignExtensions/issues/191), specifically for incompatibility with the stepper controls. The stepper themes appear to be broken by a single line error in the template. Hope this project isn't dead.

authors: AngelSaldana CalebBe-2253 NormskiJJO blahetal charleslales spiegelp

repo: spiegelp/MaterialDesignExtensions

license: MIT


text:
Web/HTML version of Warefare Incorporated?

What an excellent project. Is there open source codes for the Web/HTML version of Warefare Incorporated?
Also, the https://play.warfareincorporated.com/ does not work at the moment.

Additionally the account creation/restore services no longer are reachable, all users must currently play as "anon"
If hosting is needed for the multiplayer services, please drop me a DM, I can offer to step in if its a time/resources issue.

I was looking for the web version also

authors: Digital-Toxin Mistik knyipab

repo: spiffcode/hostile-takeover

license_source: bigquery


text:
Convert notebook to jupyter books with outputs and host on GitHub pages

Notebooks visible at: https://spinal-cord-7t.github.io/coil-qc-code
Fixes https://github.com/spinal-cord-7t/coil-qc-code/issues/126

Hum... I'm trying to re-run the GHA to use the latest notebook available on the main branch, but the built JB on GH page is still the same. It's probably something very simple, @mathieuboudreau can you let me know how to do it? Thank you

Hum... I'm trying to re-run the GHA to use the latest notebook available on the main branch, but the built JB on GH page is still the same. It's probably something very simple, @mathieuboudreau can you let me know how to do it? Thank you

ah, maybe this is because there was an error in execution:
https://github.com/spinal-cord-7t/coil-qc-code/actions/runs/11630302881/job/32446074770?pr=152#step:8:43

Hum... I'm trying to re-run the GHA to use the latest notebook available on the main branch, but the built JB on GH page is still the same. It's probably something very simple, @mathieuboudreau can you let me know how to do it? Thank you

ah, maybe this is because there was an error in execution:
https://github.com/spinal-cord-7t/coil-qc-code/actions/runs/11630302881/job/32446074770?pr=152#step:8:43

No, its because i changed the build mode in such a way that only builds from my branch would get hosted on the gh-pages (otherwise while testing it for you, any pushes by you would have “replaced” mine and be a pain). I’ll start a Pr now so that master starts using my current jupiter book builds - sorry for the confusion

Ahh haha i just saw that this was the PR you made for that purpose, woops.  Let me check if ur hunch was correct instead

@jcohenadad the builds are only building my current branch, not the "merged" state, and my branch's notebooks haven't been updated since I first created it, i.e. the reason the built JB are showing the old notebooks is because only the old notebooks are in my branch.
If/when you merged this PR, the next main branch build should build the latest version of that notebook that's currently in master. If you'd rather test it through my branch first, we could copy the latest notebooks to my branch first and see the build there before merging

the reason the built JB are showing the old notebooks is because only the old notebooks are in my branch.

ah! that explains it. So me relaunching the GHA is useless then 😅

If/when you merged this PR, the next main branch build should build the latest version of that notebook that's currently in master. If you'd rather test it through my branch first, we could copy the latest notebooks to my branch first and see the build there before merging

at this point (ie ismrm deadline in 3d, with Eva needing to get the figure by tmr ideally) i would go with the simplest approach -- so i guess we should merge then?

i would go with the simplest approach -- so i guess we should merge then?

Yep, no merge conflicts, I didn't touch the notebooks besides adding tags, so merging!

Build initiated, here's the one to keep an eye one: https://github.com/spinal-cord-7t/coil-qc-code/actions/runs/11655795073/job/32450980690

authors: jcohenadad mathieuboudreau


text:
Add Dockerfile.

新增 Dockerfile
使用之前需要到 https://hub.docker.com/ 建立帳號與使用 Add Repository > Automated Build，這樣才可以執行 docker pull amo/Echo 下載 image。
github 這裡也要設定 webhook，讓每次更新都會自動 build 新的 image.
相關操作說明：https://docs.docker.com/docker-hub/builds/

thanks, bro!

@spitfire-sidra 感謝大大！

authors: spitfire-sidra toomore

repo: spitfire-sidra/echo

license: mit


text:
Not Support for Flutter Web

It is not working for Flutter web.
You're seeking assistance with integrating Split.io into Flutter web and desktop applications. This includes resolving any issues related to Split.io's functionality on these platforms and ensuring that Split.io works as intended across different Flutter targets, including web and desktop.

We'd like this functionality too please

Please add support for web too please

We would like this feature as well

authors: KingUgochukwu Milanp24 OliverNarramore maplepam

repo: splitio/flutter-sdk-plugin


text:
Fix: receive v1 traps

Description
Fix adding communities for traps with v1.
Fixes # (issue)
Type of change
Please delete options that are not relevant.

[x] Bug fix

How Has This Been Tested?
unit, manual, integration
Checklist

[x] My commit message is conventional
[x] I have run pre-commit on all files before creating the PR
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[x] I have checked my code and corrected any misspellings

:tada: This PR is included in version 1.12.1-beta.9 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

authors: ajasnosz srv-rr-github-token

repo: splunk/splunk-connect-for-snmp


text:
"Multiple projects in a single Git repository" link incorrect

Hi, there is a link to "Multiple projects in a single Git repository" in Platform and tools: a kitbag for our journey

But the link is currently linking to http://dev.splunk.com/16107783.html , which is not exist anymore.
Should the link be nav to there(on the same page)?

Thanks.

Thanks for pointing those out! We'll get them fixed soon.

We just pushed an update, this should be fixed.

Cool, it works! Closing.

authors: EcutDavid tdhellmann

repo: splunk/splunk-ref-pas-code


text:
Visualization

Hello, and thank you for open-sourcing your work. It has been incredibly helpful and timely in addressing my urgent needs. However, I have a question: how can I obtain and visualize the point cloud data after removing snow?
Thank you for your assistance.

Hi,
Thanks for your message. You need to slice the point cloud where prediction is not snow. You need to use any visualization tool  or library like pptk or open3d for visualization.  I will be travelling till 6th October. I will come back to you with details after 6th October. If I forget, please send me a message.

Hi, Thanks for your message. You need to slice the point cloud where prediction is not snow. You need to use any visualization tool or library like pptk or open3d for visualization. I will be travelling till 6th October. I will come back to you with details after 6th October. If I forget, please send me a message.

Thanks for your work! If now the possible time for sharing something about visualization?

authors: Akina2001 ZhdsGithub sporsho


text:
README: Remove monthly downloads badge

Description
README: Remove monthly downloads badge
Motivation and Context
The fact that there's only 4 downloads per month is not something we can really brag about. Let's just remove this bag. A historic note is that at some point that number fell from the tens of thousands downloads per month to just a handful. I suppose pypi fixed a bug on their side.

i think pypi stopped publishing those numbers a while ago, not sure why it's showing 4 though

authors: Tarrasch erikbern

repo: spotify/luigi


text:
Default values should not be mutable.

It is a kind of popular gotcha in python. Just to avoid incidents
it is a good idea to not use mutable objects as default values.

Can you link to some blog post or something explaining why it's a bad python practice to have mutable objects as default values?

@Tarrasch, http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument
I tried to find a logic where you expect to share override_default default instance across invocations but could not find anything like that. So I assumed it is better fix this way. Am I wrong?

Cool!

No. I think you're doing the right thing! :)

okidoki!

authors: Tarrasch themalkolm


text:
Config file same key overriding order/precedence bug

Describe the bug
Library versions

Spring Boot 2.7.1
Spring Cloud 2021.0.3
Spring Cloud Config 3.1.3 (managed)

Issue
I have a minimal Spring Cloud Config setup with Git backend using a GitHub public repo.
I deliberately put properties of the same keys in multiple config files to test the behavior of Spring Cloud Config in resolving config values.
These are the types of my config files:

application.yaml
{spring.application.name}.yaml
application-{profile}.yaml
{spring.application.name}-{profile}.yaml

My expectation is, values in profile-specific files should override values in files of the default profile.
The overriding order should be "similar" to the order of the above ordered list, so if the exact same property key exists in all 4 files, the final value should come from the last one (the 4th list item).
However, the actual result is as follows:

application-{profile}.yaml
{spring.application.name}-{profile}.yaml
application.yaml
{spring.application.name}.yaml

From the Spring Cloud Config official doc, it says:

If there are profile-specific YAML (or properties) files, these are also applied with higher precedence than the defaults. Higher precedence translates to a PropertySource listed earlier in the Environment. (These same rules apply in a standalone Spring Boot application.)

Reference: https://docs.spring.io/spring-cloud-config/docs/3.1.3/reference/html/
As it says the behavior should be the same as standalone Spring Boot, the Spring Boot official doc says:

Config data files are considered in the following order:

Application properties packaged inside your jar (application.properties and YAML variants).
Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants).
Application properties outside of your packaged jar (application.properties and YAML variants).
Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants).

Reference: https://docs.spring.io/spring-boot/docs/2.7.1/reference/htmlsingle/#features.external-config
From my testing with config files within the Spring Cloud Config Client application (under src/main/resources), it works fine and this is the overriding order:

application.yaml
application-{profile}.yaml

The value comes from the 2nd file.

Sample
Project source code and config files can be found in my public Git repos:

Config server - spring-cloud-config-server-demo-git-public
Config client - spring-cloud-config-client-demo-public
Config files - spring-cloud-config-demo-public

Test command and environment
The command for starting the 2 projects in local:
mvn spring-boot:run

Results of Maven version command (mvn -v):
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: C:\maven
Java version: 11.0.17, vendor: Azul Systems, Inc., runtime: C:\zulu11
Default locale: en_US, platform encoding: MS950
OS name: "windows 11", version: "10.0", arch: "amd64", family: "windows"

Explanation of the code
It is a minimal Spring Cloud Config setup with Git backend using a GitHub public repo. I have 4 config files that are named with the aforementioned naming conventions.
The active Spring profile is dev only.
Test config properties:

my.prop is for manual testing, by removing the greatest value one by one, I am able to find out the order of config overriding in Spring Cloud Config. Current output value should be 4 which comes from the application config file of the default profile (spring-cloud-config-client-demo.yaml).
my.prop2 is for proving that the overriding order in config files within the project code are working fine. Current output value should be 2.
order-test.* is for proving this bug. There are 4 properties in total. Values are simply the name of the config files and these files have 1~4 properties, so we can tell which files "win" in overriding. If you run the config client application, you will see from the log that all 4 properties have unique values and thus the aforementioned order is the only possible order. The class ConfigFileLoadOrderTestConfig.java contains Hiberate Validator annotations to validate the config values automatically. Error will be thrown if values do not match and the application will terminate.

Log
(I added newlines below for readability)
order-test object: ConfigFileLoadOrderTestConfig(
loadOrder01=application-dev.yaml,
loadOrder02=spring-cloud-config-client-demo-dev.yaml,
loadOrder03=application.yaml,
loadOrder04=spring-cloud-config-client-demo.yaml
)

my.prop: 4
my.prop2: 2

My thought
The official documentation isn't very clear as it lacks examples. Perhaps my understanding of "higher precedence" is wrong but apparently the behavior in Spring Cloud Config (at least the Git implementation) does not match the behavior of reading config files within src/main/resources in the project.
If A has a "higher precedence" than B, then I will expect that A gets applied but not B. In other words, A "wins".
Last but not least, if this is a known issue in some old versions of Spring, please provide the corresponding issue details and let me know the status of fix.
If you are also facing this issue or think that my issue is valid, I'd appreciate if you could provide quick feedback with👍 or ❤ on this issue post.
Thanks a lot everyone and have a wonderful year ahead!

Your sample client app has some issues, you are using bootstrap to load properties as well as spring.config.import.  You should choose one or the other and not use both.
When I hit the config server it returns the properties sources in the right order
{
   "name":"spring-cloud-config-client-demo",
   "profiles":[
      "dev"
   ],
   "label":"master",
   "version":"38c671c28d05a41d775365acf199c67515f6a56f",
   "state":null,
   "propertySources":[
      {
         "name":"https://github.com/blackr1234/spring-cloud-config-demo-public.git/spring-cloud-config-client-demo-dev.yaml",
         "source":{
            "my.prop":2,
            "order-test.load-order-02":"spring-cloud-config-client-demo-dev.yaml",
            "order-test.load-order-03":"spring-cloud-config-client-demo-dev.yaml",
            "order-test.load-order-04":"spring-cloud-config-client-demo-dev.yaml"
         }
      },
      {
         "name":"https://github.com/blackr1234/spring-cloud-config-demo-public.git/application-dev.yaml",
         "source":{
            "my.prop":1,
            "order-test.load-order-01":"application-dev.yaml",
            "order-test.load-order-02":"application-dev.yaml",
            "order-test.load-order-03":"application-dev.yaml",
            "order-test.load-order-04":"application-dev.yaml"
         }
      },
      {
         "name":"https://github.com/blackr1234/spring-cloud-config-demo-public.git/spring-cloud-config-client-demo.yaml",
         "source":{
            "my.prop":4,
            "order-test.load-order-04":"spring-cloud-config-client-demo.yaml"
         }
      },
      {
         "name":"https://github.com/blackr1234/spring-cloud-config-demo-public.git/application.yaml",
         "source":{
            "my.prop":3,
            "order-test.load-order-03":"application.yaml",
            "order-test.load-order-04":"application.yaml"
         }
      }
   ]
}

Once you fix the client I think that will clear things up

Thanks @ryanjbaxter for the resolution. It works by removing the spring.config.import property in the config client! 👍❤
I have created a new Git branch, namely fixed-1, in all my repos with the fix and this branch passes my testing.
The overriding order now becomes what I stated at the very beginning of my issue post, i.e.:

application.yaml
{spring.application.name}.yaml
application-{profile}.yaml
{spring.application.name}-{profile}.yaml

The results look good to me until I switch to the JDBC backend. The same test doesn't pass. 😓❌
So I have converted the YAML config properties into SQL statements and let Spring automatically initialize everything in an in-memory H2 database (src/main/resources/data-h2.sql).
By calling the /{spring.application.name}/{profile} endpoint of the config server like what you did in your reply, I find that the order of the property sources does not look right.
Below is what I get from /spring-cloud-config-client-demo/dev:
{
  "name": "spring-cloud-config-client-demo",
  "profiles": [
    "dev"
  ],
  "label": null,
  "version": null,
  "state": null,
  "propertySources": [
    {
      "name": "spring-cloud-config-client-demo-dev",
      "source": {
        "my.prop": "4",
        "order-test.load-order-04": "spring-cloud-config-client-demo-dev.yaml"
      }
    },
    {
      "name": "spring-cloud-config-client-demo-default",
      "source": {
        "my.prop": "2",
        "order-test.load-order-02": "spring-cloud-config-client-demo.yaml",
        "order-test.load-order-03": "spring-cloud-config-client-demo.yaml",
        "order-test.load-order-04": "spring-cloud-config-client-demo.yaml"
      }
    },
    {
      "name": "application-dev",
      "source": {
        "my.prop": "3",
        "order-test.load-order-03": "application-dev.yaml",
        "order-test.load-order-04": "application-dev.yaml"
      }
    },
    {
      "name": "application-default",
      "source": {
        "my.prop": "1",
        "order-test.load-order-01": "application.yaml",
        "order-test.load-order-02": "application.yaml",
        "order-test.load-order-03": "application.yaml",
        "order-test.load-order-04": "application.yaml"
      }
    }
  ]
}

When I run the config client application, it terminates with below error:
Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'order-test' to code.ConfigFileLoadOrderTestConfig$$EnhancerBySpringCGLIB$$26519f5a failed:

    Property: order-test.loadOrder03
    Value: spring-cloud-config-client-demo.yaml
    Origin: "order-test.load-order-03" from property source "bootstrapProperties-spring-cloud-config-client-demo-default"
    Reason: must match "^application-dev.yaml$"

It's because the overriding order becomes like this with JDBC backend:

application.yaml
application-{profile}.yaml
{spring.application.name}.yaml
{spring.application.name}-{profile}.yaml

Here is all the source code in my public GitHub repos:

Config server (JDBC) - spring-cloud-config-server-demo-jdbc
Config client - spring-cloud-config-client-demo
Config files
Config server (Git) - spring-cloud-config-server-demo-git

Sorry I misclicked the "Close with comment" button.
Please let me know if I should raise another bug ticket as the issue is now related to the JDBC backend implementation.
Thanks a lot.

The involved code of the Spring Cloud Config JDBC implementation:
https://github.com/spring-cloud/spring-cloud-config/blob/v3.1.3/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java#L112
Perhaps the 2 for loops should be swapped.

@blackr1234 you are right about it. I just checked JdbcEnvironmentRepositoryTests.java and the test code shows as you described.
@ryanjbaxter it looks like the incorrect config order has existed for years. Changes will break existing projects. Which branch should we commit to?

Its a bug so yes the changes will break people but its fixing a bug that shouldn't have been there in the first place.  The fix should go against the 3.1.x branch.
Can you point me at the test you were looking at specifically?

https://github.com/spring-cloud/spring-cloud-config/blob/c43fdc770f2fcc8e0a1bdce2124ee5b02fca4c23/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepositoryTests.java#L64
the basicProperties test and other tests all have similar asserts:
assertThat(env.getPropertySources().get(0).getName()).isEqualTo("foo-bar"); // {spring.application.name}-{profile}
assertThat(env.getPropertySources().get(0).getSource().get("a.b.c")).isEqualTo("foo-bar");
assertThat(env.getPropertySources().get(1).getName()).isEqualTo("foo"); // {spring.application.name}
assertThat(env.getPropertySources().get(1).getSource().get("a.b.c")).isEqualTo("foo-null");
assertThat(env.getPropertySources().get(2).getName()).isEqualTo("application-bar"); // application-{profile}
assertThat(env.getPropertySources().get(2).getSource().get("a.b.c")).isEqualTo("application-bar");
assertThat(env.getPropertySources().get(3).getName()).isEqualTo("application"); // application
assertThat(env.getPropertySources().get(3).getSource().get("a.b.c")).isEqualTo("application-null");

the getPropertySources() returns a List and these tests are expecting config order as follow:

{spring.application.name}-{profile}
{spring.application.name}
application-{profile}
application

this order does differ from the Git backend.

I'm not sure I understand, that seems like the correct order to me, the first one has the highest precedence.

@blackr1234  When I start your sample server that uses JDBC the property sources returned look to be exactly the same as Git
{
   "name":"spring-cloud-config-client-demo",
   "profiles":[
      "dev"
   ],
   "label":"master",
   "version":null,
   "state":null,
   "propertySources":[
      {
         "name":"spring-cloud-config-client-demo-dev",
         "source":{
            "my.prop":"4",
            "order-test.load-order-04":"spring-cloud-config-client-demo-dev.yaml"
         }
      },
      {
         "name":"spring-cloud-config-client-demo-default",
         "source":{
            "my.prop":"2",
            "order-test.load-order-02":"spring-cloud-config-client-demo.yaml",
            "order-test.load-order-03":"spring-cloud-config-client-demo.yaml",
            "order-test.load-order-04":"spring-cloud-config-client-demo.yaml"
         }
      },
      {
         "name":"application-dev",
         "source":{
            "my.prop":"3",
            "order-test.load-order-03":"application-dev.yaml",
            "order-test.load-order-04":"application-dev.yaml"
         }
      },
      {
         "name":"application-default",
         "source":{
            "my.prop":"1",
            "order-test.load-order-01":"application.yaml",
            "order-test.load-order-02":"application.yaml",
            "order-test.load-order-03":"application.yaml",
            "order-test.load-order-04":"application.yaml"
         }
      }
   ]
}

@ryanjbaxter
If you compare the JSON response you posted (which is same as mine) with your very first comment in the entire issue conversation, you could clearly see that the 2nd and the 3rd items are swapped.
Expected (Spring Boot doc, Git backend):

spring-cloud-config-client-demo-dev.yaml
application-dev.yaml
spring-cloud-config-client-demo.yaml
application.yaml

Actual (JDBC backend):

spring-cloud-config-client-demo-dev.yaml
spring-cloud-config-client-demo.yaml
application-dev.yaml
application.yaml

The Git backend uses following order:

{spring.application.name}-{profile}
application-{profile}
{spring.application.name}
application

The JDBC backend uses:

{spring.application.name}-{profile}
{spring.application.name}
application-{profile}
application

I don't know which one is right. I prefer to consider the Git backend has the right order so we can minimal the impact to existing projects.

Yup you are right, IDK what I was looking at yesterday, sorry

authors: blackr1234 ryanjbaxter woshikid

repo: spring-cloud/spring-cloud-config