Switch to github organization and Google repo
A few weeks ago we started cutting out the different parts of OpTiMSoC from the original repository to separate repositories at the new organization. The aim is to structure it better and have separation of different aspects of OpTiMSoC.
The method of separating subtrees from the original tree with keeping
the history is straight forward using
git filter-branch. Some parts
of the history get lost, especially for the system software.
Nevertheless, we now have cut the original large repository into
smaller logical units. Some of them are only needed for installation
if you simply want to run OpTiMSoC, others are needed to build systems
or for debugging.
Finally, we struggled a bit with still allowing for a unified tree
layout, which is desirable for the documentation and ease of use. We
wanted a tree similar to the original layout and inspected
git subtree. Unfortunately both did not convince us
entirely, as we don’t want people to learn new merge strategies etc.
We first started with a simple shell script that initially creates the layout. After some more search we came to Google repo, which is a git wrapper for Android developers. While we don’t plan to use the entire feature set, we use it to distribute the tree layout. The layout is distributed as xml files and it is possible to define groups for different feature sets.
To start a layout, simply create an empty folder, download the repo script and make it executable:
mkdir optimsoc wget https://storage.googleapis.com/git-repo-downloads/repo chmod a+x repo
Now you can initialize the repository layout. The script downloads
some more files from Google’s repositories and reads the remote xml
description into a local repository of the repository files, both in
the hidden path
./repo init -u https://github.com/optimsoc/optimsoc-repo
You then synchronize the repositories and repo clones and puts them into “detached HEAD” state.
If you want to create a new feature branch for a part of OpTiMSoC you can use the repo infrastructure or simply do this with the usual git commands (create branch, stage, commit etc.). We are also still experimenting with the best development strategies.