Generate the graph for a version of AOSP
This small tutorial will help you to generate a BGraph for a specific version of AOSP.
Note
This will assume that you were able to install repo (and it is available in the $PATH
) and you have access to an AOSP mirror.
BGraph: generate-single
Info
The generation process needs around ~1/2 Go at peak usage and finished with ~125 Mo.
% bgraph generate-single --help
Usage: bgraph generate-single [OPTIONS] RESULT_DIR BRANCH_NAME MIRROR
Generate a BGraph from a branch.
It will work in the workdir and store results in result_dir.
Arguments:
RESULT_DIR Where to store the result [required]
BRANCH_NAME Branch from which generating the BGraph [required]
MIRROR Mirror directory for AOSP (either a link or a path) [required]
Options:
--workdir PATH Workdir
--help Show this message and exit.
Example (using AOSP directory)
Warning
This process takes some time (~15 min) and if you have no local mirror, some network bandwidth.
% bgraph generate-single --workdir /tmp/bgraph graphs/ android-10.0.0_r1 'https://android.googlesource.com'
This command creates the BGraph of android-10.0.0_r1
and store it in graphs/
. It will use the /tmp/bgraph
directory to work (must exists first) and will perform a checkout from Google AOSP root tree.
Note
graphs/
is the output directory in the following examples and must be writable.
Example (using a local mirror)
If you have an AOSP local mirror mounted in /mnt/mirror/mirror
and wants to generate the graph for android-11.0.0_r1
.
% mkdir graphs # where to store the results
% bgraph generate-single graphs/ android-11.0.0_r1 /mnt/mirror/mirror/
At the end, if everything went well, you will find
% ls graphs/
android-11.0.0_r1.bgraph
This object is a pickle
file representing a networkx.DiGraph
.
Options
workdir
: If the option is specified, all the work will be done in the workdir. Otherwise, this will create a new directory in/tmp
. This is useful if you want to generate multiple BGraphs and want to do them only once (or restart.)
Listing branch
In the example, we asked for generating the BGraph of branch android-11.0.0_r1
but there exists numerous of them in AOSP tree.
You may find the list of branches on Google website
Or using this command (if you have a local mirror):
% cd /mnt/mirror/platform/manifest.git
% git branch -a
BGraph: generate
If you want to generate BGraph for multiples branches in AOSP, you can use the generate
command.
This takes an additional argument --branch-pattern
which defaults to android-*
and will restrict the branches built.
% bgraph generate --help
Usage: bgraph generate [OPTIONS] RESULT_DIR MIRROR
Generate BGraph's from a mirror dir.
Arguments:
RESULT_DIR Where to store the resulting BGraph [required]
MIRROR Path to the mirror or the URL to AOSP source [required]
Options:
--branch-pattern TEXT Pattern to match the branches [default: android-*]
--workdir PATH Work directory (default will be a tmp directory)
--help Show this message and exit.
Troubleshooting
Many failed to fetch errors
Google rate limits the requests for anonymous user but BGraph
tries to be as fast as possible by running checkouts on
multiple cores. A solution to this is to use authentication to Google server, following their guide here.
Finally, assuming you are building inside the container, the command would look like this :
% docker run --rm \
# Where to store the graphs
-v $(pwd)/graphs:/home/user/graphs \
# Git config file
-v $(HOME)/.gitconfig:/home/user/.gitconfig \
# Git cookies files
-v $(HOME)/.gitcookies:/home/user/.git/cookies \
# Container name and command
bgraph:latest bgraph generate-single graphs/ 'android-10.0.0_r1' \
# Use the authenticated mirror
'https://android.googlesource.com/a'
See Docker for more informations on how to build inside the container.