francescmm / GitQlient

GitQlient: Multi-platform Git client written with Qt.
https://www.francescmm.com
GNU Lesser General Public License v2.1
836 stars 85 forks source link

Using (optional) libgit2 library as backend #169

Closed band-a-prend closed 3 years ago

band-a-prend commented 4 years ago

As stated on the libgit2 project:
is a portable, pure C implementation of the Git core methods provided as a re-entrant linkable library with a solid API, allowing you to write native speed custom Git applications in any language which supports C bindings.

libgit2 is licensed under a very permissive license (GPLv2 with a special Linking Exception). This basically means that you can link it (unmodified) with any kind of software without having to release its source code.

Describe the solution you'd like Some heavy operations maybe could be implemented via optional using of libgit2 functions calls.

Also library provide some creditals functions and maybe could be useful for https://github.com/francescmm/GitQlient/issues/21 implementation. Currently git+ssh creditals appears in terminal background and least if GitQlient is started from terminal.

francescmm commented 4 years ago

Hi @band-a-prend

One of the reasons why I didn't implement yet the support for libgit2 is because it's not only one library as it's sold. If I'd want credentials I'd have to install openssh. I know is widely used but it adds a heavy dependenci(es) to GitQlient, what is something I'm trying to avoid. It would bring, in addition a deep refactor to all the core cache I've done so far.

Said that, I like the optional part, although I don't think I have time for this huge optional feature right now if someone wants to try I'm open for it :smile:

Last concern that comes to my mind now is how an optional dependency would work with DEB and RPM packages.

band-a-prend commented 4 years ago

The significant refactoring for feature is a real problem. I'm also like approach of minimisation of library dependencies.

I don't know about rpm packaging but in Debian some packages have recomended dependencies that isn't abligatory but add additional features, e.g. dolphin-pluhins for dolphin file manager in kde.

Anyway the feature is really rather huge :(

francescmm commented 4 years ago

I consider it a fair demand, actually! But I thought it was good as well to have a bit of background about why is this way.

In addition to all of that I must say that this was in the beginning a fork of QGit with the aim of improving the UI and modernizing the code. I just got too excited and it has grown a lot :sweat_smile:

eraxillan commented 3 years ago

I've also tried to fork qgit to implement libgit2 support, but quickly surrendered.
libgit2 API is too low-level, and don't resemble git commands with all of it options.
I suspect implementation of all this stuff will require several months of hardcore pure C coding libgit2 itself first.

However, there is no need to rewrite entire gitqlient code with libgit2 usage.
It can be done by small steps, e.g. at first step open repo and get commit author using examples from https://github.com/libgit2/libgit2/tree/main/examples

P.S. Just idea: GitQlient can ask for sponsorship some Qt-related company dealing with open source: KDE e.v., KDAB and so on. They might be interested in lightweight Git Qt-based GUI