From: Philip Oakley Date: Sun, 01 Sep 2013 19:26:28 GMT Subject: Re: [PATCH v3 01/11] replace: forbid replacing an object with one of a different type Message-ID: <9D27EE89D9994C0997D19E0C0AF7493F@PhilipOakley> In-Reply-To: <20130901.135321.1182162250658468787.chriscool@tuxfamily.org> From: "Christian Couder" > From: "Philip Oakley" >> >> Sorry for not replying earlier in the series. >> >> From: "Christian Couder" >>> Users replacing an object with one of a different type were not >>> prevented to do so, even if it was obvious, and stated in the doc, >>> that bad things would result from doing that. >>> >>> To avoid mistakes, it is better to just forbid that though. >>> >>> If one object is replaced with one of a different type, the only way >>> to keep the history valid is to also replace all the other objects >>> that point to the replaced object. >> >> Isn't this a recursion problem? Taken in that order one unravels the >> whole DAG. >> >> However if considered in the reverse direction, one can replace an >> existing object within the DAG with a carefully crafted alternative >> of >> the same type, but which then wrongly references other dangling >> objects which are then replaced by objects which have the right type >> (this last replacement requires -f force). > > I am not sure I understand what you are saying. > > Anyway in a previous version of this patch I tried to be more explicit > about this, but Junio basically said that he found no value in > discussing this more explicitely... I would agree that it's not worth discussing it more explicitly. My comment was more about the direction of the line of reasoning which I felt was a bit Catch 22 when starting from an existing complete DAG (no garbage) and attempting to replace an object with another of a different type and still have a valid DAG. The construction of the replacement items needs to be in the right order if one of the replacements is of the 'wrong' type (such a construction requires the creation or uses, and ultimately replacement of, extraneous objects that aren't (yet) in the DAG). But as already been said that's a problem for the user of the --force option ;-) Philip > > Thanks, > Christian. >