Ejemplo n.º 1
0
        /// <exception cref="System.IO.IOException"></exception>
        private void ResetIndex(RevCommit commit)
        {
            DirCache dc   = repo.LockDirCache();
            TreeWalk walk = null;

            try
            {
                DirCacheEditor editor = dc.Editor();
                walk = new TreeWalk(repo);
                walk.AddTree(commit.Tree);
                walk.AddTree(new DirCacheIterator(dc));
                walk.Recursive = true;
                while (walk.Next())
                {
                    AbstractTreeIterator cIter = walk.GetTree <AbstractTreeIterator>(0);
                    if (cIter == null)
                    {
                        editor.Add(new DirCacheEditor.DeletePath(walk.PathString));
                        continue;
                    }
                    DirCacheEntry entry = new DirCacheEntry(walk.RawPath);
                    entry.FileMode = cIter.EntryFileMode;
                    entry.SetObjectIdFromRaw(cIter.IdBuffer, cIter.IdOffset);
                    DirCacheIterator dcIter = walk.GetTree <DirCacheIterator>(1);
                    if (dcIter != null && dcIter.IdEqual(cIter))
                    {
                        DirCacheEntry indexEntry = dcIter.GetDirCacheEntry();
                        entry.LastModified = indexEntry.LastModified;
                        entry.SetLength(indexEntry.Length);
                    }
                    editor.Add(new _PathEdit_356(entry, entry));
                }
                editor.Commit();
            }
            finally
            {
                dc.Unlock();
                if (walk != null)
                {
                    walk.Release();
                }
            }
        }
            /// <exception cref="System.IO.IOException"></exception>
            private void Add(int tree, int stage)
            {
                AbstractTreeIterator i = GetTree(tree);

                if (i != null)
                {
                    if (FileMode.TREE.Equals(tw.GetRawMode(tree)))
                    {
                        builder.AddTree(tw.RawPath, stage, reader, tw.GetObjectId(tree));
                    }
                    else
                    {
                        DirCacheEntry e;
                        e = new DirCacheEntry(tw.RawPath, stage);
                        e.SetObjectIdFromRaw(i.IdBuffer, i.IdOffset);
                        e.FileMode = tw.GetFileMode(tree);
                        builder.Add(e);
                    }
                }
            }