Date: Sat, 10 Apr 2021 19:15:49 +0200 From: Martin Matuska <mm@FreeBSD.org> To: Warner Losh <imp@bsdimp.com> Cc: Ed Maste <emaste@freebsd.org>, freebsd-git <freebsd-git@freebsd.org>, Xin Li <delphij@freebsd.org>, Ryan Moeller <freqlabs@freebsd.org>, Alexander Motin <mav@freebsd.org>, Mateusz Guzik <mjg@freebsd.org> Subject: Re: OpenZFS branch tracking policy Message-ID: <f8d7a7f3-63a2-434f-054c-fadb9131cf82@FreeBSD.org> In-Reply-To: <CANCZdfp3EJ%2BbrNM02Sfzu_Y42VDEADiApFaX0V9bu_jb5NWd4w@mail.gmail.com> References: <21c7313e-315c-ec48-9437-e0a3d4ec14d2@FreeBSD.org> <CANCZdfopOxm-HTYkVPHkEweHw-F%2BA9mk3Vv26x4t3MEAVEd2gQ@mail.gmail.com> <CAPyFy2DS=nsE3-JQdqQC797xQhAiBACkuyA%2BcxkcRY0yeB_6=w@mail.gmail.com> <CANCZdfoPm0tfDpBTU8ORy-_Oa-tkiNX0_MeAdJn0T5ZJdQe6MQ@mail.gmail.com> <41924e9d-9d61-6646-6c8f-e4458f94296e@FreeBSD.org> <30f529c1-6087-e704-8cc7-0c48a40b7430@FreeBSD.org> <CANCZdfp3EJ%2BbrNM02Sfzu_Y42VDEADiApFaX0V9bu_jb5NWd4w@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Here are some of the facts: - In my merge, there are 15 conflicting files due to changes in FreeBSD=20 (add/add) - Some of the changes have already been upstreamed in later revisions of = openzfs than 891568c99 - A significant majority of the diffs is subject for upstreaming. The=20 ideal state would be to have all changes upstreamed. Sometimes changes=20 get upstreamed with modifications. - In general our developers open pull requests and commit to OpenZFS,=20 then we merge the changes What our developers would like is to use a "git blame" on=20 sys/contrib/openzfs/something to see the history path from OpenZFS. I agree that the merge commits should be more verbose, ideally=20 containing a "git log --oneline" of the commits since last merge. If a do a "squashed" merge like you described with bzip2, then I do not=20 import the history from OpenZFS. That way we don't need that at all and=20 can continue working the way we did until now. What you say about adding "unnecessary" history - since the common=20 development at OpenZFS the majority of commits directly affects FreeBSD. = Only "Linux-Only" and "CI-related" commits are not relevant for FreeBSD. I have updated my example branch how it may look like with more detailed = commit messages, nicely clickable from github: https://github.com/mmatuska/freebsd-src/tree/openzfs_master_merged So the the current question is quite simple, we can do one of the followi= ng: a) do the unsquashed merge I suggest that imports the openzfs history -=20 this will make the commits very transparent, future merges and upstream=20 tracking very easy and --allow-unrelated-history flag is not required=20 anymore. The "common" part of the histories in main and stable/13 will=20 be identical. b) if that is not desired or we are undecided I will continue the way we = go now until a better solution is found. In that case I will fork a=20 second vendor branch (vendor/openzfs-2.1) that starts with the latest=20 common commit of openzfs/master and openzfs/zfs-2.1-release and will=20 merge (or cherry-pick?) from this branch directly to stable/13. As an=20 alternative to merging, git cherry-pick supports -Xsubtree=3D as well. Best regards, mm On 10. 4. 2021 0:15, Warner Losh wrote: > > > On Fri, Apr 2, 2021 at 6:44 PM Martin Matuska <mm@freebsd.org=20 > <mailto:mm@freebsd.org>> wrote: > > I have prepared an example merged branch here: > https://github.com/mmatuska/freebsd-src/tree/openzfs_master_merged > <https://github.com/mmatuska/freebsd-src/tree/openzfs_master_merged= > > > The magical command was: > git merge -s subtree -Xsubtree=3D"sys/contrib/openzfs" 891568c99 > --allow-unrelated-histories > > Luckily, our current diff is manageable. > > > So I did this for bzip2 using approximately: > > git add remove bzip2 <url> > git fetch bzip2 > git merge -s subtree -Xsubtree=3Dcontrib/bzip2 bzip2/master=20 > --allow-unrelated-histories --squash > > [1] At this point I resolved conflicts, where were the entire files=20 > since I guess I didn't bootstrap right to the last merge. There were 4 = > files in conflict. > > Then I did a git add of all the files in conflict and a git commit. > > This produced a good commit. since it was a squash commit, there were=20 > no issues. > > However, it turns out I botched the commit at point [1] above. So I=20 > ran this again and got a conflict for the whole file that I'd removed=20 > a blank line from. > > So, this looks like it could be workable, but does lead me to a few=20 > questions: > > (1) How do we do this so that the conflicts aren't add/add conflicts?=20 > Is there some way to bootstrap this? > (2) Do we need to keep track of the last merge point and use that in=20 > merging the next one in? > (3) I assume we keep track of FreeBSD diffs in a branch off <url> and=20 > we merge that instead of master. > (4) What do we do about adjustments to the build that are needed? > (5) Do we need to host a FreeBSD-specific repo with this stuff, maybe=20 > with tags we don't want widely pushed to ease the next merge? Eg, make = > this the first case of a 'vendor repo' that we then pull squash=20 > commits from so that the vendor repo can track upstream, but not=20 > otherwise be pushed to all our users.... > > Finally, how did you deal with [1] producing so many full-file add/add = > conflicts? Oh, and what kind of commit message when things merge do=20 > you suggest? I rather like your 'bring in hash XXXX branch blah,=20 > here's the important highlights' emails and think that would be a good = > first cut at advice on what to put in these. > > This suggests the current answer is 'seems doable, but we need to=20 > document it and come up with recommendations for how to do it'. > > Warner > > On 3. 4. 2021 1:37, Martin Matuska wrote: > > Hi Warner and Ed, > > > > 2.1-release has already been branched. The stable branch policy i= n > > OpenZFS is somewhat strange, they make a staging branch for each > > patchlevel release, but the commits are continuous. > > > > To have some idea how big the repo history is: > > > > $ git rev-list master --count > > 6662 > > > > $ git rev-list zfs-2.1-release --count > > 6650 > > > > master and zfs-2.1-release have 6650 common commits at the=C2=A0 = moment > > > > $ git log master | wc -l > > 129868 > > > > (linecount - 4 * revcount) / revcount =3D linecount / revcount - = 4 =3D > > 15,4938 comment lines per commit on average > > > > Initial commit was made in Feb 26, 2008. > > > > Yearly commit counts: > > > > $ git log master | grep -c -E '^Date:.* 2020 -[0-9]+$' > > 666 > > > > $ git log master | grep -c -E '^Date:.* 2019 -[0-9]+$' > > 535 > > > > $git log master | grep -c -E '^Date:.* 2018 -[0-9]+$' > > 428 > > > > Martin > > > > On 2. 4. 2021 20:15, Warner Losh wrote: > >> > >> > >> On Fri, Apr 2, 2021 at 11:56 AM Ed Maste <emaste@freebsd.org > <mailto:emaste@freebsd.org> > >> <mailto:emaste@freebsd.org <mailto:emaste@freebsd.org>>> wrote: > >> > >> =C2=A0=C2=A0=C2=A0 On Fri, 2 Apr 2021 at 11:50, Warner Losh <imp= @bsdimp.com > <mailto:imp@bsdimp.com> > >> =C2=A0=C2=A0=C2=A0 <mailto:imp@bsdimp.com <mailto:imp@bsdimp.com= >>> wrote: > >> =C2=A0=C2=A0=C2=A0 > > >> =C2=A0=C2=A0=C2=A0 > We'd always hoped that we'd be able to do s= ubtree merges from > >> =C2=A0=C2=A0=C2=A0 upstreams > >> =C2=A0=C2=A0=C2=A0 > that use git into FreeBSD. The big worry, t= hough, was > that this > >> =C2=A0=C2=A0=C2=A0 would > >> =C2=A0=C2=A0=C2=A0 > needless bloat the repo with a lot of histo= ry. We don't want, > >> =C2=A0=C2=A0=C2=A0 for example, > >> =C2=A0=C2=A0=C2=A0 > all of LLVM's history in the tree. We'd alw= ays > anticipated that > >> =C2=A0=C2=A0=C2=A0 there'd be > >> =C2=A0=C2=A0=C2=A0 > some things we'd just accept the history fo= r, since it is > >> similar in > >> =C2=A0=C2=A0=C2=A0 > character to the vendor branches (though of= course a bit > more). > >> > >> =C2=A0=C2=A0=C2=A0 Note that if we do want to avoid bringing in = the full > history `git > >> =C2=A0=C2=A0=C2=A0 subtree merge` supports a `--squash` option. = This brings in > the > >> set of > >> =C2=A0=C2=A0=C2=A0 upstream changes as a single commit, without = bringing along the > >> =C2=A0=C2=A0=C2=A0 associated history. We will need to do more e= xperimentation to > >> confirm > >> =C2=A0=C2=A0=C2=A0 that the full process, including bootstrappin= g, will work > as we > >> want. > >> =C2=A0=C2=A0=C2=A0 Assuming this all works it should allow us to= forgo the use > of a > >> =C2=A0=C2=A0=C2=A0 FreeBSD-specific vendor branch in src. > >> > >> =C2=A0=C2=A0=C2=A0 We've discussed mirroring any such 3rd-party = source in some > >> =C2=A0=C2=A0=C2=A0 FreeBSD-controlled repository. This would all= ow the project to > >> retain > >> =C2=A0=C2=A0=C2=A0 a full copy of the history, but avoid bloatin= g src with it. > >> > >> =C2=A0=C2=A0=C2=A0 I agree with Warner that we may want a differ= ent policy (full > >> history > >> =C2=A0=C2=A0=C2=A0 or snapshots) for different contrib sources. > >> > >> > >> Good points Ed. I'd forgotten about --squash. > >> > >> Martin, what's your timeline for wanting to implement these > things? > >> I'm unfamiliar with the OpenZFS schedules. > >> > >> Warner > > _______________________________________________ > > freebsd-git@freebsd.org <mailto:freebsd-git@freebsd.org> mailing > list > > https://lists.freebsd.org/mailman/listinfo/freebsd-git > <https://lists.freebsd.org/mailman/listinfo/freebsd-git> > > To unsubscribe, send any mail to > "freebsd-git-unsubscribe@freebsd.org > <mailto:freebsd-git-unsubscribe@freebsd.org>" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f8d7a7f3-63a2-434f-054c-fadb9131cf82>