{"record":{"id":"fa58f7da249ddcfe","repo":"theonedev/onedev","slug":"cannot-combine-treefilter-0-with-revfilter-1","errorCode":null,"errorMessage":"Cannot combine TreeFilter {0} with RevFilter {1}.","messagePattern":"Cannot combine TreeFilter (.+?) with RevFilter (.+?)\\.","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/org/eclipse/jgit/revwalk/StartGenerator.java","lineNumber":61,"sourceCode":"\t\treturn 0;\n\t}\n\n\t@Override\n\tRevCommit next() throws MissingObjectException,\n\t\t\tIncorrectObjectTypeException, IOException {\n\t\tGenerator g;\n\n\t\tfinal RevWalk w = walker;\n\t\tRevFilter rf = w.getRevFilter();\n\t\tfinal TreeFilter tf = w.getTreeFilter();\n\t\tAbstractRevQueue q = walker.queue;\n\n\t\tif (rf == RevFilter.MERGE_BASE) {\n\t\t\t// Computing for merge bases is a special case and does not\n\t\t\t// use the bulk of the generator pipeline.\n\t\t\t//\n\t\t\tif (tf != TreeFilter.ALL) {\n\t\t\t\tthrow new IllegalStateException(MessageFormat.format(\n\t\t\t\t\t\tJGitText.get().cannotCombineTreeFilterWithRevFilter, tf, rf));\n\t\t\t}\n\t\t\tif (w.isFirstParent()) {\n\t\t\t\tthrow new IllegalStateException(\n\t\t\t\t\t\tJGitText.get().cannotFindMergeBaseUsingFirstParent);\n\t\t\t}\n\n\t\t\tfinal MergeBaseGenerator mbg = new MergeBaseGenerator(w);\n\t\t\twalker.pending = mbg;\n\t\t\twalker.queue = AbstractRevQueue.EMPTY_QUEUE;\n\t\t\tmbg.init(q);\n\t\t\treturn mbg.next();\n\t\t}\n\n\t\tfinal boolean uninteresting = q.anybodyHasFlag(RevWalk.UNINTERESTING);\n\t\tboolean boundary = walker.hasRevSort(RevSort.BOUNDARY);\n\n\t\tif (!boundary && walker instanceof ObjectWalk) {","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/org/eclipse/jgit/revwalk/StartGenerator.java#L43-L79","documentation":"This IllegalStateException is thrown by StartGenerator.next() when a revision walk is configured with RevFilter.MERGE_BASE (a merge-base computation) and a TreeFilter other than TreeFilter.ALL. Merge-base computation is a special pipeline that ignores tree/path filters, so any non-ALL filter would be silently ignored — JGit refuses instead. Fix the configuration before calling RevWalk.next().","triggerScenarios":"Calling RevWalk.setRevFilter(RevFilter.MERGE_BASE) while also having called setTreeFilter() with anything other than TreeFilter.ALL (including ANY_DIFF or a path filter), then iterating the walk.","commonSituations":"Developers trying to compute merge bases while also limiting the walk to specific paths; code copied from a normal log walk that already had a TreeFilter set and later switches to merge-base mode.","solutions":["Remove the setTreeFilter() call, or explicitly call walker.setTreeFilter(TreeFilter.ALL) before iterating","Use a separate RevWalk instance for merge-base computation, isolated from path-filtered walks","If path restriction is needed, do post-filtering of merge-base results after the walk completes"],"exampleFix":"// before\nRevWalk walk = new RevWalk(repo);\nwalk.setTreeFilter(AndTreeFilter.create(PathFilter.create(\"src/\"), TreeFilter.ANY_DIFF));\nwalk.setRevFilter(RevFilter.MERGE_BASE);\n// after\nRevWalk walk = new RevWalk(repo);\nwalk.setTreeFilter(TreeFilter.ALL);\nwalk.setRevFilter(RevFilter.MERGE_BASE);","handlingStrategy":"validation","validationCode":"if (walk.getRevFilter() == RevFilter.MERGE_BASE && walk.getTreeFilter() != TreeFilter.ALL) {\n    walk.setTreeFilter(TreeFilter.ALL); // or use a separate walk\n}","typeGuard":null,"tryCatchPattern":"try (RevWalk walk = new RevWalk(repo)) {\n    ...\n} catch (IllegalStateException e) {\n    // reconfigure walk: clear TreeFilter or drop MERGE_BASE filter, then retry\n}","preventionTips":["Never set both a TreeFilter and RevFilter.MERGE_BASE on the same walk","Use one dedicated RevWalk per query shape (path-filtered log vs merge-base)","Reset filters (setTreeFilter(TreeFilter.ALL)) when reusing a walk object for a different purpose"],"tags":["jgit","revwalk","illegal-state","merge-base"],"backgroundTag":"internal-invariant-violation","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}