예제 #1
0
        /// <exception cref="System.Exception"></exception>
        private void DoCherryPickAndCheckResult(Git git, RevCommit sideCommit, ResolveMerger.MergeFailureReason
                                                reason)
        {
            // get current index state
            string indexState = IndexState(CONTENT);
            // cherry-pick
            CherryPickResult result = git.CherryPick().Include(sideCommit.Id).Call();

            NUnit.Framework.Assert.AreEqual(CherryPickResult.CherryPickStatus.FAILED, result.
                                            GetStatus());
            // staged file a causes DIRTY_INDEX
            NUnit.Framework.Assert.AreEqual(1, result.GetFailingPaths().Count);
            NUnit.Framework.Assert.AreEqual(reason, result.GetFailingPaths().Get("a"));
            NUnit.Framework.Assert.AreEqual("a(modified)", Read(new FilePath(db.WorkTree, "a"
                                                                             )));
            // index shall be unchanged
            NUnit.Framework.Assert.AreEqual(indexState, IndexState(CONTENT));
            NUnit.Framework.Assert.AreEqual(RepositoryState.SAFE, db.GetRepositoryState());
            if (reason == null)
            {
                ReflogReader reader = db.GetReflogReader(Constants.HEAD);
                NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("cherry-pick: "
                                                                                            ));
                reader = db.GetReflogReader(db.GetBranch());
                NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("cherry-pick: "
                                                                                            ));
            }
        }
예제 #2
0
        public virtual void TestRevert()
        {
            Git git = new Git(db);

            WriteTrashFile("a", "first line\nsec. line\nthird line\n");
            git.Add().AddFilepattern("a").Call();
            git.Commit().SetMessage("create a").Call();
            WriteTrashFile("b", "content\n");
            git.Add().AddFilepattern("b").Call();
            git.Commit().SetMessage("create b").Call();
            WriteTrashFile("a", "first line\nsec. line\nthird line\nfourth line\n");
            git.Add().AddFilepattern("a").Call();
            git.Commit().SetMessage("enlarged a").Call();
            WriteTrashFile("a", "first line\nsecond line\nthird line\nfourth line\n");
            git.Add().AddFilepattern("a").Call();
            RevCommit fixingA = git.Commit().SetMessage("fixed a").Call();

            WriteTrashFile("b", "first line\n");
            git.Add().AddFilepattern("b").Call();
            git.Commit().SetMessage("fixed b").Call();
            git.Revert().Include(fixingA).Call();
            NUnit.Framework.Assert.IsTrue(new FilePath(db.WorkTree, "b").Exists());
            CheckFile(new FilePath(db.WorkTree, "a"), "first line\nsec. line\nthird line\nfourth line\n"
                      );
            Iterator <RevCommit> history      = git.Log().Call().Iterator();
            RevCommit            revertCommit = history.Next();
            string expectedMessage            = "Revert \"fixed a\"\n\n" + "This reverts commit " + fixingA
                                                .Id.GetName() + ".\n";

            NUnit.Framework.Assert.AreEqual(expectedMessage, revertCommit.GetFullMessage());
            NUnit.Framework.Assert.AreEqual("fixed b", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("fixed a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("enlarged a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("create b", history.Next().GetFullMessage());
            NUnit.Framework.Assert.AreEqual("create a", history.Next().GetFullMessage());
            NUnit.Framework.Assert.IsFalse(history.HasNext());
            ReflogReader reader = db.GetReflogReader(Constants.HEAD);

            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("revert: Revert \""
                                                                                        ));
            reader = db.GetReflogReader(db.GetBranch());
            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("revert: Revert \""
                                                                                        ));
        }
예제 #3
0
        public virtual void TestSomeCommits()
        {
            // do 4 commits
            Git git = new Git(db);

            git.Commit().SetMessage("initial commit").Call();
            git.Commit().SetMessage("second commit").SetCommitter(committer).Call();
            git.Commit().SetMessage("third commit").SetAuthor(author).Call();
            git.Commit().SetMessage("fourth commit").SetAuthor(author).SetCommitter(committer
                                                                                    ).Call();
            Iterable <RevCommit> commits = git.Log().Call();
            // check that all commits came in correctly
            PersonIdent defaultCommitter = new PersonIdent(db);

            PersonIdent[] expectedAuthors = new PersonIdent[] { defaultCommitter, committer,
                                                                author, author };
            PersonIdent[] expectedCommitters = new PersonIdent[] { defaultCommitter, committer
                                                                   , defaultCommitter, committer };
            string[] expectedMessages = new string[] { "initial commit", "second commit", "third commit"
                                                       , "fourth commit" };
            int l = expectedAuthors.Length - 1;

            foreach (RevCommit c in commits)
            {
                NUnit.Framework.Assert.AreEqual(expectedAuthors[l].GetName(), c.GetAuthorIdent().
                                                GetName());
                NUnit.Framework.Assert.AreEqual(expectedCommitters[l].GetName(), c.GetCommitterIdent
                                                    ().GetName());
                NUnit.Framework.Assert.AreEqual(c.GetFullMessage(), expectedMessages[l]);
                l--;
            }
            NUnit.Framework.Assert.AreEqual(l, -1);
            ReflogReader reader = db.GetReflogReader(Constants.HEAD);

            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("commit:"
                                                                                        ));
            reader = db.GetReflogReader(db.GetBranch());
            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("commit:"
                                                                                        ));
        }
예제 #4
0
        public virtual void TestCommitAmend()
        {
            Git git = new Git(db);

            git.Commit().SetMessage("first comit").Call();
            // typo
            git.Commit().SetAmend(true).SetMessage("first commit").Call();
            Iterable <RevCommit> commits = git.Log().Call();
            int c = 0;

            foreach (RevCommit commit in commits)
            {
                NUnit.Framework.Assert.AreEqual("first commit", commit.GetFullMessage());
                c++;
            }
            NUnit.Framework.Assert.AreEqual(1, c);
            ReflogReader reader = db.GetReflogReader(Constants.HEAD);

            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("commit (amend):"
                                                                                        ));
            reader = db.GetReflogReader(db.GetBranch());
            NUnit.Framework.Assert.IsTrue(reader.GetLastEntry().GetComment().StartsWith("commit (amend):"
                                                                                        ));
        }
예제 #5
0
        public DateTime?GetLastLocalCommitDate(RepositoryConnectionInfo repInfo)
        {
            var git        = Git.Open(repInfo.LocalDirectory);
            var repository = git.GetRepository();

            var reader  = new ReflogReader(repository, "HEAD");
            var lastRef = reader.GetLastEntry();

            if (lastRef == null)
            {
                return(null);
            }

            var authorIdent    = lastRef.GetWho();
            var authorDate     = authorIdent.GetWhen();
            var timeZoneOffset = TimeSpan.FromMinutes(authorIdent.GetTimeZoneOffset());

            return(authorDate + timeZoneOffset);
        }
        public virtual void RefLogIncludesCommitMessage()
        {
            PersonIdent who = new PersonIdent("user", "*****@*****.**");

            DeleteTrashFile("file.txt");
            RevCommit stashed = git.StashCreate().SetPerson(who).Call();

            NUnit.Framework.Assert.IsNotNull(stashed);
            NUnit.Framework.Assert.AreEqual("content", Read(committedFile));
            ValidateStashedCommit(stashed);
            ReflogReader reader = new ReflogReader(git.GetRepository(), Constants.R_STASH);
            ReflogEntry  entry  = reader.GetLastEntry();

            NUnit.Framework.Assert.IsNotNull(entry);
            NUnit.Framework.Assert.AreEqual(ObjectId.ZeroId, entry.GetOldId());
            NUnit.Framework.Assert.AreEqual(stashed, entry.GetNewId());
            NUnit.Framework.Assert.AreEqual(who, entry.GetWho());
            NUnit.Framework.Assert.AreEqual(stashed.GetFullMessage(), entry.GetComment());
        }