Hi Jeroen,

If I understand correctly, your reasoning for basing new development
releases on the previous stable release rather than the previous
development release is that sometimes a ticket may be merged into a
development release but then need to be removed from a subsequent
development release due to problems that were found later, or an SPKG
that was upgraded needs to be downgraded again.

However, leaving SPKG versions aside, isn't it possible to at least
keep the history of the Sage repositories linear? If you want to
unmerge a ticket, you can just commit the reverse of the relevant
patches. `hg backout` is a command you could use to do this. If you do
keep the history of the Sage repositories linear, it would prevent
problems such as I will now describe.

Please take a look at https://github.com/sagemath/sagelib/network (you
can click and drag to scroll the graph). Apart from the large number
of abandoned branches in the "sagemath" row (i.e. which come from your
merger script), you may also notice that William has committed some
changes on top of Sage 5.0.beta4. In order to create a patch based on
the latest development version (currently 5.0.beta6), as you have
requested all Sage developers do, he must rebase his "lfun" branch
onto 5.0.beta6. This involves moving his branch down from 5.0.beta4
all the way to 4.8, and then up again to 5.0.beta6 along the new
branch you have created for 5.0.beta6.

fs@boone ~/src/sagelib $ git rev-list
upstream/prerelease-5.0.beta6..upstream/prerelease-5.0.beta4 | wc -l
143
fs@boone ~/src/sagelib $ git rev-list
upstream/prerelease-5.0.beta4..upstream/prerelease-5.0.beta6 | wc -l
201
fs@boone ~/src/sagelib $ git rev-list
5.0.beta4..upstream/prerelease-5.0.beta6 | wc -l
60

In other words, William must first rebase his commits down by 143
commits to 4.8, and then up 201 commits to 5.0.beta6. The third
command shows the distance between "5.0.beta4" the *tag* (i.e. the
5.0.beta4 tag which is published in the repository provided with
5.0.beta6) and the tip of 5.0.beta6. In other words, if you based
development releases on the previous development release, instead of
throwing away each development release before making the next one,
then William would only have to rebase upwards, and only by 60
commits.

You might question why this is important. The more commits you have to
rebase over, the more likely the rebase will fail and need to be done
manually, increasing developer workload. Also, a developer who is not
well-versed in version control systems may not understand what is
going on if the rebase fails on the way downward, since he expects the
rebase to be going upward from an older development version to a newer
one. If his code is heavily based on another patch that was merged in
a previous development release, the rebase is almost certain to fail
on the way down, which is entirely unexpected from the developer's
point of view - he's just trying to make his code catch up with the
latest development release, so why should he have to worry about
previous development releases disappearing from under him?

And in any case, developers should not even be forced to rebase except
in unusual circumstances (or if they personally feel like it). See my
reasoning about why merging is better than rebasing here:
https://groups.google.com/d/msg/sage-devel/DmjL8hHJYI8/o-R2FYVUczQJ
Merging is not even possible anymore when you don't base development
releases on the previous development release, because this practice
/causes published history to be rescinded/, and so developers must
scramble to get rid of commits that have disappeared from the upstream
source, which requires rebasing.

In summary, can you please base the Mercurial repositories of new Sage
development releases on the Mercurial repositories of the previous
Sage development release? I'm not asking you to allow `sage -upgrade`
for development versions. Until SPKGs are possible to uninstall or
downgrade effectively, that is impractical. But can you please try not
to discard commits from repositories that are published and that
people are encouraged to do development work on?

I am CCing this mail to sage-devel to solicit comments.

Thanks for your time,
    Keshav

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to