[[!meta copyright="Copyright © 2010, 2012, 2013, 2014 Free Software Foundation,
Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled [[GNU Free Documentation
License|/fdl]]."]]"""]]

There is a repository for maintenance of [[/glibc]] for the Hurd's needs:
<http://git.savannah.gnu.org/cgit/hurd/glibc.git/>.  It's mainly used for
testing glibc's master branch, but with all the patches that we need on top of
it, and also for development and sharing of (Hurd-specific) glibc patches.

This repository uses [[TopGit]].

History: *A plan for the Hurd-specific glibc repository*, [[!message-id
"878wbp81ed.fsf@dirichlet.schwinge.homeip.net"]].


# Relation to Debian glibc

For a lot of topic branches there is a correspondence to a Debian glibc patch,
and vice-versa, which is also indicated by the Debian glibc patch files' names.

Debian glibc is based on EGLIBC 2.13 and the Savannah hurd/glibc.git one is
tracking sourceware master.

The Savannah hurd/glibc.git one does not/not yet include
[[libpthread|service_solahart_jakarta_selatan__082122541663/libpthread]], [[service_solahart_jakarta_selatan__082122541663/packaging_libpthread]].


# Usage

## Clone

    $ git init
    $ git remote add savannah git://git.sv.gnu.org/hurd/glibc.git
    $ git remote update
    $ tg remote --populate savannah
    tg: Remote savannah can now follow TopGit topic branches.
    tg: Populating local topic branches from remote 'savannah'...
    From git://git.sv.gnu.org/hurd/glibc
     * [new branch]      refs/top-bases/t/_dl_random -> savannah/top-bases/t/_dl_random
     * [new branch]      refs/top-bases/t/accept4 -> savannah/top-bases/t/accept4
    [...]
     * [new branch]      refs/top-bases/tschwinge/Roger_Whittaker -> savannah/top-bases/tschwinge/Roger_Whittaker
    tg: Adding branch t/_dl_random...
    tg: Adding branch t/accept4...
    [...]
    tg: Adding branch tschwinge/Roger_Whittaker...
    tg: The remote 'savannah' is now the default source of topic branches.

## Use tschwinge's Working Branch

    $ git checkout tschwinge/Roger_Whittaker

## Integrate a New Branch

A new (TopGit) branch has been published upstream:

    $ tg remote --populate savannah
    tg: Remote savannah can now follow TopGit topic branches.
    tg: Populating local topic branches from remote 'savannah'...
    remote: Counting objects: 28, done.
    remote: Compressing objects: 100% (19/19), done.
    remote: Total 20 (delta 13), reused 1 (delta 0)
    Unpacking objects: 100% (20/20), done.
    From git://git.sv.gnu.org/hurd/glibc
     * [new branch]      t/unwind-resume.c -> savannah/t/unwind-resume.c
     * [new branch]      refs/top-bases/t/unwind-resume.c -> savannah/top-bases/t/unwind-resume.c
    tg: Skipping branch t/____longjmp_chk: Already exists
    [...]
    tg: Skipping branch t/tlsdesc.sym: Already exists
    tg: Adding branch t/unwind-resume.c...
    tg: Skipping branch t/verify.h: Already exists
    tg: Skipping branch tschwinge/Roger_Whittaker: Already exists
    tg: The remote 'savannah' is now the default source of topic branches.

Make `tschwinge/Roger_Whittaker` (the current branch) depend on it:

    $ tg depend add t/unwind-resume.c
    [tschwinge/Roger_Whittaker 63f11ff] New TopGit dependency: t/unwind-resume.c
     1 files changed, 1 insertions(+), 0 deletions(-)
    tg: Updating base with t/unwind-resume.c changes...
    Auto-merging .topdeps
    Auto-merging .topmsg
    Merge made by recursive.
     nptl/sysdeps/pthread/Makefile                      |   12 ++----------
     sysdeps/gnu/Makefile                               |   18 ++++++++++++++++--
     .../pthread => sysdeps/gnu}/rt-unwind-resume.c     |    0
     .../pthread => sysdeps/gnu}/unwind-resume.c        |    4 ++--
     4 files changed, 20 insertions(+), 14 deletions(-)
     rename {nptl/sysdeps/pthread => sysdeps/gnu}/rt-unwind-resume.c (100%)
     rename {nptl/sysdeps/pthread => sysdeps/gnu}/unwind-resume.c (93%)
    tg: The tschwinge/Roger_Whittaker head is up-to-date wrt. its remote branch.
    tg: Updating tschwinge/Roger_Whittaker against new base...
    Merge made by recursive.
     nptl/sysdeps/pthread/Makefile                      |   12 ++----------
     sysdeps/gnu/Makefile                               |   18 ++++++++++++++++--
     .../pthread => sysdeps/gnu}/rt-unwind-resume.c     |    0
     .../pthread => sysdeps/gnu}/unwind-resume.c        |    4 ++--
     4 files changed, 20 insertions(+), 14 deletions(-)
     rename {nptl/sysdeps/pthread => sysdeps/gnu}/rt-unwind-resume.c (100%)
     rename {nptl/sysdeps/pthread => sysdeps/gnu}/unwind-resume.c (93%)


# Maintenance

## Tags

Occasionally push new tags from the sourceware repository to the Savannah one:

    $ git fetch sourceware
    $ git tag | grep ^glibc- | sed 's%^%tag %' | xargs git push savannah


# Open Issues

## IRC, freenode, #hurd, 2013-12-13

    <braunr> is it ok to store several patches in one topgit branch ?
    <braunr> or is it really designed for one patch per branch ?
    <braunr> fatal: ambiguous argument 'origin/youpi/tls-threadvar': unknown
      revision or path not in the working tree.
    <braunr> tschwinge: ^
    <braunr> tschwinge: does that ring a bell ?
    <tschwinge> braunr: When/how did that happen?
    <tschwinge> Has the branch been removed from the origin remote?
    <tschwinge> Yes, has been deleted (on Savannah) on 2013-09-22.
    <tschwinge> Are you somehow referencing that branch?
    <braunr> tschwinge: tg remote --populate origin
    <tschwinge> braunr: Then I'd guess that Samuel has removed that branch but
      it is still referenced in some other branch's .topdeps file.  I'll have a
      look (but don't hold your breath.)
    <braunr> tschwinge: sure