Exemple #1
0
        public void testNewNamespaceConflictWithLoosePrefixNameExists()
        {
            string    newRef = "refs/heads/z";
            RefUpdate ru     = updateRef(newRef);
            RevCommit newid  = new RevCommit(ru.getNewObjectId())
            {
                // empty
            };

            ru.setNewObjectId(newid);
            RefUpdate.RefUpdateResult update = ru.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.NEW, update);
            // end setup
            string    newRef2 = "refs/heads/z/a";
            RefUpdate ru2     = updateRef(newRef2);
            RevCommit newid2  = new RevCommit(ru2.getNewObjectId())
            {
                // empty
            };

            ru.setNewObjectId(newid2);
            RefUpdate.RefUpdateResult update2 = ru2.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.LOCK_FAILURE, update2);
            Assert.AreEqual(1, db.ReflogReader("refs/heads/z").getReverseEntries().Count);
            Assert.AreEqual(0, db.ReflogReader("HEAD").getReverseEntries().Count);
        }
Exemple #2
0
        public virtual void testReadAllIncludingSymrefs()
        {
            ObjectId  masterId  = db.Resolve("refs/heads/master");
            RefUpdate updateRef = db.UpdateRef("refs/remotes/origin/master");

            updateRef.setNewObjectId(masterId);
            updateRef.setForceUpdate(true);
            updateRef.update();
            writeSymref("refs/remotes/origin/HEAD", "refs/remotes/origin/master");

            ObjectId r = db.Resolve("refs/remotes/origin/HEAD");

            Assert.AreEqual(masterId, r);

            IDictionary <string, global::GitSharp.Core.Ref> allRefs = db.getAllRefs();

            global::GitSharp.Core.Ref refHEAD = allRefs["refs/remotes/origin/HEAD"];
            Assert.IsNotNull(refHEAD);
            Assert.AreEqual(masterId, refHEAD.ObjectId);
            Assert.IsFalse(refHEAD.IsPeeled);
            Assert.IsNull(refHEAD.PeeledObjectId);

            global::GitSharp.Core.Ref refmaster = allRefs["refs/remotes/origin/master"];
            Assert.AreEqual(masterId, refmaster.ObjectId);
            Assert.IsFalse(refmaster.IsPeeled);
            Assert.IsNull(refmaster.PeeledObjectId);
        }
Exemple #3
0
        public void testNoCacheObjectIdSubclass()
        {
            string    newRef = "refs/heads/abc";
            RefUpdate ru     = updateRef(newRef);
            RevCommit newid  = new RevCommit(ru.getNewObjectId())
            {
                // empty
            };

            ru.setNewObjectId(newid);
            RefUpdate.RefUpdateResult update = ru.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.NEW, update);
            Core.Ref r = db.getAllRefs()[newRef];
            Assert.IsNotNull(r);
            Assert.AreEqual(newRef, r.Name);
            Assert.IsNotNull(r.ObjectId);
            Assert.AreNotSame(newid, r.ObjectId);
            Assert.AreSame(typeof(ObjectId), r.ObjectId.GetType());
            Assert.AreEqual(newid.Copy(), r.ObjectId);
            IList <ReflogReader.Entry> reverseEntries1 = db.ReflogReader("refs/heads/abc").getReverseEntries();

            ReflogReader.Entry entry1 = reverseEntries1[0];
            Assert.AreEqual(1, reverseEntries1.Count);
            Assert.AreEqual(ObjectId.ZeroId, entry1.getOldId());
            Assert.AreEqual(r.ObjectId, entry1.getNewId());
            Assert.AreEqual(new PersonIdent(db).ToString(), entry1.getWho().ToString());
            Assert.AreEqual("", entry1.getComment());
            IList <ReflogReader.Entry> reverseEntries2 = db.ReflogReader("HEAD").getReverseEntries();

            Assert.AreEqual(0, reverseEntries2.Count);
        }
Exemple #4
0
        private RefUpdate updateRef(string name)
        {
            RefUpdate @ref = db.UpdateRef(name);

            @ref.setNewObjectId(db.Resolve(Constants.HEAD));
            return(@ref);
        }
Exemple #5
0
        public void testReadLooseRef()
        {
            RefUpdate updateRef = db.UpdateRef("ref/heads/new");

            updateRef.setNewObjectId(db.Resolve("refs/heads/master"));
            RefUpdate.RefUpdateResult update = updateRef.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.NEW, update);
            global::GitSharp.Core.Ref @ref = db.getRef("ref/heads/new");
            Assert.AreEqual(Storage.Loose, @ref.StorageFormat);
        }
Exemple #6
0
        private void writeReflog(Repository db, ObjectId oldId, ObjectId newId,
                                 string msg, string refName)
        {
            RefDirectory refs   = (RefDirectory)db.RefDatabase;
            RefUpdate    update = refs.newUpdate(refName, true);

            update.setOldObjectId(oldId);
            update.setNewObjectId(newId);
            refs.log(update, msg, true);
        }
Exemple #7
0
        public void testReadSimplePackedRefSameRepo()
        {
            global::GitSharp.Core.Ref @ref = db.getRef("refs/heads/master");
            ObjectId pid = db.Resolve("refs/heads/master^");

            Assert.AreEqual(Storage.Packed, @ref.StorageFormat);
            RefUpdate updateRef = db.UpdateRef("refs/heads/master");

            updateRef.setNewObjectId(pid);
            updateRef.setForceUpdate(true);
            RefUpdate.RefUpdateResult update = updateRef.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.FORCED, update);

            @ref = db.getRef("refs/heads/master");
            Assert.AreEqual(Storage.Loose, @ref.StorageFormat);
        }
Exemple #8
0
        public void testReadSymRefToLoosePacked()
        {
            ObjectId  pid       = db.Resolve("refs/heads/master^");
            RefUpdate updateRef = db.UpdateRef("refs/heads/master");

            updateRef.setNewObjectId(pid);
            updateRef.setForceUpdate(true);
            RefUpdate.RefUpdateResult update = updateRef.update();
            Assert.AreEqual(RefUpdate.RefUpdateResult.FORCED, update); // internal

            writeSymref("HEAD", "refs/heads/master");
            global::GitSharp.Core.Ref @ref = db.getRef("HEAD");
            Assert.AreEqual(Storage.Loose, @ref.StorageFormat);
            @ref = @ref.getTarget();
            Assert.AreEqual("refs/heads/master", @ref.Name);
            Assert.AreEqual(Storage.Loose, @ref.StorageFormat);
        }
Exemple #9
0
        private void Execute(ReceiveCommand cmd)
        {
            try
            {
                RefUpdate ru = db.UpdateRef(cmd.getRefName());
                ru.setRefLogIdent(getRefLogIdent());
                switch (cmd.getType())
                {
                case ReceiveCommand.Type.DELETE:
                    if (!ObjectId.ZeroId.Equals(cmd.getOldId()))
                    {
                        // We can only do a CAS style delete if the client
                        // didn't bork its delete request by sending the
                        // wrong zero id rather than the advertised one.
                        //
                        ru.setExpectedOldObjectId(cmd.getOldId());
                    }
                    ru.setForceUpdate(true);
                    Status(cmd, ru.delete(walk));
                    break;

                case ReceiveCommand.Type.CREATE:
                case ReceiveCommand.Type.UPDATE:
                case ReceiveCommand.Type.UPDATE_NONFASTFORWARD:
                    ru.setForceUpdate(isAllowNonFastForwards());
                    ru.setExpectedOldObjectId(cmd.getOldId());
                    ru.setNewObjectId(cmd.getNewId());
                    ru.setRefLogMessage("push", true);
                    Status(cmd, ru.update(walk));
                    break;
                }
            }
            catch (IOException err)
            {
                cmd.setResult(ReceiveCommand.Result.REJECTED_OTHER_REASON, "lock error: " + err.Message);
            }
        }