Пример #1
0
        /// <exception cref="System.IO.IOException"></exception>
        /// <exception cref="NGit.Api.Errors.JGitInternalException"></exception>
        private RevCommit TryFastForward(string headName, RevCommit oldCommit, RevCommit
                                         newCommit)
        {
            bool tryRebase = false;

            foreach (RevCommit parentCommit in newCommit.Parents)
            {
                if (parentCommit.Equals(oldCommit))
                {
                    tryRebase = true;
                }
            }
            if (!tryRebase)
            {
                return(null);
            }
            CheckoutCommand co = new CheckoutCommand(repo);

            try
            {
                co.SetName(newCommit.Name).Call();
                if (headName.StartsWith(Constants.R_HEADS))
                {
                    RefUpdate rup = repo.UpdateRef(headName);
                    rup.SetExpectedOldObjectId(oldCommit);
                    rup.SetNewObjectId(newCommit);
                    rup.SetRefLogMessage("Fast-foward from " + oldCommit.Name + " to " + newCommit.Name
                                         , false);
                    RefUpdate.Result res = rup.Update(walk);
                    switch (res)
                    {
                    case RefUpdate.Result.FAST_FORWARD:
                    case RefUpdate.Result.NO_CHANGE:
                    case RefUpdate.Result.FORCED:
                    {
                        break;
                    }

                    default:
                    {
                        throw new IOException("Could not fast-forward");
                    }
                    }
                }
                return(newCommit);
            }
            catch (RefAlreadyExistsException e)
            {
                throw new JGitInternalException(e.Message, e);
            }
            catch (RefNotFoundException e)
            {
                throw new JGitInternalException(e.Message, e);
            }
            catch (InvalidRefNameException e)
            {
                throw new JGitInternalException(e.Message, e);
            }
        }
Пример #2
0
        public virtual void TestCheckoutSecond()
        {
            CheckoutCommand co      = git.Checkout();
            FilePath        written = WriteTrashFile(FILE1, string.Empty);

            co.SetStartPoint("HEAD~1").AddPath(FILE1).Call();
            NUnit.Framework.Assert.AreEqual("2", Read(written));
            NUnit.Framework.Assert.AreEqual("c", Read(new FilePath(db.WorkTree, FILE2)));
        }
Пример #3
0
 public _PathEdit_296(CheckoutCommand _enclosing, ObjectId blobId, FileMode mode,
                      FilePath workTree, ObjectReader r, string baseArg1) : base(baseArg1)
 {
     this._enclosing = _enclosing;
     this.blobId     = blobId;
     this.mode       = mode;
     this.workTree   = workTree;
     this.r          = r;
 }
Пример #4
0
        public virtual void TestUpdateWorkingDirectory()
        {
            CheckoutCommand co      = git.Checkout();
            FilePath        written = WriteTrashFile(FILE1, string.Empty);

            NUnit.Framework.Assert.AreEqual(string.Empty, Read(written));
            co.AddPath(FILE1).Call();
            NUnit.Framework.Assert.AreEqual("3", Read(written));
            NUnit.Framework.Assert.AreEqual("c", Read(new FilePath(db.WorkTree, FILE2)));
        }
Пример #5
0
        public virtual void TestCheckoutRepository()
        {
            CheckoutCommand co    = git.Checkout();
            FilePath        test  = WriteTrashFile(FILE1, string.Empty);
            FilePath        test2 = WriteTrashFile(FILE2, string.Empty);

            co.SetStartPoint("HEAD~2").SetAllPaths(true).Call();
            NUnit.Framework.Assert.AreEqual("1", Read(test));
            NUnit.Framework.Assert.AreEqual("a", Read(test2));
        }
Пример #6
0
        public virtual void TestCheckoutMultiple()
        {
            CheckoutCommand co    = git.Checkout();
            FilePath        test  = WriteTrashFile(FILE1, string.Empty);
            FilePath        test2 = WriteTrashFile(FILE2, string.Empty);

            co.SetStartPoint("HEAD~2").AddPath(FILE1).AddPath(FILE2).Call();
            NUnit.Framework.Assert.AreEqual("1", Read(test));
            NUnit.Framework.Assert.AreEqual("a", Read(test2));
        }
Пример #7
0
        public virtual void TestUpdateWorkingDirectoryFromHeadWithIndexChange()
        {
            CheckoutCommand co      = git.Checkout();
            FilePath        written = WriteTrashFile(FILE1, "3a");

            git.Add().AddFilepattern(FILE1).Call();
            written = WriteTrashFile(FILE1, string.Empty);
            NUnit.Framework.Assert.AreEqual(string.Empty, Read(written));
            co.AddPath(FILE1).SetStartPoint("HEAD").Call();
            NUnit.Framework.Assert.AreEqual("3", Read(written));
            NUnit.Framework.Assert.AreEqual("c", Read(new FilePath(db.WorkTree, FILE2)));
        }
Пример #8
0
        public virtual void TestDetachedHeadOnCheckout()
        {
            CheckoutCommand co = git.Checkout();

            co.SetName("master").Call();
            string commitId = db.GetRef(Constants.MASTER).GetObjectId().Name;

            co = git.Checkout();
            co.SetName(commitId).Call();
            Ref head = db.GetRef(Constants.HEAD);

            NUnit.Framework.Assert.IsFalse(head.IsSymbolic());
            NUnit.Framework.Assert.AreSame(head, head.GetTarget());
        }
Пример #9
0
        public virtual void TestCheckoutWithNonDeletedFiles()
        {
            FilePath        testFile = WriteTrashFile("temp", string.Empty);
            FileInputStream fis      = new FileInputStream(testFile);

            try
            {
                FileUtils.Delete(testFile);
                return;
            }
            catch (IOException)
            {
            }
            finally
            {
                // the test makes only sense if deletion of
                // a file with open stream fails
                fis.Close();
            }
            FileUtils.Delete(testFile);
            CheckoutCommand co = git.Checkout();

            // delete Test.txt in branch test
            testFile = new FilePath(db.WorkTree, "Test.txt");
            NUnit.Framework.Assert.IsTrue(testFile.Exists());
            FileUtils.Delete(testFile);
            NUnit.Framework.Assert.IsFalse(testFile.Exists());
            git.Add().AddFilepattern("Test.txt");
            git.Commit().SetMessage("Delete Test.txt").SetAll(true).Call();
            git.Checkout().SetName("master").Call();
            NUnit.Framework.Assert.IsTrue(testFile.Exists());
            // lock the file so it can't be deleted (in Windows, that is)
            fis = new FileInputStream(testFile);
            try
            {
                NUnit.Framework.Assert.AreEqual(CheckoutResult.Status.NOT_TRIED, co.GetResult().GetStatus
                                                    ());
                co.SetName("test").Call();
                NUnit.Framework.Assert.IsTrue(testFile.Exists());
                NUnit.Framework.Assert.AreEqual(CheckoutResult.Status.NONDELETED, co.GetResult().
                                                GetStatus());
                NUnit.Framework.Assert.IsTrue(co.GetResult().GetUndeletedList().Contains("Test.txt"
                                                                                         ));
            }
            finally
            {
                fis.Close();
            }
        }
Пример #10
0
        public virtual void TestCheckoutWithConflict()
        {
            CheckoutCommand co = git.Checkout();

            try
            {
                WriteTrashFile("Test.txt", "Another change");
                NUnit.Framework.Assert.AreEqual(CheckoutResult.Status.NOT_TRIED, co.GetResult().GetStatus
                                                    ());
                co.SetName("master").Call();
                NUnit.Framework.Assert.Fail("Should have failed");
            }
            catch (Exception)
            {
                NUnit.Framework.Assert.AreEqual(CheckoutResult.Status.CONFLICTS, co.GetResult().GetStatus
                                                    ());
                NUnit.Framework.Assert.IsTrue(co.GetResult().GetConflictList().Contains("Test.txt"
                                                                                        ));
            }
        }
Пример #11
0
        public virtual void TestUpdateWorkingDirectoryFromIndex2()
        {
            CheckoutCommand co = git.Checkout();

            FsTick(git.GetRepository().GetIndexFile());
            FilePath written1 = WriteTrashFile(FILE1, "3(modified)");
            FilePath written2 = WriteTrashFile(FILE2, "a(modified)");

            FsTick(written2);
            // make sure that we get unsmudged entries for FILE1 and FILE2
            WriteTrashFile(FILE3, "foo");
            git.Add().AddFilepattern(FILE3).Call();
            FsTick(git.GetRepository().GetIndexFile());
            git.Add().AddFilepattern(FILE1).AddFilepattern(FILE2).Call();
            FsTick(git.GetRepository().GetIndexFile());
            WriteTrashFile(FILE1, "3(modified again)");
            WriteTrashFile(FILE2, "a(modified again)");
            FsTick(written2);
            co.AddPath(FILE1).SetStartPoint(secondCommit).Call();
            NUnit.Framework.Assert.AreEqual("2", Read(written1));
            NUnit.Framework.Assert.AreEqual("a(modified again)", Read(written2));
            ValidateIndex(git);
        }