Notes for DLang maintainers
Vladimir Panteleev via Digitalmars-d
digitalmars-d at puremagic.com
Tue Feb 28 08:45:31 PST 2017
On Tuesday, 28 February 2017 at 15:49:56 UTC, Andrei Alexandrescu
wrote:
> There can be any amount of discussion about this, to no
> conclusive results, and any argument may be responded with "I
> don't buy that". That's simply because, again, there's some
> subjective factor and there is no perfect approach that proves
> the others wrong. To wit, I have stated my argument several
> times in public and private but somehow it did not count.
Apologies if I have forgotten about any important arguments from
past discussions; however, I can't recall any substantial ones
that would settle this argument.
> Also, obviously the Internet can be used to find support for
> anything, and with that caveat allow me:
>
> * "Why does every serious Github repo I do pull requests for
> want me to squash my commits into a single commit?"
> http://softwareengineering.stackexchange.com/questions/263164/why-squash-git-commits-for-pull-requests
The top answer advocates not squashing the commits when it
doesn't make sense to.
> * "I’ve been contributing to more projects in which it is
> expected that I should submit a pull request that contains a
> single commit."
> http://ndlib.github.io/practices/one-commit-per-pull-request/
This article was brought up here before, with a similar debate.
> * "Squashing your branch's changes into one commit is "good
> form" and helps the person merging your request to see
> everything that is going on."
> https://github.com/projecthydra/hydra-head/blob/master/CONTRIBUTING.md
Only suggests considering whether squashing is appropriate. Links
to the previous article.
> * "But one thing occasionally bothers me, and that's pull
> requests that come loaded with several temporary commits. I
> often find myself asking contributors to squash those into a
> single descriptive commit."
> http://eli.thegreenplace.net/2014/02/19/squashing-github-pull-requests-into-a-single-commit
Mentions that the steps are for dealing with "temporary commits".
Does not advocate one style over the other.
Perhaps there is some misunderstanding on what the point of
disagreement is?
- Splitting changes across multiple pull requests is a point
orthogonal to this one. I do wish we would adopt a workflow where
larger pull requests are acceptable as long as the changes are
properly divided into commits, as I believe it would be overall
more productive; however, this is not what this thread is about.
- Squashing temporary commits is always good. We are both in
agreement here.
- What we seem to disagree on is whether commits should be
squashed in other cases. You argue that if a pull request
contains enough changes that they could be split across several
commits, they should be split across several pull requests. I am
not contesting this argument (at least in this discussion).
However, you also seem to say that pull requests containing
enough changes that they could be split across several commits
should be squashed into a single commit before merging, which is
what I can't comprehend.
To reiterate, squashing commits that do not need to be squashed
destroys information (commit messages and separation of changes)
and makes bisecting, blaming and generally examining git history
more difficult. Squashing discourages splitting changes into
granular commits (even smaller than would make sense for a PR),
and documenting each in part. Writing detailed commit messages is
really important - not only does it provide additional context to
people not familiar with the code base in question, it also
forces the author to review their justification for the changes
and consider alternative solutions.
What does squashing achieve, on the practical front?
> Vladimir, I am gathering that this makes you unhappy and are
> close to getting ultimative about this.
What I'm unhappy about is that waste so much time arguing about
things that seem to have an obvious correct answer, and when I
ask for rationales for your decisions, I get huge replies about
politics and what Facebook does and how these discussions don't
scale and zero practical arguments to support your point. This is
a systematic problem and has happened several times before.
Where are the practical arguments?
Closest thing is link number 2. Quoting:
> For pull requests, a single commit is easier to inspect,
> critique, and discuss. By creating a single commit, I am saying
> “This is a logical unit of work” for the project. I can explain
> what and why these changes are made - developer documentation
> if you will. At a future date, for other contributors, it is
> easier to get a context for a small change in one file if that
> change tracks to a larger unit of work.
Exactly the same arguments apply to each commit in a commit
series which should not be squashed.
Where is the rationale for squashing self-contained commits with
well-written commit messages over not doing so?
> * Any organization, be it for profit (company) or not
> (university, oss project) has certain rules in place. In all
> likelihood not all participants would choose the exact same
> rules if they could, yet they choose to walk (factually or
> virtually) in there every day and contribute to the
> organization. A simple way to look at things would be, would
> you quit a job or start a protracted argument with the CEO if
> the coding guidelines contained "please squash your github
> commits"?
If a company's internal guidelines contain rules written by the
CEO, that most workers disagree with, and which seem to lead to
the opposite of productivity, it would certainly be a big red
flag.
> * The leader of an organization (in this case me) cannot afford
> the time to justify and debate every single minor decision they
> make. No organization works that way. I am under enormous
> pressure to bring money in the Foundation, organize DConf,
> mentor students, write articles, contribute code, all while
> keeping things running.
This is why people delegate, right? As you're aware, both Martin
and I are in favor of squashing conservatively.
> * You seem to frame things as an arbitrary imposition made by
> an oppressive leadership. Think of it - ever since we have
> worked together (your first post is dated 2007-01-06!), is this
> the pattern by which matters have been conducted? Do you think
> it would be a fair characterization of Walter and my philosophy
> and values?
Let's not pretend that there have been zero decisions made
seemingly in opposite to the community's consensus before. And,
reminder: I did start the page
http://wiki.dlang.org/Language_issues :)
> The short of it is we simply cannot work this way, as a simple
> matter of my own human limitations; I can't spend hours in the
> forum justifying every little thing, especially those that ten
> people do in eleven ways. I mean I _literally_ can't: I don't
> have the time because I am spending it making the D language
> more successful. Which I hope you'll help me with, too. To
> scale, we need to focus on the real problems and abandon
> debating the small things again and again.
I understand, but it's not either-or. I think delegation and
trust in the community are both viable alternatives... but, more
importantly, for the past few instances the discussions would
have been a lot shorter if we'd stick to the practical arguments
that matter.
To try to cut a long thread short, you wrote:
> Please reach to squash commits as the default, unless there is
> a special case.
> with exceptions that need to be justified.
I just think that "multiple self-contained commits which are too
granular to split into multiple PRs" should be an implied special
case that should not be justified. This is all.
More information about the Digitalmars-d
mailing list