Exemplo n.º 1
0
        private void doCheckout(GitSharp.Core.Ref branch)
        {
            if (branch == null)
            {
                throw new ArgumentNullException("branch", "Cannot checkout; no HEAD advertised by remote");
            }
            var repo = Repository._internal_repo;

            if (!Constants.HEAD.Equals(branch.getName()))
            {
                RefUpdate u1 = repo.UpdateRef(Constants.HEAD);
                u1.disableRefLog();
                u1.link(branch.getName());
            }

            GitSharp.Core.Commit commit = repo.MapCommit(branch.ObjectId);
            RefUpdate            u      = repo.UpdateRef(Constants.HEAD);

            u.NewObjectId = commit.CommitId;
            u.forceUpdate();
            GitIndex index = new GitIndex(repo);

            GitSharp.Core.Tree tree = commit.TreeEntry;
            WorkDirCheckout    co   = new WorkDirCheckout(repo, repo.WorkingDirectory, index, tree);

            co.checkout();
            index.write();
        }
Exemplo n.º 2
0
        public void test028_LockPackedRef()
        {
            writeTrashFile(".git/packed-refs", "7f822839a2fe9760f386cbbbcb3f92c5fe81def7 refs/heads/foobar");
            writeTrashFile(".git/HEAD", "ref: refs/heads/foobar\n");
            BUG_WorkAroundRacyGitIssues("packed-refs");
            BUG_WorkAroundRacyGitIssues("HEAD");

            ObjectId resolve = db.Resolve("HEAD");

            Assert.AreEqual("7f822839a2fe9760f386cbbbcb3f92c5fe81def7", resolve.Name);

            RefUpdate lockRef = db.UpdateRef("HEAD");
            ObjectId  newId   = ObjectId.FromString("07f822839a2fe9760f386cbbbcb3f92c5fe81def");

            lockRef.NewObjectId = newId;
            Assert.AreEqual(RefUpdate.RefUpdateResult.FORCED, lockRef.forceUpdate());

            Assert.IsTrue(new FileInfo(db.Directory.FullName + "/refs/heads/foobar").Exists);
            Assert.AreEqual(newId, db.Resolve("refs/heads/foobar"));

            // Again. The ref already exists
            RefUpdate lockRef2 = db.UpdateRef("HEAD");
            ObjectId  newId2   = ObjectId.FromString("7f822839a2fe9760f386cbbbcb3f92c5fe81def7");

            lockRef2.NewObjectId = newId2;
            Assert.AreEqual(RefUpdate.RefUpdateResult.FORCED, lockRef2.forceUpdate());

            Assert.IsTrue(new FileInfo(db.Directory.FullName + "/refs/heads/foobar").Exists);
            Assert.AreEqual(newId2, db.Resolve("refs/heads/foobar"));
        }
Exemplo n.º 3
0
        /*
         * Update a reference to point to an object.
         *
         * @param <T>
         *            type of the target object.
         * @param ref
         *            the name of the reference to update to. If {@code ref} does
         *            not start with {@code refs/} and is not the magic names
         *            {@code HEAD} {@code FETCH_HEAD} or {@code MERGE_HEAD}, then
         *            {@code refs/heads/} will be prefixed in front of the given
         *            name, thereby assuming it is a branch.
         * @param obj
         *            the target object.
         * @return the target object.
         * @throws Exception
         */
        public T update <T>(String @ref, T obj) where T : ObjectId
        {
            if (Constants.HEAD.Equals(@ref))
            {
            }
            else if ("FETCH_HEAD".Equals(@ref))
            {
            }
            else if ("MERGE_HEAD".Equals(@ref))
            {
            }
            else if (@ref.StartsWith(Constants.R_REFS))
            {
            }
            else
            {
                @ref = Constants.R_HEADS + @ref;
            }

            RefUpdate u = db.UpdateRef(@ref);

            u.NewObjectId = (obj);
            switch (u.forceUpdate())
            {
            case RefUpdate.RefUpdateResult.FAST_FORWARD:
            case RefUpdate.RefUpdateResult.FORCED:
            case RefUpdate.RefUpdateResult.NEW:
            case RefUpdate.RefUpdateResult.NO_CHANGE:
                updateServerInfo();
                return(obj);

            default:
                throw new IOException("Cannot write " + @ref + " " + u.Result);
            }
        }
Exemplo n.º 4
0
        public void testTwoSuccessiveCommitsLinkedToHead()
        {
            var repo             = createBareRepository();
            var workingDirectory = repo.WorkingDirectory;

            repo.Create();

            var objectWriter = new ObjectWriter(repo);

            FileInfo project1_a_txt = writeTrashFile(Path.Combine(workingDirectory.FullName, "Project-1/A.txt"), "A.txt - first version\n");
            FileInfo project1_b_txt = writeTrashFile(Path.Combine(workingDirectory.FullName, "Project-1/B.txt"), "B.txt - first version\n");

            var tree = new global::GitSharp.Core.Tree(repo);

            global::GitSharp.Core.Tree projectTree = tree.AddTree("Project-1");
            addFile(projectTree, project1_a_txt, objectWriter);
            projectTree.Id = (objectWriter.WriteTree(projectTree));
            addFile(projectTree, project1_b_txt, objectWriter);
            projectTree.Id = (objectWriter.WriteTree(projectTree));
            tree.Id        = (objectWriter.WriteTree(tree));

            var commit = new global::GitSharp.Core.Commit(repo)
            {
                Author    = new PersonIdent(author, (0L), 60),
                Committer = new PersonIdent(committer, (0L), 60),
                Message   = "Foo\n\nMessage",
                TreeEntry = tree
            };

            commit.Save();
            var commitId = commit.CommitId;

            FileInfo project1_b_v2_txt = writeTrashFile(Path.Combine(workingDirectory.FullName, "Project-1/B.txt"), "B.txt - second version\n");

            tree        = new global::GitSharp.Core.Tree(repo);
            projectTree = tree.AddTree("Project-1");
            addFile(projectTree, project1_a_txt, objectWriter);
            projectTree.Id = (objectWriter.WriteTree(projectTree));
            addFile(projectTree, project1_b_v2_txt, objectWriter);
            projectTree.Id = (objectWriter.WriteTree(projectTree));
            tree.Id        = (objectWriter.WriteTree(tree));

            commit = new global::GitSharp.Core.Commit(repo)
            {
                Author    = new PersonIdent(author, (0L), 60),
                Committer = new PersonIdent(committer, (0L), 60),
                Message   = "Modified",
                ParentIds = new[] { commitId },
                TreeEntry = tree
            };
            commit.Save();
            commitId = commit.CommitId;

            RefUpdate lck = repo.UpdateRef("refs/heads/master");

            Assert.IsNotNull(lck, "obtained lock");
            lck.NewObjectId = commitId;
            Assert.AreEqual(RefUpdate.RefUpdateResult.NEW, lck.forceUpdate());
        }
Exemplo n.º 5
0
        private void commit(Core.Tree t, string commitMsg, PersonIdent author,
                            PersonIdent committer)
        {
            Core.Commit commit = new Core.Commit(db);
            commit.Author    = (author);
            commit.Committer = (committer);
            commit.Message   = (commitMsg);
            commit.TreeEntry = (t);
            //ObjectWriter writer = new ObjectWriter(db);
            //commit.CommitId = (writer.WriteCommit(commit));
            commit.Save();

            int       nl = commitMsg.IndexOf('\n');
            RefUpdate ru = db.UpdateRef(Constants.HEAD);

            ru.NewObjectId = (commit.CommitId);
            ru.setRefLogMessage("commit : "
                                + ((nl == -1) ? commitMsg : commitMsg.Slice(0, nl)), false);
            ru.forceUpdate();
        }