/// <summary>Returns revision with specified SHA1 or <c>null</c> if such revision does not exist.</summary> /// <param name="sha1">SHA-1 of required revision.</param> /// <returns>Revision with specified SHA-1 or <c>null</c> if such revision does not exist.</returns> /// <remarks>If revision is not present in cache, it will be queried from git repo.</remarks> public Revision TryGetRevision(Hash sha1) { lock (SyncRoot) { Revision revision; if (_revisions.TryGetValue(sha1, out revision)) { if (!revision.IsLoaded) { revision.Load(); } } else { RevisionData revisionData = null; try { revisionData = Repository.Accessor.QueryRevision.Invoke( new QueryRevisionParameters(sha1)); } catch (GitException) { return(null); } revision = ObjectFactories.CreateRevision(Repository, revisionData); } return(revision); } }
/// <summary> /// Transforms list of <see cref="RevisionData"/> into array of <see cref="Revision"/> objects /// creating, caching and updating revisions if necessary. /// </summary> /// <param name="data">List of <see cref="RevisionData"/> objects.</param> /// <returns>Array of corresponding <see cref="Revision"/> objects.</returns> internal Revision[] Resolve(IList <RevisionData> data) { Verify.Argument.IsNotNull(data, nameof(data)); var res = new Revision[data.Count]; lock (SyncRoot) { for (int i = 0; i < data.Count; ++i) { var revisionData = data[i]; Revision revision; if (_revisions.TryGetValue(revisionData.SHA1, out revision)) { if (!revision.IsLoaded) { ObjectFactories.UpdateRevision(revision, revisionData); } } else { revision = ObjectFactories.CreateRevision(Repository, revisionData); } res[i] = revision; } } return(res); }
private StashedState OnStashSaveCompleted(bool created) { if (created) { var stashTopData = Repository.Accessor.QueryStashTop.Invoke( new QueryStashTopParameters(true)); Revision revision; lock (Repository.Revisions.SyncRoot) { revision = ObjectFactories.CreateRevision(Repository, stashTopData); } var res = new StashedState(Repository, 0, revision); lock (SyncRoot) { _stash.Insert(0, res); for (int i = 1; i < _stash.Count; ++i) { ++_stash[i].Index; } InvokeStashedStateCreated(res); } Repository.OnCommitCreated(res.Revision); Repository.Status.Refresh(); return(res); } else { return(null); } }
/// <summary> /// Evaluate commit which is targeted by this <see cref="IRevisionPointer"/>. /// </summary> /// <returns> /// Commit which is pointed by this <see cref="IRevisionPointer"/>. /// </returns> public Revision Dereference() { var revisionData = _reference.Repository.Accessor.Dereference.Invoke( new DereferenceParameters(FullName) { LoadRevisionData = true, }); return(ObjectFactories.CreateRevision(_reference.Repository, revisionData)); }
/// <summary>Returns revision with specified SHA1.</summary> /// <param name="sha1">SHA-1 of required revision.</param> /// <returns>Revision with specified SHA-1.</returns> /// <exception cref="ArgumentException">Invalid SHA-1 expression.</exception> /// <exception cref="GitException">Revision does not exist.</exception> /// <remarks>If revision is not present in cache, it will be queried from git repo.</remarks> public Revision this[Hash sha1] { get { lock (SyncRoot) { Revision revision; if (_revisions.TryGetValue(sha1, out revision)) { if (!revision.IsLoaded) { revision.Load(); } } else { var revisionData = Repository.Accessor.QueryRevision.Invoke( new QueryRevisionParameters(sha1)); revision = ObjectFactories.CreateRevision(Repository, revisionData); } return(revision); } } }