mirror of
				https://git.launchpad.net/~ubuntu-release/britney/+git/britney2-ubuntu
				synced 2025-11-04 10:34:05 +00:00 
			
		
		
		
	Rewrite documentation in sphinx
Signed-off-by: Niels Thykier <niels@thykier.net>
This commit is contained in:
		
							parent
							
								
									5c3229467a
								
							
						
					
					
						commit
						90e4bb6ba2
					
				
							
								
								
									
										172
									
								
								doc/conf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								doc/conf.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,172 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
#
 | 
			
		||||
# britney2 documentation build configuration file, created by
 | 
			
		||||
# sphinx-quickstart on Sat Dec  2 12:34:27 2017.
 | 
			
		||||
#
 | 
			
		||||
# This file is execfile()d with the current directory set to its
 | 
			
		||||
# containing dir.
 | 
			
		||||
#
 | 
			
		||||
# Note that not all possible configuration values are present in this
 | 
			
		||||
# autogenerated file.
 | 
			
		||||
#
 | 
			
		||||
# All configuration values have a default; values that are commented out
 | 
			
		||||
# serve to show the default.
 | 
			
		||||
 | 
			
		||||
# If extensions (or modules to document with autodoc) are in another directory,
 | 
			
		||||
# add these directories to sys.path here. If the directory is relative to the
 | 
			
		||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
 | 
			
		||||
#
 | 
			
		||||
import os
 | 
			
		||||
import sys
 | 
			
		||||
# Add .. so sphinx can find the britney2 modules.
 | 
			
		||||
sys.path.insert(0, os.path.abspath('..'))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- General configuration ------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# If your documentation needs a minimal Sphinx version, state it here.
 | 
			
		||||
#
 | 
			
		||||
# needs_sphinx = '1.0'
 | 
			
		||||
 | 
			
		||||
# Add any Sphinx extension module names here, as strings. They can be
 | 
			
		||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 | 
			
		||||
# ones.
 | 
			
		||||
extensions = ['sphinx.ext.autodoc',
 | 
			
		||||
    'sphinx.ext.doctest',
 | 
			
		||||
    'sphinx.ext.todo',
 | 
			
		||||
    'sphinx.ext.coverage',
 | 
			
		||||
    'sphinx.ext.viewcode']
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain templates here, relative to this directory.
 | 
			
		||||
templates_path = ['_templates']
 | 
			
		||||
 | 
			
		||||
# The suffix(es) of source filenames.
 | 
			
		||||
# You can specify multiple suffix as a list of string:
 | 
			
		||||
#
 | 
			
		||||
# source_suffix = ['.rst', '.md']
 | 
			
		||||
source_suffix = '.rst'
 | 
			
		||||
 | 
			
		||||
# The master toctree document.
 | 
			
		||||
master_doc = 'index'
 | 
			
		||||
 | 
			
		||||
# General information about the project.
 | 
			
		||||
project = 'britney2'
 | 
			
		||||
copyright = '2017, Niels Thykier and others'
 | 
			
		||||
author = 'Niels Thykier'
 | 
			
		||||
 | 
			
		||||
# The version info for the project you're documenting, acts as replacement for
 | 
			
		||||
# |version| and |release|, also used in various other places throughout the
 | 
			
		||||
# built documents.
 | 
			
		||||
#
 | 
			
		||||
# The short X.Y version.
 | 
			
		||||
version = ''
 | 
			
		||||
# The full version, including alpha/beta/rc tags.
 | 
			
		||||
release = ''
 | 
			
		||||
 | 
			
		||||
# The language for content autogenerated by Sphinx. Refer to documentation
 | 
			
		||||
# for a list of supported languages.
 | 
			
		||||
#
 | 
			
		||||
# This is also used if you do content translation via gettext catalogs.
 | 
			
		||||
# Usually you set "language" from the command line for these cases.
 | 
			
		||||
language = None
 | 
			
		||||
 | 
			
		||||
# List of patterns, relative to source directory, that match files and
 | 
			
		||||
# directories to ignore when looking for source files.
 | 
			
		||||
# This patterns also effect to html_static_path and html_extra_path
 | 
			
		||||
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
 | 
			
		||||
 | 
			
		||||
# The name of the Pygments (syntax highlighting) style to use.
 | 
			
		||||
pygments_style = 'sphinx'
 | 
			
		||||
 | 
			
		||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
 | 
			
		||||
todo_include_todos = True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for HTML output ----------------------------------------------
 | 
			
		||||
 | 
			
		||||
# The theme to use for HTML and HTML Help pages.  See the documentation for
 | 
			
		||||
# a list of builtin themes.
 | 
			
		||||
#
 | 
			
		||||
html_theme = 'classic'
 | 
			
		||||
 | 
			
		||||
# Theme options are theme-specific and customize the look and feel of a theme
 | 
			
		||||
# further.  For a list of options available for each theme, see the
 | 
			
		||||
# documentation.
 | 
			
		||||
#
 | 
			
		||||
# html_theme_options = {}
 | 
			
		||||
 | 
			
		||||
# Add any paths that contain custom static files (such as style sheets) here,
 | 
			
		||||
# relative to this directory. They are copied after the builtin static files,
 | 
			
		||||
# so a file named "default.css" will overwrite the builtin "default.css".
 | 
			
		||||
#html_static_path = ['_static']
 | 
			
		||||
 | 
			
		||||
# Custom sidebar templates, must be a dictionary that maps document names
 | 
			
		||||
# to template names.
 | 
			
		||||
#
 | 
			
		||||
# This is required for the alabaster theme
 | 
			
		||||
# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
 | 
			
		||||
html_sidebars = {
 | 
			
		||||
    '**': [
 | 
			
		||||
        'relations.html',  # needs 'show_related': True theme option to display
 | 
			
		||||
        'searchbox.html',
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for HTMLHelp output ------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Output file base name for HTML help builder.
 | 
			
		||||
htmlhelp_basename = 'britney2doc'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for LaTeX output ---------------------------------------------
 | 
			
		||||
 | 
			
		||||
latex_elements = {
 | 
			
		||||
    # The paper size ('letterpaper' or 'a4paper').
 | 
			
		||||
    #
 | 
			
		||||
    # 'papersize': 'letterpaper',
 | 
			
		||||
 | 
			
		||||
    # The font size ('10pt', '11pt' or '12pt').
 | 
			
		||||
    #
 | 
			
		||||
    # 'pointsize': '10pt',
 | 
			
		||||
 | 
			
		||||
    # Additional stuff for the LaTeX preamble.
 | 
			
		||||
    #
 | 
			
		||||
    # 'preamble': '',
 | 
			
		||||
 | 
			
		||||
    # Latex figure (float) alignment
 | 
			
		||||
    #
 | 
			
		||||
    # 'figure_align': 'htbp',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into LaTeX files. List of tuples
 | 
			
		||||
# (source start file, target name, title,
 | 
			
		||||
#  author, documentclass [howto, manual, or own class]).
 | 
			
		||||
latex_documents = [
 | 
			
		||||
    (master_doc, 'britney2.tex', 'britney2 Documentation',
 | 
			
		||||
     'Niels Thykier', 'manual'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for manual page output ---------------------------------------
 | 
			
		||||
 | 
			
		||||
# One entry per manual page. List of tuples
 | 
			
		||||
# (source start file, name, description, authors, manual section).
 | 
			
		||||
man_pages = [
 | 
			
		||||
    (master_doc, 'britney2', 'britney2 Documentation',
 | 
			
		||||
     [author], 1)
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# -- Options for Texinfo output -------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Grouping the document tree into Texinfo files. List of tuples
 | 
			
		||||
# (source start file, target name, title, author,
 | 
			
		||||
#  dir menu entry, description, category)
 | 
			
		||||
texinfo_documents = [
 | 
			
		||||
    (master_doc, 'britney2', 'britney2 Documentation',
 | 
			
		||||
     author, 'britney2', 'One line description of project.',
 | 
			
		||||
     'Miscellaneous'),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								doc/contributing-to-britney.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								doc/contributing-to-britney.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
Contributing to the development of britney2
 | 
			
		||||
===========================================
 | 
			
		||||
 | 
			
		||||
If you are interested in improving britney, you can obtain the source
 | 
			
		||||
code via::
 | 
			
		||||
 | 
			
		||||
  git clone https://anonscm.debian.org/git/mirror/britney2.git
 | 
			
		||||
  # Additional tests
 | 
			
		||||
  git clone https://anonscm.debian.org/git/collab-maint/britney2-tests.git
 | 
			
		||||
 | 
			
		||||
You will need some packages to run britney and the test suites::
 | 
			
		||||
 | 
			
		||||
  # Runtime dependencies
 | 
			
		||||
  apt install python3 python3-apt python3-yaml
 | 
			
		||||
  # Test dependencies
 | 
			
		||||
  apt install python3-pytest libclass-accessor-perl rsync 
 | 
			
		||||
  # Documentation generator
 | 
			
		||||
  apt install python3-sphinx
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Britney has some basic unit tests, which are handled by py.test.  It
 | 
			
		||||
also has some larger integration tests (from the `britney2-tests`
 | 
			
		||||
repo).  Running the tests are done via::
 | 
			
		||||
 | 
			
		||||
  cd britney2
 | 
			
		||||
  # Basic unit tests
 | 
			
		||||
  py.test-3
 | 
			
		||||
  # Integration tests
 | 
			
		||||
  rm -fr ./test-out/
 | 
			
		||||
  ../britney2-tests/bin/runtests ./britney.py ../britney2-tests/t ./test-out
 | 
			
		||||
 | 
			
		||||
The `runtests` command in `britney2-tests` supports running only a
 | 
			
		||||
subset of the tests.  Please see its `--help` output for more
 | 
			
		||||
information.
 | 
			
		||||
 | 
			
		||||
Finally, there is also some heavier tests based on some snapshots of
 | 
			
		||||
live data from Debian.  The data files for these are available in the
 | 
			
		||||
`live-data` submodule of the `britney2-tests` repo.  They consume
 | 
			
		||||
quite a bit of disk space and britney will need at least 1.3GB of RAM
 | 
			
		||||
to process them.
 | 
			
		||||
							
								
								
									
										23
									
								
								doc/index.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								doc/index.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
.. britney2 documentation master file, created by
 | 
			
		||||
   sphinx-quickstart on Sat Dec  2 12:34:27 2017.
 | 
			
		||||
   You can adapt this file completely to your liking, but it should at least
 | 
			
		||||
   contain the root `toctree` directive.
 | 
			
		||||
 | 
			
		||||
Welcome to britney2's documentation!
 | 
			
		||||
====================================
 | 
			
		||||
 | 
			
		||||
.. toctree::
 | 
			
		||||
   :maxdepth: 2
 | 
			
		||||
   :caption: Contents:
 | 
			
		||||
 | 
			
		||||
   what-is-britney
 | 
			
		||||
   short-intro-to-migrations
 | 
			
		||||
   solutions-to-common-policy-issues
 | 
			
		||||
   contributing-to-britney
 | 
			
		||||
 | 
			
		||||
* :ref:`search`
 | 
			
		||||
 | 
			
		||||
.. Add these later if/when needed:
 | 
			
		||||
..   * :ref:`genindex`
 | 
			
		||||
..   * :ref:`modindex`
 | 
			
		||||
 | 
			
		||||
@ -1,13 +1,11 @@
 | 
			
		||||
#! TITLE: Britney migration documentation
 | 
			
		||||
#! SUBTITLE: Understanding britney's workflow
 | 
			
		||||
 | 
			
		||||
# Migrations
 | 
			
		||||
A short introduction to migrations
 | 
			
		||||
==================================
 | 
			
		||||
 | 
			
		||||
This is a technical introduction to how britney
 | 
			
		||||
handles migrations.  Being an introduction, it deliberately
 | 
			
		||||
oversimplifies certain things at the expense of accuracy.
 | 
			
		||||
It also covers common migration issues and how to fix
 | 
			
		||||
them.
 | 
			
		||||
them in :doc:`solutions-to-common-policy-issues`.
 | 
			
		||||
 | 
			
		||||
The document is primarily aimed at contributors for
 | 
			
		||||
distributions that want to understand the basics of
 | 
			
		||||
@ -21,7 +19,8 @@ abstract.  Furthermore, the document assumes familiarity with
 | 
			
		||||
Debian-based distribution practises and terminology (such as
 | 
			
		||||
"suites" and "source package").
 | 
			
		||||
 | 
			
		||||
## A high level overview of britney and migrations
 | 
			
		||||
A high level overview of britney and migrations
 | 
			
		||||
-----------------------------------------------
 | 
			
		||||
 | 
			
		||||
The purpose of britney is to (semi-)automatically select
 | 
			
		||||
a number of migration items from a series of source suites
 | 
			
		||||
@ -34,9 +33,12 @@ of the following points:
 | 
			
		||||
 1. The migration items pass a number of policies for the target
 | 
			
		||||
    suite.  Most of these policies are basically that the
 | 
			
		||||
    migration items do not regress on selected QA checks.
 | 
			
		||||
    
 | 
			
		||||
    * An item satisfying this part is called a `valid candiate`.
 | 
			
		||||
 1. Installability will not regress as a result of
 | 
			
		||||
 | 
			
		||||
 2. Installability will not regress as a result of
 | 
			
		||||
    migrating the migration items.
 | 
			
		||||
 | 
			
		||||
    * An item that (also) satisfies this part will be selected
 | 
			
		||||
      for migration.
 | 
			
		||||
 | 
			
		||||
@ -48,14 +50,15 @@ issue (as it is not a regression).
 | 
			
		||||
This only leaves the definition of a migration items.  They come
 | 
			
		||||
in several variants defined in the next section.
 | 
			
		||||
 | 
			
		||||
## Migration items
 | 
			
		||||
Migration items
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
Internally, britney groups packages into migration items based on a
 | 
			
		||||
few rules.  There are several kinds of migration items and this
 | 
			
		||||
document will only describe the source migration item.
 | 
			
		||||
 | 
			
		||||
>  A source migration item is one upload of a source package, with
 | 
			
		||||
>  associated binary packages once built.
 | 
			
		||||
   A source migration item is one upload of a source package, with
 | 
			
		||||
   associated binary packages once built.
 | 
			
		||||
 | 
			
		||||
Once a new version of a source package appears in the source suite,
 | 
			
		||||
britney will create track it with a source migration item.  As the
 | 
			
		||||
@ -72,7 +75,8 @@ As implied earlier, there are several other migration types.  But they
 | 
			
		||||
are not covered in this document.  They deal with cases like removals,
 | 
			
		||||
rebuilds of existing binaries, etc.
 | 
			
		||||
 | 
			
		||||
## Migration phase 1: Policies / Excuses
 | 
			
		||||
Migration phase 1: Policies / Excuses
 | 
			
		||||
-------------------------------------
 | 
			
		||||
 | 
			
		||||
To begin with, britney will apply a number of policies to
 | 
			
		||||
all migration items.  Each policy will rate each migration
 | 
			
		||||
@ -100,19 +104,25 @@ data that britney has access to.  This mean that without any change
 | 
			
		||||
to the items themselves:
 | 
			
		||||
 | 
			
		||||
 1. Items that passed originally may fail in a later britney run.
 | 
			
		||||
 1. Likewise, items may go from a "permanent failure" to a pass.
 | 
			
		||||
 | 
			
		||||
 2. Likewise, items may go from a "permanent failure" to a pass.
 | 
			
		||||
 | 
			
		||||
This can be seen in the following example case:
 | 
			
		||||
 | 
			
		||||
 1. A new version of package is uploaded.
 | 
			
		||||
 | 
			
		||||
    * Britney processes the package and concludes that there no blocking bugs,
 | 
			
		||||
      so the package passes the bug policy.
 | 
			
		||||
 1. Then before it migrates, someone files a blocking bug against
 | 
			
		||||
 | 
			
		||||
 2. Then before it migrates, someone files a blocking bug against
 | 
			
		||||
    the new version.
 | 
			
		||||
 | 
			
		||||
    * Britney reprocesses the package and now concludes it has a regression in
 | 
			
		||||
      the bug policy (i.e. the policy verdict goes from "pass" to "permanent fail").
 | 
			
		||||
 1. The bug is examined and it is determined that the bug also affects the
 | 
			
		||||
 | 
			
		||||
 3. The bug is examined and it is determined that the bug also affects the
 | 
			
		||||
    version in the target suite.  The bug tracker is updated to reflect this.
 | 
			
		||||
 | 
			
		||||
    * Britney reprocesses the package again and now concludes there is a blocking
 | 
			
		||||
      bug, but it is not a regression (since it also affects the target suite).
 | 
			
		||||
      This means the policy verdict now go from "fail" to "pass".
 | 
			
		||||
@ -131,7 +141,8 @@ a hinted migration generally implies that the problem will not
 | 
			
		||||
prevent future migrations for newer versions of the same source
 | 
			
		||||
package (assuming that the problem is deterministic).
 | 
			
		||||
 | 
			
		||||
## Migration phase 2: Installability regression testing
 | 
			
		||||
Migration phase 2: Installability regression testing
 | 
			
		||||
----------------------------------------------------
 | 
			
		||||
 | 
			
		||||
For the migration items that pass the previous phase, britney
 | 
			
		||||
will do a test migration to see if anything becomes uninstallable.
 | 
			
		||||
@ -143,11 +154,12 @@ problems here, the britney log file has to be examined.  This requires
 | 
			
		||||
a bit more technical insight as it has not been polished as much as
 | 
			
		||||
the excuses.
 | 
			
		||||
 | 
			
		||||
### Confirming a migration
 | 
			
		||||
Confirming a migration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
To start with; if a migration is accepted and "committed" (i.e. it will not
 | 
			
		||||
be rolled back), britney will include in a line starting with `final:` like
 | 
			
		||||
in this example:
 | 
			
		||||
in this example::
 | 
			
		||||
 | 
			
		||||
    Apparently successful
 | 
			
		||||
    final: -cwltool,-libtest-redisserver-perl,-pinfo,-webdis,hol88
 | 
			
		||||
@ -173,12 +185,13 @@ Reminder: Migration items generally use the name of the source package.  There
 | 
			
		||||
are exceptions to that "rule" (but they are not common cases covered by this
 | 
			
		||||
document).
 | 
			
		||||
 | 
			
		||||
### Debugging failed migration attempts
 | 
			
		||||
Debugging failed migration attempts
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Start by confirming that the migration item was not accepted (as described
 | 
			
		||||
in the above section).  If the migration item does not appear on a `final:` line,
 | 
			
		||||
then we need to debug the actual migration attempts.  Migration attempts look
 | 
			
		||||
something like this:
 | 
			
		||||
something like this::
 | 
			
		||||
 | 
			
		||||
    trying: -webdis
 | 
			
		||||
    accepted: -webdis
 | 
			
		||||
@ -214,8 +227,9 @@ later attempt.  It is not always immediately obvious, which attempt is better
 | 
			
		||||
for debugging.  When in doubt, it is *usually* easiest to look at the attempt
 | 
			
		||||
with the least amount of new uninstallable packages.
 | 
			
		||||
 | 
			
		||||
In the libaws example, a total of 4 binary packages become uninstallable on the
 | 
			
		||||
architecture `arm64`.  Here is the output again with this information high lighted:
 | 
			
		||||
In the libaws example, a total of 4 binary packages become
 | 
			
		||||
uninstallable on the architecture `arm64`.  Here is the output again
 | 
			
		||||
with this information high lighted::
 | 
			
		||||
 | 
			
		||||
    migration item(s) being attemped
 | 
			
		||||
            vvvvvv
 | 
			
		||||
@ -230,7 +244,7 @@ architecture `arm64`.  Here is the output again with this information high light
 | 
			
		||||
Please note that britney is lazy and will often reject an item after proving
 | 
			
		||||
that there is a regression on a single architecture.  So in the above example,
 | 
			
		||||
we are not actually sure whether this problem is architecture specific.  For
 | 
			
		||||
`easy`-hints, the information is presented slightly different.
 | 
			
		||||
`easy`-hints, the information is presented slightly different::
 | 
			
		||||
 | 
			
		||||
    Trying easy from autohinter: asis/2017-1 dh-ada-library/6.12 [...]
 | 
			
		||||
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
@ -255,103 +269,3 @@ things break.  If there are few broken packages, it is often a question of
 | 
			
		||||
looking for `Breaks`-relations or `Depends`-relations with upper bounds on
 | 
			
		||||
versions / on old packages being removed.  Alternatively, there are also tools
 | 
			
		||||
like `dose-debcheck`, which attempts to analyse and explain problems like this.
 | 
			
		||||
 | 
			
		||||
# Common issues with policy decisions
 | 
			
		||||
 | 
			
		||||
## Britney complains about a fixed bug in the source suite (bug policy)
 | 
			
		||||
 | 
			
		||||
All decisions about bugs are related to data set extracted
 | 
			
		||||
from the bug tracker.  If britney says that the new version
 | 
			
		||||
introduces a bug, then it is because the data set from the bug
 | 
			
		||||
tracker lists that bug for *a* version in the source suite and
 | 
			
		||||
without it appearing for the version(s) in the target suite.
 | 
			
		||||
 | 
			
		||||
Please note that these data sets do not include versions, so
 | 
			
		||||
britney is unable to tell exactly which versions are affected.
 | 
			
		||||
The only thing, it can tell, is what suite the bug affects.
 | 
			
		||||
 | 
			
		||||
There is a number of common cases, where this is observed:
 | 
			
		||||
 | 
			
		||||
 * The metadata on the bug is wrong.  A known example is the
 | 
			
		||||
   Debian BTS, where if a bug has a `fixed` version equal to
 | 
			
		||||
   a `found` version, the bug is considered unfixed.
 | 
			
		||||
 | 
			
		||||
 * The bug is fixed, but the old version is still around in
 | 
			
		||||
   the source suite.  In this case, britney will generally
 | 
			
		||||
   mention a "missing build" or "old binaries".
 | 
			
		||||
 | 
			
		||||
If the metadata is wrong, the solution is to fix it in the bug
 | 
			
		||||
tracker and wait until britney receives a new data set.  In
 | 
			
		||||
the other case, the recommendation is to see the sections on
 | 
			
		||||
"missing builds" and "old binaries" below.  As long as they
 | 
			
		||||
are present, the package may be blocked by bugs in the older
 | 
			
		||||
versions of the binaries.
 | 
			
		||||
 | 
			
		||||
## Britney complains about "missing builds"
 | 
			
		||||
 | 
			
		||||
A "missing build" happens when britney detects that the binaries
 | 
			
		||||
for a given architecture are missing or is not up to date.  This
 | 
			
		||||
is detected by checking the "Packages" files in the archive, so
 | 
			
		||||
britney have no knowledge of *why* the build is missing.
 | 
			
		||||
Accordingly, this kind of issue is flagged as a "possibly permanent"
 | 
			
		||||
issue.
 | 
			
		||||
 | 
			
		||||
If the omission is deliberate (e.g. the new version no longer
 | 
			
		||||
supports that architecture), then please have the old binaries
 | 
			
		||||
for that architecture removed from the *source* suite.  Once
 | 
			
		||||
those are removed, britney will no longer see that as a problem.
 | 
			
		||||
 | 
			
		||||
Otherwise, please check the build services for any issues with
 | 
			
		||||
building or uploading the package to the archive.
 | 
			
		||||
 | 
			
		||||
**Common misconceptions**: If the architecture is no longer
 | 
			
		||||
supported, the removal of the old binaries should happen in
 | 
			
		||||
the *source* suite (e.g. Debian unstable).  However, many
 | 
			
		||||
people mistakenly request a removal from the *target* suite
 | 
			
		||||
(e.g. Debian testing).  Unfortunately, this is not the proper
 | 
			
		||||
solution (and, britney does not support architecture
 | 
			
		||||
specific removals so it may be difficult to do anyhow).
 | 
			
		||||
 | 
			
		||||
## Britney complains about "old binaries"
 | 
			
		||||
 | 
			
		||||
Depending on the configuration of the britney instance, this may
 | 
			
		||||
or may not be a blocker.  If the distribution has chosen to enable
 | 
			
		||||
the "ignore_cruft" option, this is merely a warning/note.  That
 | 
			
		||||
said, even in this mode it can block a package from migration.
 | 
			
		||||
 | 
			
		||||
This appears when britney detects that there are older versions of
 | 
			
		||||
the binary packages around, which was built by (an older version of)
 | 
			
		||||
the same source package.
 | 
			
		||||
 | 
			
		||||
This is common with distributions where their archive management
 | 
			
		||||
software is capable of keeping old binaries as long as something
 | 
			
		||||
depends on them (e.g. DAK as used by Debian).  Therefore, the
 | 
			
		||||
most common solution is to ensure all reverse dependencies are
 | 
			
		||||
updated to use the new binaries and then have the old ones
 | 
			
		||||
removed (the latter commonly known as "decrufting").  Technically,
 | 
			
		||||
this is also solvable by "decrufting" without updating/rebuilding
 | 
			
		||||
other packages.  Though whether this is an acceptable practise
 | 
			
		||||
depends on the distribution.
 | 
			
		||||
 | 
			
		||||
Alternatively, if the distribution uses the "ignore_cruft" option,
 | 
			
		||||
this (in itself) is not a blocker.  However, it commonly triggers
 | 
			
		||||
non-obvious issues:
 | 
			
		||||
 | 
			
		||||
 * If the bugs policy is enabled, an bug in the old binaries that
 | 
			
		||||
   is fixed in the new version will still be a blocker.  Here, the
 | 
			
		||||
   best solution is to get rid of the old binaries.
 | 
			
		||||
   
 | 
			
		||||
   (Note: the bugs data is not versioned so britney cannot tell which
 | 
			
		||||
    versions the bug applies to.  Just which suite they affect)
 | 
			
		||||
 | 
			
		||||
 * Even if the migration item is a valid candidate (i.e. all policy
 | 
			
		||||
   checked have passed), it may cause installability regressions as
 | 
			
		||||
   britney will also attempt to keep the old binaries around as long
 | 
			
		||||
   as they are used.  The most often cause of this when the old
 | 
			
		||||
   binaries are not co-installable with the new ones.
 | 
			
		||||
   
 | 
			
		||||
   (Note: Britney generally only works with the highest version of a
 | 
			
		||||
    given binary.  If you have libfoo1 depends on libfoo-data v1 and
 | 
			
		||||
    then libfoo2 depends on libfoo-data v2, then libfoo1 will become
 | 
			
		||||
    uninstallable as libfoo-data v2 will "shadow" libfoo-data v1)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										105
									
								
								doc/solutions-to-common-policy-issues.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								doc/solutions-to-common-policy-issues.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
Solutions to common policy decisions
 | 
			
		||||
====================================
 | 
			
		||||
 | 
			
		||||
.. contents::
 | 
			
		||||
 | 
			
		||||
Britney complains about a fixed bug in the source suite (bug policy)
 | 
			
		||||
--------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
All decisions about bugs are related to data set extracted
 | 
			
		||||
from the bug tracker.  If britney says that the new version
 | 
			
		||||
introduces a bug, then it is because the data set from the bug
 | 
			
		||||
tracker lists that bug for *a* version in the source suite and
 | 
			
		||||
without it appearing for the version(s) in the target suite.
 | 
			
		||||
 | 
			
		||||
Please note that these data sets do not include versions, so
 | 
			
		||||
britney is unable to tell exactly which versions are affected.
 | 
			
		||||
The only thing, it can tell, is what suite the bug affects.
 | 
			
		||||
 | 
			
		||||
There is a number of common cases, where this is observed:
 | 
			
		||||
 | 
			
		||||
 * The metadata on the bug is wrong.  A known example is the
 | 
			
		||||
   Debian BTS, where if a bug has a `fixed` version equal to
 | 
			
		||||
   a `found` version, the bug is considered unfixed.
 | 
			
		||||
 | 
			
		||||
 * The bug is fixed, but the old version is still around in
 | 
			
		||||
   the source suite.  In this case, britney will generally
 | 
			
		||||
   mention a "missing build" or "old binaries".
 | 
			
		||||
 | 
			
		||||
If the metadata is wrong, the solution is to fix it in the bug
 | 
			
		||||
tracker and wait until britney receives a new data set.  In
 | 
			
		||||
the other case, the recommendation is to see the sections on
 | 
			
		||||
"missing builds" and "old binaries" below.  As long as they
 | 
			
		||||
are present, the package may be blocked by bugs in the older
 | 
			
		||||
versions of the binaries.
 | 
			
		||||
 | 
			
		||||
Britney complains about "missing builds"
 | 
			
		||||
----------------------------------------
 | 
			
		||||
 | 
			
		||||
A "missing build" happens when britney detects that the binaries
 | 
			
		||||
for a given architecture are missing or is not up to date.  This
 | 
			
		||||
is detected by checking the "Packages" files in the archive, so
 | 
			
		||||
britney have no knowledge of *why* the build is missing.
 | 
			
		||||
Accordingly, this kind of issue is flagged as a "possibly permanent"
 | 
			
		||||
issue.
 | 
			
		||||
 | 
			
		||||
If the omission is deliberate (e.g. the new version no longer
 | 
			
		||||
supports that architecture), then please have the old binaries
 | 
			
		||||
for that architecture removed from the *source* suite.  Once
 | 
			
		||||
those are removed, britney will no longer see that as a problem.
 | 
			
		||||
 | 
			
		||||
Otherwise, please check the build services for any issues with
 | 
			
		||||
building or uploading the package to the archive.
 | 
			
		||||
 | 
			
		||||
**Common misconceptions**: If the architecture is no longer
 | 
			
		||||
supported, the removal of the old binaries should happen in
 | 
			
		||||
the *source* suite (e.g. Debian unstable).  However, many
 | 
			
		||||
people mistakenly request a removal from the *target* suite
 | 
			
		||||
(e.g. Debian testing).  Unfortunately, this is not the proper
 | 
			
		||||
solution (and, britney does not support architecture
 | 
			
		||||
specific removals so it may be difficult to do anyhow).
 | 
			
		||||
 | 
			
		||||
Britney complains about "old binaries"
 | 
			
		||||
--------------------------------------
 | 
			
		||||
 | 
			
		||||
Depending on the configuration of the britney instance, this may
 | 
			
		||||
or may not be a blocker.  If the distribution has chosen to enable
 | 
			
		||||
the "ignore_cruft" option, this is merely a warning/note.  That
 | 
			
		||||
said, even in this mode it can block a package from migration.
 | 
			
		||||
 | 
			
		||||
This appears when britney detects that there are older versions of
 | 
			
		||||
the binary packages around, which was built by (an older version of)
 | 
			
		||||
the same source package.
 | 
			
		||||
 | 
			
		||||
This is common with distributions where their archive management
 | 
			
		||||
software is capable of keeping old binaries as long as something
 | 
			
		||||
depends on them (e.g. DAK as used by Debian).  Therefore, the
 | 
			
		||||
most common solution is to ensure all reverse dependencies are
 | 
			
		||||
updated to use the new binaries and then have the old ones
 | 
			
		||||
removed (the latter commonly known as "decrufting").  Technically,
 | 
			
		||||
this is also solvable by "decrufting" without updating/rebuilding
 | 
			
		||||
other packages.  Though whether this is an acceptable practise
 | 
			
		||||
depends on the distribution.
 | 
			
		||||
 | 
			
		||||
Alternatively, if the distribution uses the "ignore_cruft" option,
 | 
			
		||||
this (in itself) is not a blocker.  However, it commonly triggers
 | 
			
		||||
non-obvious issues:
 | 
			
		||||
 | 
			
		||||
 * If the bugs policy is enabled, an bug in the old binaries that
 | 
			
		||||
   is fixed in the new version will still be a blocker.  Here, the
 | 
			
		||||
   best solution is to get rid of the old binaries.
 | 
			
		||||
   
 | 
			
		||||
   * Note: the bugs data is not versioned so britney cannot tell which
 | 
			
		||||
     versions the bug applies to.  Just which suite they affect.
 | 
			
		||||
 | 
			
		||||
 * Even if the migration item is a valid candidate (i.e. all policy
 | 
			
		||||
   checked have passed), it may cause installability regressions as
 | 
			
		||||
   britney will also attempt to keep the old binaries around as long
 | 
			
		||||
   as they are used.  The most often cause of this when the old
 | 
			
		||||
   binaries are not co-installable with the new ones.
 | 
			
		||||
   
 | 
			
		||||
   * Note: Britney generally only works with the highest version of a
 | 
			
		||||
     given binary.  If you have libfoo1 depends on libfoo-data v1 and
 | 
			
		||||
     then libfoo2 depends on libfoo-data v2, then libfoo1 will become
 | 
			
		||||
     uninstallable as libfoo-data v2 will "shadow" libfoo-data v1.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										13
									
								
								doc/what-is-britney.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								doc/what-is-britney.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
			
		||||
What is britney and britney2
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
Britney2 is a program that can be used to `migrate` debian-based
 | 
			
		||||
packages from one suite to another.  It is the tool used by Debian and
 | 
			
		||||
Ubuntu to choose which packages are ready for wider testing.
 | 
			
		||||
 | 
			
		||||
Britney2 is the reimplementation and replacement of the original
 | 
			
		||||
britney program.  Through out this documentation, any mention of
 | 
			
		||||
britney generally refers to the britney2 implementation.  When there
 | 
			
		||||
is a need to reference the original britney implementation, this
 | 
			
		||||
documentation will use britney1.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user