Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
            /// <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));
            }
Пример #5
0
 /// <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);
         }
     }
 }