Things happen in several stages.
This is done by qisrc.sync.fetch_manifest method.
We just add the manifest repository to the worktree, using
qisrc.sync.clone_project, then reset it to the branch the user asked us.
We then mark the project has beeing a manifest project, so that qisrc sync called later can now where to find the manifest XML file
This is done by qisrc.manifest.load method.
We parse the XML in order to find every project, read what branch they need to track, what are there URLs, and whether or not they are under code review.
If we see them as being under code review, we call qisrc.review.setup_project
Once this is done, we call worktree.set_project_review so that qisrc push does not have to parse the manifest again to see whether or not the project is under code review.
If we see new projects, we add them to the worktree using qisrc.sync.clone_project and then call worktree.set_git_project_config so that qisrc sync does not have to parse the manifest again to get what is the remote branch we should synchronize with.