2 3 4 5 BranchA--o----------------------------------------- \ \ "A:2" BranchB-----o---o---------------------------------- \ \ "A:2 B:3-4" BranchC------------o-------------------------------
Philip and I were prompted by a customer to consider why Subversion copies mergeinfo from branch to branch, in transitive merges (branch A -> branch B -> branch C). Why do we need mergeinfo on branch C that refers directly to A? If, as I believe to be the case, Subversion only supports merge tracking if the branching graph is tree-shaped, then the only merges allowed to or from branch C are those to or from branch B (and those to or any further branches to the "right" of it: D1, D2). And thus the mergeinfo on C that refers to A is not useful. It's redundant anyway, in the sense that if we hadn't stored it explicitly then we could crawl the branching graph to find it, but that's not my concern; rather, I wonder if it is ever actually providing any benefit. It seems to me that we must have done this (propagate mergeinfo) because we intended that Subversion's merging should support merging patterns more complex than that. But do we? The big question for me at the moment is: do people in reality rely on Subversion doing kinds of merging that make use of this transitive mergeinfo? - Julian