workflow question: how do you maintain the port in sync with upstream?
blubee blubeeme
gurenchan at gmail.com
Tue Aug 14 14:41:56 UTC 2018
On Tue, Aug 14, 2018 at 8:56 PM Helen Koike <helen.koike at collabora.com>
wrote:
>
>
> On 08/13/2018 09:50 PM, blubee blubeeme wrote:
> >
> >
> > On Tue, Aug 14, 2018, 08:26 Helen Koike <helen.koike at collabora.com
> > <mailto:helen.koike at collabora.com>> wrote:
> >
> >
> >
> > On 08/13/2018 08:00 PM, blubee blubeeme wrote:
> > >
> > >
> > > On Tue, Aug 14, 2018, 06:30 Helen Koike <helen.koike at collabora.com
> > <mailto:helen.koike at collabora.com>
> > > <mailto:helen.koike at collabora.com
> > <mailto:helen.koike at collabora.com>>> wrote:
> > >
> > > Hello,
> > >
> > > I am new to the community, I am maintaining two packages and I
> > would
> > > like to check with you if there is a better workflow to do
> this.
> > >
> > > The upstream project of the port I am maintaining is held in
> > github, and
> > > I also have patches in the /usr/ports/sysutils/myport/file/
> > folder.
> > >
> > > So I keep a fork of the upstream project with a branch
> > containing a
> > > commit with the patches from the
> /usr/ports/sysutils/myport/file/.
> > >
> > > Every time I need to update the port to a newer version, I do
> > a git pull
> > > in this branch, then I run a script [1] to re-generate the
> > patches in
> > > the /usr/ports/sysutils/myport/file/
>
This one is fairly straight forward, you can simply replace that string
with a regex command;
This is an example of running a replace command for strings after the patch
phase of the build;
post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README
> > >
> > > This script basically generates a file.orig of all modified
> > files in
> > > git, then copy the modified file to WORK_DIR, then run make
> > makepatch.
> > >
> > >
> > > for file in ${CHANGES}; do
> > > mv ${WORK_DIR}/${file} ${WORK_DIR}/${file}.orig
> > > cp ${PROJECT_PATH}/${file} ${WORK_DIR}/${file}
> > > done
> > > make makepatch
>
Depending on how drastic the changes are, you can use the above command to
simply replace strings;
There's also binary alias, that allows to replace sed with gsed:
https://www.freebsd.org/doc/en/books/porters-handbook/binary-alias.html
Speaking of which, FreeBSD has access to all the GNU tools such as;
gmake [gnu make]
gsed [gnu sed]
if it's only a few commands you can use binary alias.
If the project needs GNU tools, then FreeBSD also provides a way to
automatically
run the required scripts
check section 6.5.3 configure Scripts:
https://www.freebsd.org/doc/en/books/porters-handbook/building.html
> > >
> > >
> > > I would like to know if there is a better way to do this (some
> > tool that
> > > I am not aware of?).
> > >
> > > [1]
> > >
> >
> https://github.com/helen-fornazier/bsd-update-patches/blob/master/freebsd-gce-update.sh
> > >
> > > Thanks
> > > Helen
> > >
> > > _______________________________________________
> > > freebsd-ports at freebsd.org <mailto:freebsd-ports at freebsd.org>
> > <mailto:freebsd-ports at freebsd.org
> > <mailto:freebsd-ports at freebsd.org>> mailing
> > > list
> > > https://lists.freebsd.org/mailman/listinfo/freebsd-ports
> > > To unsubscribe, send any mail to
> > > "freebsd-ports-unsubscribe at freebsd.org
> > <mailto:freebsd-ports-unsubscribe at freebsd.org>
> > > <mailto:freebsd-ports-unsubscribe at freebsd.org
> > <mailto:freebsd-ports-unsubscribe at freebsd.org>>"
> > >
> > > Submit your patches upstream, once they get accepted your work on
> > > FreeBSD is greatly simplified.
> > >
> > > Best,
> > > Owen
> > >
> >
> > I am doing that, but there are some changes that I couldn't include
> in
> > upstream yet.
> >
> > Helen
> >
> > Can you give an example of types of changes can't be upstream yet and
> > their reasoning why not?
> >
> > Best,
> > Owen
> >
>
> Sure, e.g. "service -e" vs "service --status-all", there is also sed vs
> gsed (but it just came to mind that I could add this replacement inside
> the Makefile)
>
> [1]
>
> https://github.com/freebsd/freebsd-ports/blob/master/sysutils/google-compute-engine-oslogin/files/patch-bin_google__oslogin__control#L54
>
> Please, let me know if there is a better way to solve this, meanwhile I
> am keeping this patch in the port and I always need to rebase my changes.
>
> And as a general case, I sometimes implement a fix only for FreeBSD e.g.
> [2], then I think in the better way to include in the upstream code e.g.
This is subjective; If you can use native FreeBSD facilities and get that
upstreamed great,
if it works and you don't have to maintain a bunch of patches, is it
reasonable to use your
time maintain diffs on something that's not broken?
[3] while keeping portability with Linux, and sometimes it takes a while
> for the patch to be merged in upstream, so meanwhile I need to rebase
> the patch in every update of the ports.
>
This is just a waiting game, sure it might take a while to get the changes
committed
upstream but the temporary maintenance is a lot simpler than trying to keep
that going forever,
you'll most likely get burnt out.
>
> [2]
>
> https://github.com/freebsd/freebsd-ports/blob/master/sysutils/py-google-compute-engine/files/patch-google__compute__engine_networking_ip__forwarding_ip__forwarding__utils.py
>
> [3] https://github.com/GoogleCloudPlatform/compute-image-packages/pull/622
>
> Thanks
> Helen
>
A lot of the above is explained in the porters handbook under the slow
porting section:
https://www.freebsd.org/doc/en/books/porters-handbook/slow-porting.html
Best,
Owen
More information about the freebsd-ports
mailing list