public void Fetch (IProgressMonitor monitor) { string remote = GetCurrentRemote (); if (remote == null) throw new InvalidOperationException ("No remotes defined"); monitor.Log.WriteLine (GettextCatalog.GetString ("Fetching from '{0}'", remote)); var fetch = new NGit.Api.Git (RootRepository).Fetch (); using (var gm = new GitMonitor (monitor)) { fetch.SetRemote (remote); fetch.SetProgressMonitor (gm); fetch.Call (); } monitor.Step (1); }
public void Push (IProgressMonitor monitor, string remote, string remoteBranch) { string remoteRef = "refs/heads/" + remoteBranch; IEnumerable<PushResult> res; var push = new NGit.Api.Git (RootRepository).Push (); // We only have one pushed branch. push.SetRemote (remote).SetRefSpecs (new RefSpec (remoteRef)); using (var gm = new GitMonitor (monitor)) { push.SetProgressMonitor (gm); res = push.Call (); } foreach (var pr in res) { var remoteUpdate = pr.GetRemoteUpdate (remoteRef); switch (remoteUpdate.GetStatus ()) { case RemoteRefUpdate.Status.UP_TO_DATE: monitor.ReportSuccess (GettextCatalog.GetString ("Remote branch is up to date.")); break; case RemoteRefUpdate.Status.REJECTED_NODELETE: monitor.ReportError (GettextCatalog.GetString ("The server is configured to deny deletion of the branch"), null); break; case RemoteRefUpdate.Status.REJECTED_NONFASTFORWARD: monitor.ReportError (GettextCatalog.GetString ("The update is a non-fast-forward update. Merge the remote changes before pushing again."), null); break; case RemoteRefUpdate.Status.OK: monitor.ReportSuccess (GettextCatalog.GetString ("Push operation successfully completed.")); // Update the remote branch ObjectId headId = remoteUpdate.GetNewObjectId (); RefUpdate updateRef = RootRepository.UpdateRef (Constants.R_REMOTES + remote + "/" + remoteBranch); updateRef.SetNewObjectId(headId); updateRef.Update(); break; default: string msg = remoteUpdate.GetMessage (); msg = !string.IsNullOrEmpty (msg) ? msg : GettextCatalog.GetString ("Push operation failed"); monitor.ReportError (msg, null); break; } } }