Hey all,

We recently released 1.0 for the core libraries, so now it's a good time
to review how we worked in the past, draw conclusions and hopefully also
improve our work-flow. When using the word "patches" in the following mail I
also mean commits done by developers with commit access (when that applies).

Although we obviously get things done and get them good, there are a
couple of major flaws in the way we currently work:
1. Only very few people review and apply patches.
2. Because of #1 some people review and apply patches to code they don't
manage/know well which is bad.
3. Patches often contain whitespace/coding style errors.
4. Patches often introduce new compilation warnings.
5. Patch reviewing is very hard because there are many patches but the
guidelines aren't well known/enforced.
6. SVN gets broken on a weekly basis.
7. SVN log messages are just awful and it's impossible to search through
the logs.
8. Patches usually don't contain a good change summary and seldom
contain a nice svn log message that the reviewer can just use.
9. Patches are usually too big to review.
10. Patches often don't include docs/changelog.
11. Patches often include unrelated changes - especially formatting and
logic changes.

As mike_m nicely put it, "there are many more submitters than
committers" thus the only sane way to handle patches is let the
submitters do more and thus the committers do less. I want to be able to
open an email containing a patch, read a nice summary about what the patch
does, go through the patch, compile and check that everything works and
that there are no additional warnings (with the default configure flags)
and then just copy and paste the log message (with credit to the submitter
already provided in there).
If the patch is not up to par (i.e fails any of the stages above), just
reply to the submitter with a "sorry, your patch does not comply to our
patch standards please fix a, b and c and resend it. Thank you." instead
of the current way of trying to figure out and fix a patch for hours and
then apply it without saying anything. You can't expect our submitters to
follow rules we aren't willing to enforce, or at least point out. We
should make it more annoying for submitters (also developers with access)
to send broken patches than sending correct and clean patches, and the way
to achieve that is sending them back to the drawing board.

Using good log messages in SVN is not hard, you just need to explain in a
couple of lines exactly what you did and in a way that will be easy to
understand by other people, even not developers that want to go through
the logs and figure out what have changed and what commit they think
introduced the bug they stumbled upon. I suggest using the following
template:
"Lib/app module: Short summary.
Long summary."

For example:

"Evas font-engine: Fixed a bug in the query_size function.
The old query_size function didn't take kerning into account."

This is very easy to write, takes <10 seconds and you get a very nice
svn log in return.


People can also help review patches in code they don't know, it's fast
and easy and can take out a lot of the load from the other devs. You
don't even need to be a developer to see someone didn't follow the
guidelines, and denying such patches will mean the maintainer won't
have to read through them which in turn means you saved everyone work.
Spanking each other is easy and will benefit everyone. If you know
the code and have commit access, that's even better, just review
and commit. If you are unsure, send an email and say why, this will
make sure other reviewers who better know the code will surely notice
the issues you have already spotted. All of those take seconds when
split among all the members in the e-devel ML but take minutes/hours
when there's only one reviewer.


We should also make it very clear that we will not accept any patches
that introduce new compilation warnings (with default configure options
and -Wall -Wextra turned on or some other warning flags we decide). Code
that doesn't follow the conventions will also be denied, same goes for
the svn log or any other violation I pointed out above. Also, patches
should be clean and split to small manageable pieces (with each having
it's own svn log message and summary). It's ok to say "no way I'm going
to review this patch, it's too long and messy, REWRITE!", don't be
afraid to do so. In some cases huge patches are ok (I guess) but those
who send them will really have to convince you this is one of those
cases. Furthermore we should not allow mixing of unrelated changes in
the same patch.

I think the fewer the committers the better, but I don't think that will
work well in e, at least not in the near future. But we do kinda know
who maintains things, for example, I maintain the textie stuff and
discomfitor maintains eeze, cedric maintains many parts of edje, raster
maintains everything that doesn't have a specific maintainer and etc. I
don't think anyone should commit text changes without at least letting
me know about it before, nor will I commit stuff into edje before
getting them approved by cedric (for example, I sent my recent edje
changes to him to review before I committed them). This can either be
enforced by an svn hook, or by public spanking.

I talked to raster about it, and he's ok with accepting GIT patches, and
since many of the contributors/developers use git-svn, they can use git
send-email to easily send patches that already include the changelog.
People who don't use git-svn can just use 'patch -p1' to apply them and
just take the changelog out of them. Either way, it's easier for
everyone.

In conclusion, I think we should just enforce the guidelines I suggested
above. I don't mind being the "bad-man" and just revert people's commits
if they behave badly and don't follow the guidelines or deny patches in
the ML. Just to make sure you understand, those guidelines apply on
*both* people with commit access and people without.

What do you guys think?

--
Tom.




------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to