Return-Path: Delivered-To: apmail-incubator-jackrabbit-dev-archive@www.apache.org Received: (qmail 31671 invoked from network); 3 Mar 2006 13:17:23 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 3 Mar 2006 13:17:23 -0000 Received: (qmail 35277 invoked by uid 500); 3 Mar 2006 13:18:09 -0000 Mailing-List: contact jackrabbit-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jackrabbit-dev@incubator.apache.org Delivered-To: mailing list jackrabbit-dev@incubator.apache.org Received: (qmail 35259 invoked by uid 99); 3 Mar 2006 13:18:08 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Mar 2006 05:18:08 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: domain of david.nuescheler@gmail.com designates 64.233.162.203 as permitted sender) Received: from [64.233.162.203] (HELO zproxy.gmail.com) (64.233.162.203) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Mar 2006 05:18:08 -0800 Received: by zproxy.gmail.com with SMTP id l8so691288nzf for ; Fri, 03 Mar 2006 05:17:47 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=QMIvdjIS4GBMu6sqgcHeiUIskGl1mGKjBHIYfUlr0bDqJ9YqvpN0s1rt2+O5y0H4Z1N+lce4Dkfh3VEcBi4RBao/LXXJ7ysShlRbneqrz3Ybjf8ac2VwbjRq/SNEnFT3/0eoVgLpjWUPszlkl+IeZifJFZME8EHVPxcIJg7LQU0= Received: by 10.36.41.20 with SMTP id o20mr3151131nzo; Fri, 03 Mar 2006 05:17:47 -0800 (PST) Received: by 10.36.121.6 with HTTP; Fri, 3 Mar 2006 05:17:47 -0800 (PST) Message-ID: Date: Fri, 3 Mar 2006 14:17:47 +0100 From: "David Nuescheler" Reply-To: david.nuescheler@day.com To: jackrabbit-dev@incubator.apache.org Subject: Fwd: Fwd: Copy versioned nodes Cc: "Geoffrey M Clemm" In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline References: X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N since geoff's email didn't make it to the list. please find his insights below. many thanks to geoff. ---------- Forwarded message ---------- From: Geoffrey M Clemm Date: Mar 3, 2006 1:38 PM Subject: Re: Fwd: Copy versioned nodes To: david.nuescheler@day.com Cc: jackrabbit-dev@incubator.apache.org The reason Subversion can get away with treating a copy() like a move() is that it doesn't really support change-sets. When an SCM system support change-sets, it needs to maintain the invariant that there is only one location in the workspace that has file from a given version-histo= ry, so that when you merge a change-set into that workspace, the system knows into which file a given change should be merged. Preserving the version-history for a move() is fine ... there is one location for a given history before the move(), and a single (different) location for that version-history after the move(). But preserving the version-history for a copy() would violate the one-location per version-history per workspa= ce invariant. So although JCR does not currently support change-sets, it is "change-set ready", by maintaining the invariant needed to support change-sets. If the expert group is interested, we can add change-sets to JSR-283. Cheers, Geoff One additional note: It would be fine to record the "lineage" of the new version-history created by the copy, by adding a property to the version-history that is a reference to the version from which that new version-history was creat= ed. We could call it the "copy-source" property. This copy-source property wou= ld give folks all the information they need, without violating the change-set invariant. Someone that wants to reconstruct the "cross-copy history", cou= ld do so by traversing both predecessor references and copy-source references.= If we want to doubly link the data structure, we could add a "copy-destination= " reference, that is the inverse of the copy-source reference.