Пример #1
0
 private void advertiseAnyOnce(RevObject obj, string refName)
 {
     if (!obj.has(ADVERTISED))
     {
         advertiseAny(obj, refName);
     }
 }
Пример #2
0
        public void testWritePack3()
        {
            _writer.ReuseDeltas = false;
            var forcedOrder = new[]
            {
                ObjectId.FromString("82c6b885ff600be425b4ea96dee75dca255b69e7"),
                ObjectId.FromString("c59759f143fb1fe21c197981df75a7ee00290799"),
                ObjectId.FromString("aabf2ffaec9b497f0950352b3e582d73035c2035"),
                ObjectId.FromString("902d5476fa249b7abc9d84c611577a81381f0327"),
                ObjectId.FromString("5b6e7c66c276e7610d4a73c70ec1a1f7c1003259"),
                ObjectId.FromString("6ff87c4664981e4397625791c8ea3bbb5f2279a3")
            };
            var parser          = new GitSharp.Core.RevWalk.RevWalk(db);
            var forcedOrderRevs = new RevObject[forcedOrder.Length];

            for (int i = 0; i < forcedOrder.Length; i++)
            {
                forcedOrderRevs[i] = parser.parseAny(forcedOrder[i]);
            }

            CreateVerifyOpenPack(forcedOrderRevs.AsEnumerable());

            Assert.AreEqual(forcedOrder.Length, _writer.getObjectsNumber());
            VerifyObjectsOrder(forcedOrder);
            Assert.AreEqual("ed3f96b8327c7c66b0f8f70056129f0769323d86", _writer.computeName().Name);
        }
Пример #3
0
        /// <summary>
        /// Remove all entries from a map which key is the id of an object referenced
        /// by the given ObjectWalk
        /// </summary>
        /// <param name="id2File"></param>
        /// <param name="w"></param>
        /// <exception cref="NGit.Errors.MissingObjectException">NGit.Errors.MissingObjectException
        ///     </exception>
        /// <exception cref="NGit.Errors.IncorrectObjectTypeException">NGit.Errors.IncorrectObjectTypeException
        ///     </exception>
        /// <exception cref="System.IO.IOException">System.IO.IOException</exception>
        private void RemoveReferenced(IDictionary <ObjectId, FilePath> id2File, ObjectWalk
                                      w)
        {
            RevObject ro = w.Next();

            while (ro != null)
            {
                if (Sharpen.Collections.Remove(id2File, ro.Id) != null)
                {
                    if (id2File.IsEmpty())
                    {
                        return;
                    }
                }
                ro = w.Next();
            }
            ro = w.NextObject();
            while (ro != null)
            {
                if (Sharpen.Collections.Remove(id2File, ro.Id) != null)
                {
                    if (id2File.IsEmpty())
                    {
                        return;
                    }
                }
                ro = w.NextObject();
            }
        }
Пример #4
0
 /// <exception cref="System.IO.IOException"></exception>
 private bool WantSatisfied(RevObject want)
 {
     if (want.Has(SATISFIED))
     {
         return(true);
     }
     walk.ResetRetain(SAVE);
     walk.MarkStart((RevCommit)want);
     if (oldestTime != 0)
     {
         walk.SetRevFilter(CommitTimeRevFilter.After(oldestTime * 1000L));
     }
     for (; ;)
     {
         RevCommit c = walk.Next();
         if (c == null)
         {
             break;
         }
         if (c.Has(PEER_HAS))
         {
             AddCommonBase(c);
             want.Add(SATISFIED);
             return(true);
         }
     }
     return(false);
 }
Пример #5
0
        private void Want(RevObject o)
        {
            if (o.has(WANT))
            {
                return;
            }

            o.add(WANT);
            _wantAll.Add(o);

            RevTag oTag = (o as RevTag);

            while (oTag != null)
            {
                o    = oTag.getObject();
                oTag = (o as RevTag);
            }

            RevCommit oComm = (o as RevCommit);

            if (oComm != null)
            {
                _wantCommits.Add(oComm);
            }
        }
Пример #6
0
        private int MaxTimeWanted(ICollection <Ref> wants)
        {
            int maxTime = 0;

            foreach (Ref r in wants)
            {
                try
                {
                    RevObject obj = walk.ParseAny(r.GetObjectId());
                    if (obj is RevCommit)
                    {
                        int cTime = ((RevCommit)obj).CommitTime;
                        if (maxTime < cTime)
                        {
                            maxTime = cTime;
                        }
                    }
                }
                catch (IOException)
                {
                }
            }
            // We don't have it, but we want to fetch (thus fixing error).
            return(maxTime);
        }
        private void ProcessTree(RevObject obj)
        {
            try
            {
                _treeWalk.reset(obj);
                while (_treeWalk.next())
                {
                    FileMode mode  = _treeWalk.getFileMode(0);
                    int      sType = (int)mode.ObjectType;

                    switch (sType)
                    {
                    case Constants.OBJ_BLOB:
                    case Constants.OBJ_TREE:
                        _treeWalk.getObjectId(_idBuffer, 0);
                        Needs(_revWalk.lookupAny(_idBuffer, sType));
                        continue;

                    default:
                        if (FileMode.GitLink.Equals(sType))
                        {
                            continue;
                        }
                        _treeWalk.getObjectId(_idBuffer, 0);
                        throw new CorruptObjectException("Invalid mode " + mode.ObjectType + " for " + _idBuffer.Name + " " +
                                                         _treeWalk.getPathString() + " in " + obj.getId().Name + ".");
                    }
                }
            }
            catch (IOException ioe)
            {
                throw new TransportException("Cannot Read tree " + obj.Name, ioe);
            }
            obj.add(COMPLETE);
        }
Пример #8
0
        private void Want(RevObject o)
        {
            if (o.has(WANT))
            {
                return;
            }

            o.add(WANT);
            _wantAll.Add(o);

            if (o is RevCommit)
            {
                _wantCommits.Add((RevCommit)o);
            }

            else if (o is RevTag)
            {
                do
                {
                    o = ((RevTag)o).getObject();
                } while (o is RevTag);
                if (o is RevCommit)
                {
                    Want(o);
                }
            }
        }
Пример #9
0
        private RefUpdateResult UpdateImpl(RevWalk.RevWalk walk, StoreBase store)
        {
            if (isNameConflicting())
            {
                return(RefUpdateResult.LockFailure);
            }

            var @lock = new LockFile(_looseFile);

            if ([email protected]())
            {
                return(RefUpdateResult.LockFailure);
            }

            try
            {
                OldObjectId = _db.IdOf(Name);
                if (_expValue != null)
                {
                    ObjectId o = OldObjectId ?? ObjectId.ZeroId;
                    if (!AnyObjectId.equals(_expValue, o))
                    {
                        return(RefUpdateResult.LockFailure);
                    }
                }

                if (OldObjectId == null)
                {
                    return(store.Store(@lock, RefUpdateResult.New));
                }

                RevObject newObj = SafeParse(walk, _newValue);
                RevObject oldObj = SafeParse(walk, OldObjectId);
                if (newObj == oldObj)
                {
                    return(store.Store(@lock, RefUpdateResult.NoChange));
                }

                RevCommit newCom = (newObj as RevCommit);
                RevCommit oldCom = (oldObj as RevCommit);
                if (newCom != null && oldCom != null)
                {
                    if (walk.isMergedInto(oldCom, newCom))
                    {
                        return(store.Store(@lock, RefUpdateResult.FastForward));
                    }
                }

                if (IsForceUpdate)
                {
                    return(store.Store(@lock, RefUpdateResult.Forced));
                }

                return(RefUpdateResult.Rejected);
            }
            finally
            {
                @lock.Unlock();
            }
        }
Пример #10
0
        private void QueueWants(IEnumerable <Ref> want)
        {
            var inWorkQueue = new List <ObjectId>();

            foreach (Ref r in want)
            {
                ObjectId id = r.ObjectId;
                try
                {
                    RevObject obj = _revWalk.parseAny(id);
                    if (obj.has(COMPLETE))
                    {
                        continue;
                    }
                    inWorkQueue.Add(id);
                    obj.add(IN_WORK_QUEUE);
                    _workQueue.AddLast(obj);
                }
                catch (MissingObjectException)
                {
                    inWorkQueue.Add(id);
                    _workQueue.AddLast(id);
                }
                catch (IOException e)
                {
                    throw new TransportException("Cannot Read " + id.Name, e);
                }
            }
        }
Пример #11
0
        public virtual void TestObjectMovedWithinPack()
        {
            // Create an object and pack it.
            //
            Repository eden = CreateBareRepository();
            RevObject  o1   = WriteBlob(eden, "o1");

            FilePath[] out1 = Pack(eden, o1);
            NUnit.Framework.Assert.AreEqual(o1.Name, Parse(o1).Name);
            // Force close the old pack.
            //
            WhackCache();
            // Now overwrite the old pack in place. This method of creating a
            // different pack under the same file name is partially broken. We
            // should also have a different file name because the list of objects
            // within the pack has been modified.
            //
            RevObject  o2 = WriteBlob(eden, "o2");
            PackWriter pw = new PackWriter(eden);

            pw.AddObject(o2);
            pw.AddObject(o1);
            Write(out1, pw);
            pw.Release();
            // Try the old name, then the new name. The old name should cause the
            // pack to reload when it opens and the index and pack mismatch.
            //
            NUnit.Framework.Assert.AreEqual(o1.Name, Parse(o1).Name);
            NUnit.Framework.Assert.AreEqual(o2.Name, Parse(o2).Name);
        }
Пример #12
0
        /// <exception cref="System.IO.IOException"></exception>
        private void MarkLocalObjComplete(RevObject obj)
        {
            while (obj.Type == Constants.OBJ_TAG)
            {
                obj.Add(COMPLETE);
                obj = ((RevTag)obj).GetObject();
                revWalk.ParseHeaders(obj);
            }
            switch (obj.Type)
            {
            case Constants.OBJ_BLOB:
            {
                obj.Add(COMPLETE);
                break;
            }

            case Constants.OBJ_COMMIT:
            {
                PushLocalCommit((RevCommit)obj);
                break;
            }

            case Constants.OBJ_TREE:
            {
                MarkTreeComplete((RevTree)obj);
                break;
            }
            }
        }
Пример #13
0
        /// <exception cref="NGit.Errors.TransportException"></exception>
        private void QueueWants(ICollection <Ref> want)
        {
            HashSet <ObjectId> inWorkQueue = new HashSet <ObjectId>();

            foreach (Ref r in want)
            {
                ObjectId id = r.GetObjectId();
                try
                {
                    RevObject obj = revWalk.ParseAny(id);
                    if (obj.Has(COMPLETE))
                    {
                        continue;
                    }
                    if (inWorkQueue.AddItem(id))
                    {
                        obj.Add(IN_WORK_QUEUE);
                        workQueue.AddItem(obj);
                    }
                }
                catch (MissingObjectException)
                {
                    if (inWorkQueue.AddItem(id))
                    {
                        workQueue.AddItem(id);
                    }
                }
                catch (IOException e)
                {
                    throw new TransportException(MessageFormat.Format(JGitText.Get().cannotRead, id.Name
                                                                      ), e);
                }
            }
        }
Пример #14
0
        private void ProcessTag(RevObject obj)
        {
            RevTag tag = (RevTag)obj;

            Needs(tag.GetObject());
            obj.Add(COMPLETE);
        }
Пример #15
0
        private void MarkLocalObjComplete(RevObject obj)
        {
            while (obj.Type == Constants.OBJ_TAG)
            {
                obj.add(COMPLETE);
                obj.DisposeBody();
                obj = ((RevTag)obj).getObject();
                _revWalk.parseHeaders(obj);
            }

            switch (obj.Type)
            {
            case Constants.OBJ_BLOB:
                obj.add(COMPLETE);
                break;

            case Constants.OBJ_COMMIT:
                PushLocalCommit((RevCommit)obj);
                break;

            case Constants.OBJ_TREE:
                MarkTreeComplete(obj);
                break;
            }
        }
Пример #16
0
            public virtual int Compare(Ref o1, Ref o2)
            {
                try
                {
                    RevObject obj1 = this._enclosing.ParseAny(o1.GetObjectId());
                    RevObject obj2 = this._enclosing.ParseAny(o2.GetObjectId());
                    long      t1   = this.Timeof(obj1);
                    long      t2   = this.Timeof(obj2);
                    if (t1 > t2)
                    {
                        return(-1);
                    }
                    if (t1 < t2)
                    {
                        return(1);
                    }
                }
                catch (IOException)
                {
                }
                // ignore
                int cmp = this.Kind(o1) - this.Kind(o2);

                if (cmp == 0)
                {
                    cmp = Sharpen.Runtime.CompareOrdinal(o1.GetName(), o2.GetName());
                }
                return(cmp);
            }
Пример #17
0
        public void testObjectMovedToNewPack1()
        {
            // Create an object and pack it. Then remove that pack and put the
            // object into a different pack file, with some other object. We
            // still should be able to access the objects.
            //
            Core.Repository eden = createBareRepository();
            RevObject       o1   = WriteBlob(eden, "o1");

            FileInfo[] out1 = Pack(eden, o1);
            Assert.AreEqual(o1.Name, Parse(o1).Name);

            RevObject o2 = WriteBlob(eden, "o2");

            Pack(eden, o2, o1);

            // Force close, and then delete, the old pack.
            //
            WhackCache();
            Delete(out1);

            // Now here is the interesting thing. Will git figure the new
            // object exists in the new pack, and not the old one.
            //
            Assert.AreEqual(o2.Name, Parse(o2).Name);
            Assert.AreEqual(o1.Name, Parse(o1).Name);
        }
        private void ProcessTag(RevObject obj)
        {
            var tag = (RevTag)obj;

            Needs(tag.getObject());
            obj.add(COMPLETE);
        }
 /// <summary>
 /// Mark an element which used to be shallow in the client, but which
 /// should now be considered a full commit.
 /// </summary>
 /// <remarks>
 /// Mark an element which used to be shallow in the client, but which
 /// should now be considered a full commit. Any ancestors of this commit
 /// should be included in the walk, even if they are the ancestor of an
 /// uninteresting commit.
 /// </remarks>
 /// <param name="c">Commit to mark</param>
 /// <exception cref="NGit.Errors.MissingObjectException">NGit.Errors.MissingObjectException
 ///     </exception>
 /// <exception cref="NGit.Errors.IncorrectObjectTypeException">NGit.Errors.IncorrectObjectTypeException
 ///     </exception>
 /// <exception cref="System.IO.IOException">System.IO.IOException</exception>
 public virtual void MarkUnshallow(RevObject c)
 {
     if (c is RevCommit)
     {
         c.Add(UNSHALLOW);
     }
     base.MarkStart(c);
 }
 private void ProcessBlob(RevObject obj)
 {
     if (!_local.HasObject(obj))
     {
         throw new TransportException("Cannot Read blob " + obj.Name, new MissingObjectException(obj, Constants.TYPE_BLOB));
     }
     obj.add(COMPLETE);
 }
Пример #21
0
 private void AddCommonBase(RevObject o)
 {
     if (o.has(COMMON))
     {
         return;
     }
     o.add(COMMON);
     _commonBase.Add(o);
 }
Пример #22
0
 private void AddCommonBase(RevObject o)
 {
     if (!o.Has(COMMON))
     {
         o.Add(COMMON);
         commonBase.AddItem(o);
         okToGiveUp = null;
     }
 }
Пример #23
0
        private void Process(ObjectId id)
        {
            RevObject obj;

            try
            {
                RevObject ro = (id as RevObject);
                if (ro != null)
                {
                    obj = ro;
                    if (obj.has(COMPLETE))
                    {
                        return;
                    }
                    _revWalk.parseHeaders(obj);
                }
                else
                {
                    obj = _revWalk.parseAny(id);
                    if (obj.has(COMPLETE))
                    {
                        return;
                    }
                }
            }
            catch (IOException e)
            {
                throw new TransportException("Cannot Read " + id.Name, e);
            }

            obj.DisposeBody();

            switch (obj.Type)
            {
            case Constants.OBJ_BLOB:
                ProcessBlob(obj);
                break;

            case Constants.OBJ_TREE:
                ProcessTree(obj);
                break;

            case Constants.OBJ_COMMIT:
                ProcessCommit(obj);
                break;

            case Constants.OBJ_TAG:
                ProcessTag(obj);
                break;

            default:
                throw new TransportException("Unknown object type " + id.Name + " (" + obj.Type + ")");
            }

            _fetchErrors.Remove(id.Copy());
        }
Пример #24
0
 /*
  * Construct an annotated tag object pointing at another object.
  * <p>
  * The tagger is the committer identity, at the current time as specified by
  * {@link #tick(int)}. The time is not increased.
  * <p>
  * The tag message is empty.
  *
  * @param name
  *            name of the tag. Traditionally a tag name should not start
  *            with {@code refs/tags/}.
  * @param dst
  *            object the tag should be pointed at.
  * @return the annotated tag object.
  * @throws Exception
  */
 public RevTag tag(String name, RevObject dst)
 {
     global::GitSharp.Core.Tag t = new global::GitSharp.Core.Tag(db);
     t.TagType = (Constants.typeString(dst.Type));
     t.Id      = (dst.ToObjectId());
     t.TagName = (name);
     t.Tagger  = (new PersonIdent(committer, now.MillisToUtcDateTime()));
     t.Message = ("");
     return((RevTag)pool.lookupAny(writer.WriteTag(t), Constants.OBJ_TAG));
 }
Пример #25
0
        public void testObjectInNewPack()
        {
            // Create a new object in a new pack, and test that it is present.
            //
            Core.Repository eden = createBareRepository();
            RevObject       o1   = WriteBlob(eden, "o1");

            Pack(eden, o1);
            Assert.AreEqual(o1.Name, Parse(o1).Name);
        }
Пример #26
0
        private void MarkCommon(RevObject obj)
        {
            obj.add(COMMON);
            RevCommit oComm = (obj as RevCommit);

            if (oComm != null)
            {
                oComm.carry(COMMON);
            }
        }
Пример #27
0
        public virtual void TestObjectInNewPack()
        {
            // Create a new object in a new pack, and test that it is present.
            //
            Repository eden = CreateBareRepository();
            RevObject  o1   = WriteBlob(eden, "o1");

            Pack(eden, o1);
            NUnit.Framework.Assert.AreEqual(o1.Name, Parse(o1).Name);
        }
        private void ProcessCommit(RevObject obj)
        {
            var commit = (RevCommit)obj;

            MarkLocalCommitsComplete(commit.CommitTime);
            Needs(commit.Tree);
            foreach (RevCommit p in commit.Parents)
            {
                Needs(p);
            }
            obj.add(COMPLETE);
        }
Пример #29
0
 private void Needs(RevObject obj)
 {
     if (obj.Has(COMPLETE))
     {
         return;
     }
     if (!obj.Has(IN_WORK_QUEUE))
     {
         obj.Add(IN_WORK_QUEUE);
         workQueue.AddItem(obj);
     }
 }
Пример #30
0
        protected RevTag Tag(string name, RevObject dst)
        {
            var t = new Core.Tag(db)
            {
                TagType = Constants.typeString(dst.Type),
                Id      = dst.ToObjectId(),
                TagName = name,
                Tagger  = new PersonIdent(committer, (nowTick).MillisToDateTime()),
                Message = string.Empty
            };

            return((RevTag)rw.lookupAny(_ow.WriteTag(t), Constants.OBJ_TAG));
        }
Пример #31
0
 public void add(RevObject c)
 {
     Block b = tail;
     if (b == null)
     {
         b = free.newBlock();
         b.add(c);
         head = b;
         tail = b;
         return;
     }
     else if (b.isFull())
     {
         b = free.newBlock();
         tail.next = b;
         tail = b;
     }
     b.add(c);
 }
Пример #32
0
 public void add(RevObject c)
 {
     objects[tailIndex++] = c;
 }