def add(m, transaction, link, p1, p2, added, removed, readtree=None, match=None
    ):
    """Add a revision to storage.

        ``m`` is an object conforming to ``imanifestdict``.

        ``link`` is the linkrev revision number.

        ``p1`` and ``p2`` are the parent revision numbers.

        ``added`` and ``removed`` are iterables of added and removed paths,
        respectively.

        ``readtree`` is a function that can be used to read the child tree(s)
        when recursively writing the full tree structure when using
        treemanifets.

        ``match`` is a matcher that can be used to hint to storage that not all
        paths must be inspected; this is an optimization and can be safely
        ignored. Note that the storage must still be able to reproduce a full
        manifest including files that did not match.
        """
