public DirCache call() throws GitAPIException,NoFilepatternException {if (filepatterns.isEmpty())throw new NoFilepatternException(JGitText.get().atLeastOnePatternIsRequired);checkCallable();DirCache dc = null;List<String> actuallyDeletedFiles = new ArrayList<>();try (TreeWalk tw = new TreeWalk(repo)) {dc = repo.lockDirCache();DirCacheBuilder builder = dc.builder();tw.reset(); tw.setRecursive(true);tw.setFilter(PathFilterGroup.createFromStrings(filepatterns));tw.addTree(new DirCacheBuildIterator(builder));while (tw.next()) {if (!cached) {final FileMode mode = tw.getFileMode(0);if (mode.getObjectType() == Constants.OBJ_BLOB) {String relativePath = tw.getPathString();final File path = new File(repo.getWorkTree(),relativePath);if (delete(path)) {actuallyDeletedFiles.add(relativePath);}}}}builder.commit();setCallable(false);} catch (IOException e) {throw new JGitInternalException(JGitText.get().exceptionCaughtDuringExecutionOfRmCommand, e);} finally {try {if (dc != null) {dc.unlock();}} finally {if (!actuallyDeletedFiles.isEmpty()) {repo.fireEvent(new WorkingTreeModifiedEvent(null,actuallyDeletedFiles));}}}return dc;}

public override DirCache Call(){if (filepatterns.IsEmpty()){throw new NoFilepatternException(JGitText.Get().atLeastOnePatternIsRequired);}CheckCallable();DirCache dc = null;try{dc = repo.LockDirCache();DirCacheBuilder builder = dc.Builder();TreeWalk tw = new TreeWalk(repo);tw.Reset();tw.Recursive = true;tw.Filter = PathFilterGroup.CreateFromStrings(filepatterns);tw.AddTree(new DirCacheBuildIterator(builder));while (tw.Next()){FilePath path = new FilePath(repo.WorkTree, tw.PathString);FileMode mode = tw.GetFileMode(0);if (mode.GetObjectType() == Constants.OBJ_BLOB){Delete(path);}}builder.Commit();SetCallable(false);}catch (IOException e){throw new JGitInternalException(JGitText.Get().exceptionCaughtDuringExecutionOfRmCommand, e);}finally{if (dc != null){dc.Unlock();}}return dc;}
