Op maandag 14 november 2022 19:59:24 CET schreef john:
> I guess we could do that as long as we continue the no-backports policy, but
> it's something you argued against when we started using git-flow a few
> years ago.
> 

I don't have a clear memory of what I argued against way back then. It doesn't 
matter much. 
In reality we have continued to avoid backporting anyway, which is just fine 
for the small 
team that we are.

> But what about the opposite approach, having only one permanent branch and
> no major releases? Instead of 5.0 next spring we'll release 2023.1 and the
> spring after that 2024.1, with .2 in June, .3 in September, and .4 in
> December every year? Major changes, like c++options, get merged when ready;
> we might do a beta release (e.g. 2023.2beta) a month before a release with
> a major change to get better user testing. We'd have to work out policies
> for API and schema changes because it would blow up the file upgrade path
> for users who've skipped some releases. There's a very dense exposition on
> this pattern at http://dymitruk.com/blog/2012/02/05/branch-per-feature/.

It's actually a branch and release pattern I had been considering but was 
hesitant to bring 
up as perhaps to radical. Since you now bring it up for consideration, let's 
evaluate it after all.

1. I like the idea of only a single release branch and all development 
happening on feature or 
bugfix branches that get merged into this release branch when ready. 

2. I also like the idea of dropping distinction between a stable and 
development series. It 
would bring improvements to users much faster in general - it will be released 
when ready, 
not queued for the next major release (which could be only in 2 years worst 
case).
It's a bit what fast moving projects such as webbrowsers currently do.

3. Year based release numbering is also very clear. And always gives a 
reasonable indication 
of how old a given version of gnucash is.


On the flip side
1. This does do away with semantic versioning completely. But that's the whole 
point of 
having only one release branch. Each release can be a mix of bugfixes and new 
features.
2. I imagine this only works well if newly added code (features or bugfixes 
alike) is well 
tested, implying having tests written for it. And that the existing code base 
is well tested as 
well. While slowly improving, the gnucash code is still not very well covered.

I also read through the dymitruk article you linked to. There are a few other 
elements that 
are not fully clear to me yet:

* he talks about an integration branch. Is that a branch that people continue 
to merge their 
new work in, and that just serves 
a. to discover and resolve merge conflicts early on and
b. to run an integration test suite on
Will this branch ever be cleaned or just merge upon merge be added to it ? I 
have no clear 
example of how such a branch is used really.

* there's a separate release branch. Which can be reset from time to time if 
bad features are 
to be skipped for the most recent release. Resetting a branch seems to conflict 
with 
distributed repositories in my mind. But perhaps this is not a problem if it's 
commonly 
known this a a resettable branch. And no devs except for the release manager 
should really 
check out this branch and then even only while preparing for releases ? It's a 
bit vague to 
me.

* handling merge conflicts and sharing the resolutions seem to be an important 
part of the 
solution. Otherwise these conflicts continue to trip up different devs. There 
was a suggestion 
as to how to do this, but nothing concrete. Something to figure out as well.



As for the API and schema changes, that would indeed require some 
reconsideration. 

I have a few first thoughts, but nothing well structured:

* For API the important change to keep in mind is deprecation. New API won't be 
an issue.  
Do we support function signature changes or should a new function be defined in 
that case ?
Current policy is that we deprecate in a stable series and remove in a future 
major release. 
As our current schedule is a two-year cycle for major releases, we could make 
the policy "a 
deprecated feature/function will be kept around for 2 years, after which it 
will be definitely 
removed". Other durations can be chosen as well, as long as it's clear. So 
consumers of the 
api could at most jump two years ahead from the version they currently use with 
a 
guarantee their own code continues to work. At that point they should do the 
work of 
updating their code to cope with deprecated api.
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to