Linvis: Showing the Integration of Commits into Linux

Linvis is a tool designed to show the concepts behind the merge-tree, which is a structure introduced by Evan Wilde and described in further detail in the paper. The Merge-tree is a structure that shows how a commit is integrated into the master branch of a repository. Using the merge-tree we're able to create simple visualizations and clear summarizations, filtering out unrelated repository events and only showing what is important.

All of the following examples show information about merge 8eb88c80d444fd249edaa7d895666cde79e7b3b8.

Search

Linvis support searching for commits using full-text searching. It takes into account the commit hash, keywords from the commit log subject and log body, the author name, the committed and authored date, and the file names. Entering information into this field will filter out the repository events that do not have any relevance to any attribute. If you know exactly which commit to navigate to, it is best to use the commit hash, as it will be the only one showing. Providing conflicting information will likely result in no results being returned.

The search results are grouped by the integrating merge, which is the root the of the merge trees. The commit groups are arranged according to the relevance of the contents of the group.

Click the Search button in the top bar to access the search page.

Visualizations

One of the primary goals behind the merge-tree model was drawing clean visualizations. As such, we implemented three visualizations into Linvis:

List Tree

List Tree Visualization

The tree is represented by indented lists. Each item is a link to the corresponding commit.

Pack Tree

The tree is represented as nested sets. The root is the outer-most node containing all other nodes. The commits are the nodes containing no other nodes.

Reingold-Tilford Tree

The tree is represented in the classic computer-science tree metaphor. The root is at the top with the children hanging below it. Commits are the leaves at the bottom.

In the Pack Tree and Reingold-Tilford tree visualizations, merges are indicated in shades of blue, while the commits are white. The pumpkin-orange indicates which node is currently selected. In all three visualizations, the root is currently selected.

Summarization

Linvis is able to provide aggregated summarizations of the contents at a merge, listing information about the:

Authors

The authorship table shows an aggregated summarization of the authors who contributed to a merge. We can see the authors, the number of files they modified, the number of lines added and removed, the sum, and the delta of the changes they made. Expanding the drop-down shows details on which files were modified, which commits made the changes to the file, the lines added and removed, the total lines changed, and the delta for each file.

Files

The files table shows an aggregated summarization of the files that were modified in a merge. We can see the file name, the number of lines added to and removed from the file, the sum of the line changes, and the difference. Expanding the drop-down shows the commit(s) that made the changes.

Modules

Modules are a concept that is specific to the Linux kernel design. The commit log subject contains information about which subsystem to which it belongs. The content up to the first colon indicates where changes are being made. For example ALSA: Fix debugfs_create_dir's error checking method for sound/soc/ modifies a component of ALSA, the sound server in Linux. This table shows an aggregated view of which modules are modified by the commits in a merge. The details drop-down provides a listing of the commits that make the changes.

Paper

This is implemented as part of the primary contribution of our paper Merge-Tree: Visualizing the Integration of Commits into Linux.

With an average of more than 900 top-level merges into the Linux kernel per release, many containing hundreds of commits and some containing thousands, maintenance of older versions of the kernel becomes nearly impossible. Various commercial products, such as the Android platform, run older versions of the kernel. Due to security, performance, and changing hardware needs, maintainers must understand what changes (commits) are added to the current version of the kernel since the last time they inspected it in order to make the necessary patches. Current tools provide information about repositories through the directed acyclic graph (DAG) of the repository, which is helpful for smaller projects. However, with the scale and number of branches in the kernel the DAG becomes overwhelming very quickly. Furthermore, the DAG contains every ancestor of every commit, while maintainers are more interested in how and when a commit arrives to the official Linux repository. In this paper, we propose the merge-tree, a simplified transformation of the DAG of the Linux git repository that shows the way in which commits are merged into the master branch of Linux. Using the merge-tree, we build Linvis, a tool that is designed to allow users to explore how commits are merged into the Linux kernel.