= How to remove a git branch in a dist-git repository

Historically we did not allow to remove git branches in dist-git repository, but
FESCo recently approved their removal *if and only if* all the commits in the
branch to be deleted can be reached from another branch.
This is a requirement to ensure that if any of the commits were used in a build,
we still have the commit accessible and thus we are able to reproduce the build
if needed.

There is a script in the releng repository to use to check if a branch can
safely be deleted.

So here are the steps to follow to remove the branch `<branch>` from the package
`<foo>`.

. Clone the releng repo if you do not already have it:
+
----
git clone https://pagure.io/releng.git
----

. Pull the latest changes:
+
----
pushd releng && git pull --rebase && popd
----

. Clone the `<foo>` package locally:
+
----
fedpkg clone <foo>
----

. Checkout the <branch> branch:
+
----
cd clone && git checkout <branch>
----

. Run the script:
+
----
python ../releng/scripts/distgit-branch-unused.py <branch>
----
+
(If needed, see the ``--help`` of the script for more information)


. If the script returns that the branch is safe to delete:

.. Go to pkgs01 as root
+
----
ssh pkgs01.rdu3.fedoraproject.org
----

.. Go to the git repository:
+
----
cd /srv/git/repositories/<namespace>/<foo>.git
----

.. Move the head of the branch (this allows to recover it later if needed):
+
--

----
mv refs/heads/<branch> heads_<branch>
----

Sometimes the ref is in the `packed-refs` file, in that case:

----
grep <branch> packed-refs > heads_<branch>
----

Then remove the line from `packed-refs` file
--

. On your local clone of `<foo>`, check that the branch was deleted upstream:
+
--

----
git fetch -p
----

This should show something like:

----
$ git fetch -p
From ssh://pkgs.fedoraproject.org/<namespace>/<foo>
- [deleted]         (none)     -> origin/<branch>
----

--
