News for hackers. Stuff that matters.
Re:Gitqlite: Query Git Repositories with SQL by patrickdevivo on Saturday July 04, 2020 @03:28PM (#23734348)
Creator here! Thanks for submitting - I hope people find this interesting. I’m excited to explore more use cases beyond listing and reformatting git log output! There’s a similar project called gitbase, but I had difficulty just spinning that up for ad-hoc CLI querying so created this project in hope of a better UX for that type of use case. It uses SQLite virtual tables, which was something I had been meaning to play around with. This seemed like a cool use of them!
Re:Gitqlite: Query Git Repositories with SQL by diegoholiveira on Saturday July 04, 2020 @05:19PM (#23734980)
A friend of mine did something similar a few years ago: https://github.com/filhodanuvem/gitql
Re:Gitqlite: Query Git Repositories with SQL by sdesol on Saturday July 04, 2020 @07:29PM (#23735595)
Cool. It's taken me years to find an efficient (and most importantly, easily debuggable) way to transfer Git's history to SQL. Since you are looking for use cases, I'll share with you some of the ways that I'm leveraging SQL to help drive code analytics for Git.

Once Git's history is in an easy to query state, you can do some interesting things. For example, if you aggregate all the contributors in a Git repo, you can produce something like this:

https://imgur.com/tT4DSJc

which makes it very easy to identify project investment/commitment. In the above example, you can see that Microsoft is heavily invested in vscode, as a lot of the developers that are contributing to it, have been doing so for more than 3 years. And if you aggregate contributions by file types, you can see how people are contributing to it as well. In the case of vscode, the contributions are mainly TypeScript contributions.

Here is another contributor example, which shows GitLab contributions:

https://imgur.com/3UU6Kda

What the above analytics shows, is GitLab has a lot of contributors and a lot of them are new contributors (6 months or less), which makes sense since they were hiring aggressively not too long ago. Not sure if this is still the case with Covid-19, but this can be easily confirmed 6 months from now, with the same chart.

Now for something more interesting in my opinion, which is code review analytics.

https://imgur.com/xWH6QFl

It has taken a lot of research and development to get to this point, but once you can easily query Git, you can surface very interesting things by cross referencing it with external systems, like GitHub's pull request system.

In the pull requests screen shot, I created a window that only considers open pull requests that were updated within the last 30 days. With this type of window, I can see what has changed across dozens, if not hundreds or thousands of pull requests. For example, I can easily identify file collisions, between pull requests. When was their last commit, and so forth.

I'm still working on refining my code review analytics, but the goal is to get it to an advanced state, where you can see exactly what is happening between pull requests and to derive insights from those requests.

So those are just some of the use cases that I've developed, which leverages being able to query a Git's history with SQL.

Re:Gitqlite: Query Git Repositories with SQL by jacques_chester on Saturday July 04, 2020 @08:42PM (#23735875)
Do you have a schema somewhere? I've been working on a dataset that includes git repositories and I've been muddling through it slowly. It's built around a dataset of ~126k builds I collected some time back, plus ~5k Pivotal Tracker stories for the same time period. Covers about 2.5 years of 3 teams.

The hardest parts have been (1) dealing with actual lines, which I gave up on and (2) very busy robot repos with hundreds of thousands of commits.

My goal is to release the data as a single integrated set, but there's a ways to go. For one thing I need to find everyone in it to ask if they're OK with me doing so.

Re:Gitqlite: Query Git Repositories with SQL by sdesol on Saturday July 04, 2020 @09:37PM (#23736059)
Sorry, I haven't published it yet. It honestly took a long time to develop the schemas, but I might publish it the future. The issue right now is, I'm a single founder so I really have to be smart with my time and publishing things will just add to my work load.

My goal is to make the indexed data easily accessible, so that you can easily cross reference Git's history with whatever external systems you may have. What I've created is really a search and analytics engine for Git, which is designed for querying via SQL or through a REST interface.

On my simple dev machine which has 32gb of RAM, 1 TB of NVME storage, and a 2700x CPU, the search engine can easily index hundreds of million changes.

https://imgur.com/WoS4Nr6

The search engine can run on as little as 500MB of RAM though (with 2GB of swap space), but with this kind of hardware, you can only index small repositories.

Are these repos public and on GitHub? If so, I can include them in my indexing in the future.

Re:Gitqlite: Query Git Repositories with SQL by jacques_chester on Sunday July 05, 2020 @02:08PM (#23740609)
> The issue right now is, I'm a single founder so I really have to be smart with my time and publishing things will just add to my work load.

Understood.

Do you store lines or full blobs at all? That's really where I came unglued on my first pass. I still want to reintroduce them somehow so that researchers can study changes more closely.

> On my simple dev machine which has 32gb of RAM, 1 TB of NVME storage, and a 2700x CPU, the search engine can easily index hundreds of million changes.

There's nothing quite like a good database on bulk hardware, is there?

> Are these repos public and on GitHub? If so, I can include them in my indexing in the future.

They are, but I am not sure about pointing them out just yet. What I'm doing looks to be a first for VMware, so we're moving cautiously.

Re:Gitqlite: Query Git Repositories with SQL by sdesol on Sunday July 05, 2020 @03:42PM (#23741298)
> Do you store lines or full blobs at all? That's really where I came unglued on my first pass. I still want to reintroduce them somehow so that researchers can study changes more closely

No, since Git does a pretty good job of efficiently storing blobs. I would like to be able to execute

"select blob from blobs where sha=<some sha>"

but I can't justify the overhead of storing this in a database. This isn't to say I won't in the future, but if I do, I'll probably introduce a key/value DB for this, instead of using postgres. I do index blobs and diffs with lucene though. I also store the diffs in postgres.

Since Git does a very good job of storing blobs, I really can't justify using a DB just yet.

> What I'm doing looks to be a first for VMware, so we're moving cautiously

Understood.

Re:Gitqlite: Query Git Repositories with SQL by Matt3o12_ on Sunday July 05, 2020 @12:00AM (#23736502)
That seems like a really cool project, but I couldn't figure out how exactly the where filter was implemented. Can you point me to the code that implements it?
Re:Gitqlite: Query Git Repositories with SQL by vcryan on Saturday July 04, 2020 @03:55PM (#23734512)
Can you query multiple repos at with one query? Interesting tool!
Re:Gitqlite: Query Git Repositories with SQL by patrickdevivo on Saturday July 04, 2020 @05:47PM (#23735140)
At the moment, not easily, but someone else just asked about that and I think it's worth looking into! It makes sense and could be a cool use case to run queries on all the key repos in an org or project
Re:Gitqlite: Query Git Repositories with SQL by princesse on Saturday July 04, 2020 @06:14PM (#23735289)
This would make the difference between neat and useful for my team.
Re:Gitqlite: Query Git Repositories with SQL by vcryan on Sunday July 05, 2020 @11:01PM (#23744274)
same!