From: Johannes Schindelin Date: Wed, 01 Feb 2006 14:33:51 GMT Subject: Re: [PATCH] Shallow clone: low level machinery. Message-ID: In-Reply-To: <7vzmlcz28x.fsf@assigned-by-dhcp.cox.net> Hi, On Tue, 31 Jan 2006, Junio C Hamano wrote: > Johannes Schindelin writes: > > > Worse, you cannot pull from older servers into shallow repos. > > "have X" means different thing if you do not have matching > grafts information, so I suspect that is fundamentally > unsolvable. If the shallow-capable client could realize that the server is not shallow-capable *and* the local repo is shallow, and refuse to operate (unless called with "-f", in which case the result may or may not be a broken repo, which has to be fixed up manually by copying over ORIG_HEAD to HEAD). Of course, the client has to know that the local repo is shallow, which it must not determine by looking at the grafts file. > I am not sure you can convince "git-rev-list ^A" to mean "not at > A but things before that is still interesting", especially when > you give many other heads to start traversing from, but if you > can, then you can do things at rev-list command line parameter > level without doing the "exchange and use the same grafts" > trickery. That _might_ be easier to implement but I do not see > an obvious correctness guarantee in the approach. If you introduce a different "have X" -- like "have-no-parent X" -- and teach git-rev-list that "~A" means "traverse the tree of A, but not A's parents", you'd basically have everything you need, right? > Implementation bugs aside, it is obvious the things _would_ work > correctly with "exchange and use the same grafts" approach. Yes, I agree. But again, the local repo has to know which grafts were introduced by making the repo shallow. Ciao, Dscho