First, thanks to you and Thomas for replying; I was delaying on purpose
to see if anyone else commented happened and think about it.
Vince Skahan <
vince...@gmail.com> writes:
> Interesting post. Sounds like you want some kind of semi git-flow kind of
> thing except with long-lived minor-release extra level of integration
> branches.
I was unaware of git-flow, but now that I read about it, I can tell you
that I am not wanting it.
In the git world (not the weewx world), people seem to think it's a big
deal which branch is master and which has some other name. I mostly
don't, except that I regard master as the natural place for development,
either straight on master or for landing feature branches.
> I think weewx basically takes the position of "*stick where you're at or
> get yourself current*" in general, other than also pointing folks at
> individual commits they might hand-edit into place on their old sources (at
> their risk and pain) before things get released. But I would be surprised
> to ever see another 3.9.x release now that 4.0 is imminent, for example.
I wasn't trying to suggest that old releases receive support and
updates. I see that as a completely separate step from keeping the
labels clear enough so that this could reasonably be done, which is what
I was trying to takl about.
> Can't you get the same effect by:
>
> - git pull (get your repo current)
> - git checkout -b v3.8.0 (create a local branch at the point in time you
> want to start with)
> - git diff -b v3.9.2. (diff your working branch vs. some later point in
> time)
> - and so on...
Yes, I can do something like that, but after pull master is in some
state on some branch, as opposed to the branch I know is stable and that
I want to stay on until I decide to jump forward. So it isn't as
simple as you make it out, because I have to read the history and figure
out when there were merges from develop, and create a branch there.
But me doing this is basically creating the release branches that I
think should exist in arrears, and it means everybody who wants to
basically take a configuration management approach to their upgrade
schedule has to do this. If a packaging system has packaged some
release and wants to cherry-pick security or critical bug fixes without
a full update, they have to figure this out too.
> I worked a project that used git-flow. It was brutal. No way to
> effectively have multiple parallel lines of code that moved forward (ie,
> patch 3.8.x when current dev was on 3.9.x or the like). No matter what you
> do, you have the back merge problem if you want to lag current.
Once you have named release branches, then anything on the branch
development is done on can be cherry-picked to each branch, if desired.
Yes, merges can be difficult, but I think that's intrinsic in supporting
release branches, and not about the branching model. I don't see how
git-flow makes this harder or easier, except that I find "master is a
nickanme for the latest release branch" not necessarily helpful.
> Seems to me that weewx's branching is a "one way....move forward..." kind
> of mindset. While there are posts saying "get this commit" for a reported
> bug, they 'tend' to be versus the current major.minor version, not one that
> might be a year+ behind. In your case, wouldn't you want to get to
> 3.latest regardless ?
I probably would want to follow 3.latest, but if I were on 3.8 I might
view 3.9 with some trepidation, vs just commits that were approved for
3.8. I think 4.0 is a much bigger deal than 3.(N+1). I certainly don't
mean to criticize it at all, but with python 3 accomodation I feel that
the risk of trouble is much higher than in say the 3.8->3.9 transition
(and the 4.0 telegraphs that I am not alone in that perception, I'd
say).
My point is not that people should want a particular release branch. It
is also not that that the weewx team should actively support older
release branches. It is merely that I think the branch tags should be
there in the repo so that if someone wants to stay on a branch, or find
out what's on a branch, etc., that they then actually be able to do
that, without first having to first back-construct the branches.
As things are, as I understand them, once things get merged from develop
to master, then the identity of master as representing the previous
release branch is lost, and within git there is no name for that branch.
My main point is that this just seems like an unnecessary loss of useful
information.
My second point is that as a user, I want to be able to say "update
along the release branch I have chosen to be on", which is very safe,
and to be able to choose when to say "jump to this other release
branch", which is something that I think needs even more backup and
perhaps testing, depending on one's level of production paranoia.
Right now, the only way to keep up with the release train is to follow
master, which is subject to sudden jumps to a new release branch with no
way within git to tell that this happened.
If development were on master, then it would be as simple as creating a
"stable-4-0" branch off master when the 4.0 release process (first of
alpha/beta/RC) starts. With development on develop and master as a
"this refers to the most recent stable branch" name, then I guess that
means fixes for stable-4-0 go on stable-4-0 or master and are merged to
the other. Perhaps just put on stable-4-0 and some bot has master track
that, and the bot is reprogrammed to track stable-4-1 when that day
comes. (I see this as merely an accomodation for people who want to
check out a repo and use what's on master as the most recent stable.)
The other thing would be just to put these stable branch tags down just
before merging from develop, so they only sort of exist in arrears, but
one can easily get back to the right place after updating if paying
attention.
This is of course not that big a deal; previously I was ok just
following the latest stable, but I am particularly scared of 4.0,
partly because I expect to be the first to run it on NetBSD.