Hi Sergiu and Vincent,
Sergiu Dumitriu wrote:
> On 04/17/2010 01:19 PM, Vincent Massol wrote:
>> On Apr 17, 2010, at 12:41 PM, Sergiu Dumitriu wrote:
>>
>>> On 04/17/2010 10:17 AM, Vincent Massol wrote:
>>>> On Apr 17, 2010, at 3:47 AM, sdumitriu (SVN) wrote:
>>>>
>>>>> Author: sdumitriu
>>>>> Date: 2010-04-17 03:47:52 +0200 (Sat, 17 Apr 2010)
>>>>> New Revision: 28419
>>>>>
>>>>> Modified:
>>>>>
>>>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>>>>> Log:
>>>>> XWIKI-5121: Weird behavior when deleting the head of the history of a
>>>>> renamed document
>>>>> Fixed.
>>>>>
>>>>> Modified:
>>>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>>>>> ===================================================================
>>>>> ---
>>>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>>>>> 2010-04-17 01:23:30 UTC (rev 28418)
>>>>> +++
>>>>> platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/web/DeleteVersionsAction.java
>>>>> 2010-04-17 01:47:52 UTC (rev 28419)
>>>>> @@ -73,6 +73,10 @@
>>>>> // If we delete the most recent (current) version, then
>>>>> rollback to latest undeleted version.
>>>>> if
>>>>> (!tdoc.getRCSVersion().equals(archive.getLatestVersion())) {
>>>>> XWikiDocument newdoc =
>>>>> archive.loadDocument(archive.getLatestVersion(), context);
>>>>> + // Reset the document reference, since the one taken
>>>>> from the archive might be wrong (old name from
>>>>> + // before a rename)
>>>>> +
>>>>> newdoc.setDocumentReference(tdoc.getDocumentReference());
>>>>> + newdoc.setMetaDataDirty(false);
>>>>> context.getWiki().getStore().saveXWikiDoc(newdoc,
>>>>> context);
>>>>> context.setDoc(newdoc);
>>>>> }
>>>> hmmm... when a doc is renamed, if we restore a version before the rename,
>>>> shouldn't we get back the old, not renamed, document?
>>> Thought about it too, and I think that the answer is no.
>>>
>>> The rename is not a version-able change. Looking in the history, there's
>>> no indication that the document has been renamed, or that it used to
>>> have a different name.
>> Yes but that' just because we need to redo the implementation of
>> XWikiDocument.rename() to be a real rename instead of copy/delete.
>
> Looks like we have different views on where the reference sits relative
> to the document. IMO, the reference is a pointer to the document, not a
> definitive aspect of the document. In the future, I'd like to make this
> separation even clearer by removing the reference from the document and
> into a distinct "naming" concept. This is more inline with filesystems:
> the path/name is just metadata pointing to the real document data, that
> helps finding the document (or, the content of that document), by means
> of visual/spatial exploration. And, IMHO, the fact that current systems
> have folders and hierarchies for this is just a matter of circumstances
> which actually seems to change with the consistent introduction of tags
> and semantic desktops. Folders are dying, long live the tags! JNDI also
> separates names from the data, it provides a means to access a resource
> using a name, but the name is not actually part of the resource. If JCR
> puts the name inside the document, then this looks like a bad design on
> their side. I know that my voice does not weight much against the panel
> of experts that were involved in standardizing the JCR spec, but I will
> maintain my position unless convinced otherwise with strong arguments.
>
> Back to my vision of the future XWiki, documents, objects and all other
> data should be identified by an internal GUID which is unique and never
> changes. Internal references (from properties to objects and from there
> to documents, and between attachment<->document, translations<->master,
> history<->document, etc.) are done only using these GUIDs, and not with
> names. Hashes, which already cause problems because of collisions, will
> be gone. Externally, the document name is held in another structure, so
> that a document can have different names (references) pointing to it, a
> different one for each translation (a strong point is that we have this
> "same document, different translations" feature, but its worst downside
> is that the name/URL doesn't make sense in all these translations, most
> of the times), aliases, redirects... So, renaming a document would just
> be a change in this external reference table, and not something related
> to the document content. And reverting document changes should not have
> any effect on the references (maybe more than one) that point to it.
I agree with Sergiu. I think it's best to have the reference separated
from the document. Since the relation between the references and the
documents is many-to-one, what would happen in Vincent's view when a
document is reverted? Making some of the references invalid because they
where not existing when the document was in that version doesn't sound
right to me.
Thanks,
Marius
>
> WDYT?
>
>>> "Rename" is a meta-change, it alters the name with which a document
>>> (seen as the information inside it) can be reached. Reverting the
>>> document refers to reverting the information.
>>>
>>> Think of the following use cases:
>>>
>>> A document is create with a typo in its name. It survives like this for
>>> a while, adding several revisions. After that, someone corrects the typo
>>> in the name by renaming the document. Then, someone sees some bad edits
>>> and wants to revert the document to its previous state. Is it OK to go
>>> back to the old, wrong document name?
>> IMO yes definitely. A rollback is well... a rollback, i.e the doc must be
>> *exactly* the same as it used to be. This is important for several reasons
>> but one of them is that we should be able to implement our versioning system
>> on top of a SCM or JCR and this is what these systems will do.
>
> The doc (content) is *exactly* the same. But, is the reference *inside*
> the document? Our current model does suggest so, but I'm thinking on an
> abstract level. I really, really don't think that the reference belongs
> inside the document. Yes, the document object needs to have a "current"
> reference, the one which was used for retrieving it, so that we can use
> it for generating URLs in the factory, for example. And maybe it should
> also hold another reference, the "default" reference for that document.
>
>>> A document is created with a name. Not much activity in it, then someone
>>> renames the document, and it stays like this for a long time. People get
>>> accustomed to the new name and forget that it even had a different name
>>> initially. Then someone reverts to the previous version. For the public,
>>> the document disappeared, since nobody remembers the old name.
>> Again, if you revert it's because you want to revert. If your use case is to
>> do merging then it's something else that we should probably also support in
>> some future (after we've moved to JCR though IMO since we'll get it for free
>> or not too expensive).
>
> I want to revert the content, not the rename. This is what I see in the
> history, eg. "allowed edit right for John Doe", and this is what I want
> to revert. The rename does *NOT* appear in the history, so I don't know
> that I'm reverting the rename. It would be an invisible side effect. If
> I want to revert the rename, I rename it back to its original place.
>
> Another reason not to automatically move the document back:
>
> A document is created with a name, let's say Main.X. Again, create some
> versions, rename to Main.Y. Create another document Main.X. When I want
> to revert Main.Y, what happens with the new Main.X? Do we lose it? Will
> the revert fail because the target document already exists? Will we use
> another new, non conflicting name like Main.X_1, which looks worst than
> either Main.X or Main.Y?
>
>>> Now, IF the rename did appear in the history, and the user explicitly
>>> deletes the "rename" change, I might be OK with moving back the
>>> document, but in the current situation, I think that the implemented
>>> behavior is the right one.
>> I wasn't concerned about your change for now. I just wanted to ensure we
>> want to all go in the same direction for the future. It also means that if
>> we agree about a real rollback that we should add some comment around your
>> change explaining why we're doing this now and that we want to change it in
>> the future.
>
> Yes, all devs should say their opinion on this (I renamed the thread).
>
>>> On a sidenote, we just deprecated the setDocumentReference method, since
>>> we're not supposed to use it. Yet, I just did use it. What does this mean:
>>> - there are valid usecases for setDocumentReference, or
>>> - I should change the existing reference, like getDR().setName?
>> The reason it's deprecated is that we've decided that XWikiDocument objects
>> are immutable relative to their reference (since a reference represents a
>> XWikiDocument's identity). Thus your options are to create a document with a
>> new identity are: clone and copy.
>
> Please help me more, I didn't understand your answer.
>
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs