Gentoo Archives: gentoo-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-dev-announce@l.g.o
Cc: gentoo-dev@l.g.o
Subject: [gentoo-dev] rsync->git mirror discontinued, repo mirror & CI updates
Date: Thu, 13 Aug 2015 17:43:14
Hello, everyone.

The official git migration inspired some real changes in the semi-
related Git mirror [1] and Repo mirror & CI [2] projects. In this mail,
I'd like to shortly summarize what changed and how to proceed forward.

TL;DR, short summary:

1. rsync->git mirror has been disabled and the project obsoleted.

2. Pull requests are now handled on official repo mirror [3].

3. User syncing can be done via cache-enabled mirror [4] maintained by
'Repository mirror & CI' project. The mirror has less lag than the old
one, and is updated every 20 minutes.

4. All user syncing mirrors [5] now retain history from git & svn,
and can be used with layman using alternative repositories.xml [6].

5. Travis CI is not used at the moment. However, repo mirror & CI runs
pkgcheck every 30 minutes and publishes the results at [11].

rsync->git mirror

The rsync->git mirror has been officially disabled. Since the Gentoo
repository is now in git, there is no point in mirroring from rsync.
All the remaining Pull Requests were closed with an explanatory note
referring to the new official mirror.

I'd like to thank all the people who run and supported the mirror,
and to all our contributors. You've been doing a great job, and made
this effort beneficial to Gentoo. Hope to see you soon on the new
mirror :).

Pull requests on the official mirror

While the reference copy of our repository [7] is hosted by our
Infrastructure, we are also running an official GitHub mirror [3].
The mirror is updated by gitolite automatically on each push,
and therefore is always up-to-date and does not require any effort from
Gentoo developers.

The official mirror also accepts pull requests from our community.
Unlike with the rsync->git mirror, the commits can be merged directly
in the repository, making contributing via pull requests much closer to
being a Gentoo developer.

For users willing to contribute, I suggest reading our Git workflow
[8] documentation and either the key requirements listed in GLEP 63 [9],
or the instructions for generating matching keys [10]. If you can
provide a nicely fit commit with proper message and signature, you
can get all the kudos :).

For developers willing to help, proper reviews and assignments of pull
requests is always welcome. We'd like pull requests to provide both
the means to contribute easily and efficiently, and to help our users
improve their ebuild skills and join the developer community in
the future! So if you decide to fix minor issues with the contributions
yourself, please leave an explanatory comment so that the contributor
does not repeat the same mistake.

Please also remember to ping package maintainers. We usually do that
through @-highlights in comments. The developers who are direct package
maintainers can be referenced directly (@mgorny), while teams and
projects can be referenced via GitHub teams (@Gentoo/qt). Sadly, only
a handful of the teams is mirrored on GitHub right now and organization
admin rights are required to add new teams, so you'd have to ping one
of the 'Owners' (usually me) to mirror more as necessary.

User syncing mirror

Being the development repository, the official git mirror lacks
metadata cache and other external resources and therefore is not
suitable for user syncing. For this goal, I recommend using
the syncing mirror [4] that has been provided by the Repository mirror
& CI project [2] for some time already.

This mirror combines the development repository history with
pre-generated caches. Currently it misses the external resources
(DTDs, GLEPs, news items, herds.xml) but there is an ongoing effort of
finding a clean way to merge them.

The mirror also preserves the original commit signatures, though the
merge commits and cache update commits are not signed at the moment.
For verification, I recommend verifying top-most original commit
signature and 'git diff'-ing HEAD to it to confirm that only caches were

It should be also noted that since the mirror is created from
the original repository rather than from poorly-timed rsync snapshots
of the repository, it has less lag.

Repository mirror updates

Given the necessity of improving Gentoo repository mirroring, I've
prepared and deployed a few improvements to the repository mirrors [5].

First of all, the mirroring scripts now output a repositories.xml [6]
file that can be used as a drop-in replacement for the official list,
replacing the upstream source locations with our mirrors. So if you'd
like layman to sync using mirrors with pre-generated metadata cache,
just use the following in layman.cfg:

  overlays  :

Secondly, the mirrors now preserve the commit history from the upstream
repository. The commits from the original repository are merged into
the mirror using recursive merges, therefore preserving copies of the
original commits. Metadata updates are committed on top of that.

The script is additionally prepared to handle upstream rewrites
(repository replacement, forced pushes) gracefully. In case of such
an event, a 'ours' strategy merge is performed to replace the HEAD with
the new tree, and caches are re-committed on top of that. This
guarantees that the tree at merge commit is 100% exact to the original
repository tree (the previous mirror tree is pretty much discarded) yet
users can perform a clean, fast-forward pull.

As noted above, the merges and metadata updates are not GPG-signed at
the moment. It is unclear whether automated signatures will be added
in the future since I can't guarantee the proper security for
the merges and metadata updates. Instead, it is safer to verify
signatures on the original commits and compare the merged result with
them (no files other than caches can be modified).

Thirdly, I've create a new pkgcore syncer using git-svn, and switched
subversion repository mirroring to it. As a result, the mirrors also
preserve history of subversion repositories. For no good reason,
probably ;).

And lastly, I've fixed and improve cache generation capabilities of
pkgcore. The resulting caches should be fully correct and compatible
with Portage now, and use.local.desc and pkg_desc_index are generated
as well. If you notice any differences or issues, please report.

Gentoo pkgcheck CI runs

None of the new repositories uses Travis-CI at the moment. The most
important reason is that it requires .travis.yml to be stored
in the repository while it really does not belong there. We will be
looking for a suitable replacement though.

The master branch of the repository itself is still subject to my
pkgcheck runs which are run every 30 minutes. The results are published
at [11], though there is no breakage reporting at the moment, or direct
access to historical data (though it's preserved in the git

Still, we need CI for pull requests. The pkgcheck runs could use
a proper UI, and possibly bisect to identify the commits introducing
breakage. In other words, there's a lot of space for improvement.

So once again, thanks a lot, everyone and hope the new services suit
you even more :).


Best regards,
Michał Górny


Subject Author
Re: [gentoo-dev] rsync->git mirror discontinued, repo mirror & CI updates Joseph Booker <joe@××××××××××.net>