aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-09-10 14:30:00 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-09-10 14:30:00 +0300
commit9e4a2eb24ad1882cee1cc9d43f0af0faff2ba861 (patch)
tree553b88553729097418a697c628b8b8046e34cdd9 /Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs
parent8e0ac4d5d4f097753321d64d3ca2d47b2f6b3770 (diff)
downloadTango-9e4a2eb24ad1882cee1cc9d43f0af0faff2ba861.tar.gz
Tango-9e4a2eb24ad1882cee1cc9d43f0af0faff2ba861.zip
Working on Tango.Git and Tag creation upon release.
Diffstat (limited to 'Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs')
-rw-r--r--Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs132
1 files changed, 132 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs b/Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs
new file mode 100644
index 000000000..e7fdf8e32
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Git/GitRepositoryManager.cs
@@ -0,0 +1,132 @@
+using LibGit2Sharp;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+
+namespace Tango.Git
+{
+ public class GitRepositoryManager : IDisposable
+ {
+ private Repository _repo;
+ private String _pat;
+ private String _userEmail;
+
+ public event EventHandler<TangoProgressChangedEventArgs<double>> Progress;
+
+ public GitRepositoryManager(String localFolder, String userEmail, String personalAccessToken)
+ {
+ _pat = personalAccessToken;
+ _userEmail = userEmail;
+ _repo = new Repository(localFolder);
+ }
+
+ public void CreatePushTag(String name, String description, String userName)
+ {
+ var tag = _repo.ApplyTag(name, new Signature(userName, _userEmail, DateTime.Now), description);
+
+ _repo.Network.Push(_repo.Network.Remotes.First(), tag.CanonicalName, new PushOptions()
+ {
+ CredentialsProvider = new LibGit2Sharp.Handlers.CredentialsHandler(CredentialsHandlerMethod),
+ OnPushTransferProgress = new LibGit2Sharp.Handlers.PushTransferProgressHandler(PushTagProgressHandlerMethod)
+ });
+ }
+
+ private bool PushTagProgressHandlerMethod(int current, int total, long bytes)
+ {
+ //TODO: Implement via TangoProgress & event...
+ RaiseProgress("Pushing Tag...", false, 0, total);
+ return true;
+ }
+
+ public List<GitCommit> GetOutgoingCommits(String branchName = "master")
+ {
+ List<GitCommit> commits = new List<GitCommit>();
+
+ var branch = _repo.Branches.FirstOrDefault(x => x.FriendlyName == branchName);
+
+ if (branch.TrackingDetails.AheadBy != null)
+ {
+ foreach (var commit in _repo.Commits.Take(branch.TrackingDetails.AheadBy.Value))
+ {
+ commits.Add(new GitCommit()
+ {
+ Message = commit.Message
+ });
+ }
+ }
+
+ return commits;
+ }
+
+ public List<GitCommit> GetIncomingCommits()
+ {
+ List<GitCommit> commits = new List<GitCommit>();
+
+ var trackingBranch = _repo.Head.TrackedBranch;
+ var log = _repo.Commits.QueryBy(new CommitFilter { IncludeReachableFrom = trackingBranch.Tip.Id, ExcludeReachableFrom = _repo.Head.Tip.Id });
+
+ var count = log.Count();
+
+ foreach (var commit in log)
+ {
+ commits.Add(new GitCommit()
+ {
+ Message = commit.Message
+ });
+ }
+
+ return commits;
+ }
+
+ public List<GitFile> GetChanges()
+ {
+ List<GitFile> files = new List<GitFile>();
+
+ var status = _repo.RetrieveStatus();
+
+ foreach (var file in status.Added)
+ {
+ files.Add(new GitFile()
+ {
+ File = file.FilePath,
+ State = GitFileState.Added
+ });
+ }
+
+ foreach (var file in status.Modified)
+ {
+ files.Add(new GitFile()
+ {
+ File = file.FilePath,
+ State = GitFileState.Modified
+ });
+ }
+
+ return files;
+ }
+
+ private Credentials CredentialsHandlerMethod(string url, string usernameFromUrl, SupportedCredentialTypes types)
+ {
+ return new UsernamePasswordCredentials { Username = _userEmail, Password = _pat };
+ }
+
+ protected virtual void RaiseProgress(String message, bool isIndeterminate = true, double value = 0, double maximum = 100)
+ {
+ Progress?.Invoke(this, new TangoProgressChangedEventArgs<double>(new TangoProgress<double>()
+ {
+ IsIndeterminate = isIndeterminate,
+ Message = message,
+ Value = value,
+ Maximum = maximum
+ }));
+ }
+
+ public void Dispose()
+ {
+ _repo.Dispose();
+ }
+ }
+}