From Fedora Project Wiki

(Answer DJ's questions and cleanup Arjun's conflict resolution notes.)
(Add export for GLIBC_MS in sync process.)
Line 22: Line 22:
* Convert the Fedora rawhide glibc dist-git repository to a glibc-patches repository (git repo with Fedora patches applied as commits).
* Convert the Fedora rawhide glibc dist-git repository to a glibc-patches repository (git repo with Fedora patches applied as commits).
<pre>
<pre>
export GLIBC_MS=$HOME/fedsrc/glibc-maintainer-scripts
cd $HOME/fedsrc/glibc
cd $HOME/fedsrc/glibc
$GLIBC_MS/glibc-patches-to-git.py
$GLIBC_MS/glibc-patches-to-git.py

Revision as of 21:30, 29 November 2018

Rawhide synchronization for the GNU C Library

Make sure you have authenticated and meet the pre-requisites (see notes below).

Synchronization Process

  • Setup/Fetch a clean upstream master repository for glibc. This can be an existing directory also which you switch to master branch and ensure it has been rebased e.g. git pull --rebase cleanly to head.
mkdir -p $HOME/src
cd $HOME/src
git clone git://sourceware.org/git/glibc.git glibc-pristine
  • Setup/Fetch a clean Fedora rawhide glibc repository.
cd $HOME/fedsrc
fedpkg clone glibc
  • Run fedpkg sources to downloads the .tar.xy file needed for creating the glibc-patches repository (next step).
  • Convert the Fedora rawhide glibc dist-git repository to a glibc-patches repository (git repo with Fedora patches applied as commits).
export GLIBC_MS=$HOME/fedsrc/glibc-maintainer-scripts
cd $HOME/fedsrc/glibc
$GLIBC_MS/glibc-patches-to-git.py
  • Synchronize from upstream master to Fedora rawhide and review changes.
cd $HOME/fedsrc/glibc
$GLIBC_MS/glibc-sync-upstream.py --import-git $HOME/src/glibc-pristine --verbose
git diff
  • Dealing with merge conflicts due to backport+rebase:

Sometimes, a fix is backported from upstream into rawhide, and subsequently a rebase is scheduled. During this rebase, the backport and its corresponding patch need to be dropped.

One way to achieve this is to manually edit the spec file prior to running glibc-patches-to-git so that the merge conflict is avoided in the first place.

Another way is to let the merge conflict occur, then run git rebase --skip in the glibc-patches directory/repository to skip the application of the current patch (i.e. the one backported, which is causing the merge conflict) and continue the rebase (this rebase is an internal detail of how glibc-sync-upstream is implemented and was started by the script before erroring out due to the conflict).

Then we continue the process by executing glibc-git-to-patches in $HOME/fedsrc/glibc, which now skips the patch when creating glibc-patches.

Finally, we run glibc-patches-to-git --branch master, to bring update dist-git with the recently refreshed glibc-patches.

  • Manually document note-worthy changes in the %changelog. This step is probably the most complex. You need to look at all the changes since the last sync (the hash is recorded in the %changelog) in the upstream repo and see if there is anything note-worthy to talk about e.g. git diff HASH1^..HASH2. You will use this text in your commit message also.
* Wed Nov 07 2018 Florian Weimer <fweimer@redhat.com> - 2.28.9000-14
- Auto-sync with upstream branch master,
  commit 1df872fd74f730bcae3df201a229195445d2e18a:
- libanl: Fix crash if first helper thread creation failed (#1646381)
  • Add new files (still in the Fedora rawhide directory from the last step) and commit
fedpkg new-sources glibc-*.tar.gz
git add glibc.spec
git commit

An appropriate commit message would be:

    Auto-sync with upstream branch master
    
    Upstream commit: 1df872fd74f730bcae3df201a229195445d2e18a
    
    - libanl: Fix crash if first helper thread creation failed (#1646381)

Following the spec file %changelog examle from above.

  • Test a scratch build, and wait for it to complete.
fedpkg srpm
fedpkg scratch-build --srpm ./glibc-XXX.src.rpm
  • Verify scratch build results by downloading logs and looking for any unexpected failures.
$TOOLS/codonell/get-build-logs.sh https://koji.fedoraproject.org/koji/taskinfo?taskID=$TASKID
  • Lastly, push the commit and kick off a Rawhide build if the logs look good.
git push
fedpkg build

Authentication

  • Kerberos init with Fedora realm.
  • Make sure your ssh agent has your Fedora ssh key for pagure.io.

Pre-requisites

  • You have a Fedora account with an SSH key, and have setup your SSH key on pagure.io by logging in.
  • Install fedpkg, python3-pygit2, python3-rpm and git-merge-changelog
  • Configure your ~/.gitconfig to have entries for name, and a merge driver for GNU Changelogs.
[user]
	name = My Name

[merge "merge-changelog"]
        name = GNU-style ChangeLog Merge driver
        driver = /usr/bin/git-merge-changelog
[core]
	attributesfile = ~/.gitattributes
  • Configure your ~/.gitattributes
ChangeLog       merge=merge-changelog
  • Clone glibc-maintainer-scripts into $GLIBC_MS for the git synchronization scripts.
export GLIBC_MS=$HOME/fedsrc/glibc-maintainer-scripts
mkdir -p $HOME/fedsrc
cd $HOME/fedsrc
git clone ssh://git@pagure.io/glibc-maintainer-scripts.git
  • Clone UpstreamToolchainScripts from the Fedora Toolchain team for the build log fetching scripts.
export TOOLS=$HOME/fedsrc/UpstreamToolchainScripts
cd $HOME/fedsrc
git clone ssh://git@pagure.io/FedoraToolchainTeam/UpstreamToolchainBuildScripts.git