githandler.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "githandler.h"
  2. #include <QDebug>
  3. #include <QUrl>
  4. #include <qqml.h>
  5. #include <gitrepository.h>
  6. #include <git2.h>
  7. GitHandler::GitHandler() : QObject()
  8. ,m_repositories(new RepositoryModel(this))
  9. {
  10. git_libgit2_init();
  11. }
  12. GitHandler::~GitHandler()
  13. {
  14. git_libgit2_shutdown();
  15. }
  16. void GitHandler::open(const QUrl &url)
  17. {
  18. if(url.isLocalFile()) {
  19. open(url.toLocalFile());
  20. }
  21. }
  22. void GitHandler::open(const QString &path)
  23. {
  24. git_buf root = {0,0,0};
  25. if(git_repository_discover(&root, path.toUtf8().data(), 0, NULL) != 0) {
  26. qDebug() << lastError();
  27. return;
  28. }
  29. GitRepository* repo = new GitRepository(QString::fromUtf8(root.ptr, root.size));
  30. if(!repo->isValid()) {
  31. qDebug() << lastError();
  32. return;
  33. }
  34. m_repositories->addRepository(repo);
  35. }
  36. QString GitHandler::lastError() const
  37. {
  38. const git_error *e = giterr_last();
  39. if(e) {
  40. return QString("(%1): %2").arg(e->klass).arg(e->message);
  41. giterr_clear();
  42. }
  43. giterr_clear();
  44. return QString();
  45. }