/// <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); } } }