Analyze KDE project health with git! – Adventures in Linux and KDE

[keyword]


I was reading the latest edition of Kevin Ottens’ excellent weekly web review and one particular article caught my eye: “The Git commands I run before reading any codeIn a nutshell you can use the git version control tool to quickly assess a project’s health, what breaks, who is a key figure, how bad emergencies are, and so on.

So useful!

I immediately wanted to apply it to KDE projects. So I took the commands from the post and made some shell aliases and functions for convenience:

Now let’s run it on Plasma. Here is plasma-workspacethe core of plasma:

$ git clone ssh://git@invent.kde.org/plasma/plasma-workspace.git
$ cd plasma workspace
$repo analysis
What changes after destiny?
1519
38 CMakeLists.txt
29 shell/shellcorona.cpp
24 runners/services/servicerunner.cpp
21 wallpapers/image/imagepackage/contents/ui/config.qml
19 libnotificationmanager/notifications.cpp
18 shell/org.kde.plasmashell.desktop.cmake
18 devicenotifications/devicenotifications.cpp
17 kcms/lookandfeel/kcm.cpp
16 backgrounds/image/plugin/model/packagelistmodel.cpp
16 kcms/cursortheme/xcursor/xcursor.knsrc
15 backgrounds/image/plugin/model/imagelistmodel.cpp
15 applets/notifications/global/Globals.qml
15 applets/devicenotifier/devicecontrol.cpp
14 wallpapers/image/plugin/imagebackend.cpp
14 shell/panelview.cpp
14 .kde-ci.yml
14 applets/systemtray/systemtray.cpp
13 runners/services/autotests/servicerunnertest.cpp
12 krunner/qml/RunCommand.qml

What breaks a lot?
225 shell/shellcorona.cpp
183 shell/panelview.cpp
83 CMakeLists.txt
74 applets/systemtray/package/contents/ui/main.qml
71 applets/digitalclock/package/contents/ui/DigitalClock.qml
63 klipper/klipper.cpp
62 applets/notifications/package/contents/ui/NotificationItem.qml
58 wallpapers/image/imagepackage/contents/ui/config.qml
56 shell/desktopview.cpp
56 libtaskmanager/tasksmodel.cpp
54 shell/main.cpp
54 applets/systemtray/systemtray.cpp
53 shell/shellcorona.h
52 krunner/view.cpp
48 applets/digitalclock/package/contents/ui/CalendarView.qml
47 runners/services/servicerunner.cpp
46 wallpapers/image/imagepackage/contents/ui/main.qml
45 applets/notifications/package/contents/ui/NotificationPopup.qml
44 applets/systemtray/package/contents/ui/ExpandedRepresentation.qml
43 startkde/startplasma.cpp

And what were the emergencies?
4f526a7bd1 Return “applets/systemtray: prevent popups from overlapping the panel”
dca5788fee look and feel/components: Return Plasma::setupPlasmaStyle
2c0fd34541 Return “ContainmentLayoutManager: also dispatch recursive mouse release events”
b6b230f4ff Return “Read selenium-webdriver-by-spi-run-location from CMake”
b8651b56f6 hotfix: Remove document translations without current document
1f43f576e8 Return “Add forceImageAnimation property to force animated image play”
f0349b6c81 hotfix: remove stray .po file
3ff7ae4269 Return “CI: enable parallel testing”
83bebc7896 Return “Limit evaluateScript execution to 2 seconds”
4f45f672be Return “kcms/componentchooser: Don’t offer NoDisplay services”
3bf0ff8f56 Return “Disable linux-qt6-next while fixing the regression in Qt”
80996f0633 Return “kcms/wallpaper: set role names for WallpaperConfigModel”

What is the project’s momentum over the past 5 years?
148 2021-05
87 2021-06
62 2021-07
85 2021-08
121 2021-09
106 2021-10
146 2021-11
190 2021-12
191 2022-01
84 2022-02
168 2022-03
130 2022-04
146 2022-05
141 2022-06
136 2022-07
107 2022-08
232 2022-09
234 2022-10
181 2022-11
150 2022-12
154 2023-01
161 2023-02
156 2023-03
156 2023-04
163 2023-05
137 2023-06
186 2023-07
190 2023-08
275 2023-09
226 2023-10
283 2023-11
157 2023-12
131 2024-01
147 2024-02
249 2024-03
180 2024-04
188 2024-05
158 2024-06
128 2024-07
146 2024-08
169 2024-09
156 2024-10
116 2024-11
98 2024-12
145 2025-01
126 2025-02
120 2025-03
116 2025-04
131 2025-05
131 2025-06
132 2025-07
115 2025-08
110 2025-09
97 2025-10
147 2025-11
114 2025-12
140 2026-01
131 2026-02
119 2026-03
44 2026-04

Who has been driving this project for the past year?
116 Vlad Zahorodnii
113 Nicolas Fella
87 Christoph Wolk
82 Fushan Won
78 Nate Graham
66 Kai Uwe Wedding
48 Bohdan Onofriichuk
37 Harald Sitter
34 Tobias Fella
31 Marco Martin
30 David Edmundson
25 Akseli Lahtinen
21 Ismael Asensio
17 David Redondo
16 Niccolò Venerandi
15 Bhushan Shah
11 Alexander Lohnau
11 Kristen McWilliam
9 Oliver Beard
9 Shubham Arora
8 Alexey Rochev
8 Han Young
8 Philipp Kiemle
7 Albert Astals Cid
6 Alex Pol
6 Meven Car
5 Devin Lin
5 Joshua Goins
4 Alexander Wilms
4 Arjen Hiemstra

And what about forever?
1543 Fushan Won
1497 Marco Martin
1374 Kai Uwe Wedding
1030 David Edmundson
772 Nate Graham
658 Alexander Lohnau
551 Aleix Pol
548 Nicolas Fella
438 ivan tkachenko
385 Oak Hein
264 Sebastian Kügler
250 Martin Gräßlin
238 Harald Sitter
232 Martin Klapetek
223 Jonathan Riddell
207 Vlad Zahorodnii
194 David Redondo
190 Friedrich WH Kossebau
189 Laurent Montel
144 Bhushan Shah
134 Christoph Wolk
134 Ismael Asensio
126 Lukáš Tinkl
121 Niccolo Venerandi
117 Méven Motor
105 Natalie Clarius
91 Konrad Materka
80 Vishesh Handa
80 Volker Krause
79 Ivan Čukic

ShellCorona to change a lot and break a lot is no great surprise to me; it is clumsy and complicated. We have to do something about it. The number of emergencies doesn’t look too bad, and momentum feels good too. The project also seems to have a good, healthy diversity of contributors. Outstanding!

It was quite enlightening to run these tools on KDE projects that I am both more and less familiar with. Try it!



Eva Grace

Eva Grace

Leave a Reply

Your email address will not be published. Required fields are marked *