÷TextDocs.NewDoc€ì÷FCColorFlatLockedControlsOrgvÛBIER`b€3ð„Oberon20b.Scn.FntOberon10.Scn.FntOberon14.Scn.Fnt/>Oberon14b.Scn.Fnt Oberon12.Scn.Fnt©Oberon16b.Scn.FntOberon16.Scn.Fntv OOberon12b.Scn.Fnt ¹ Šþâ 0)"ÿ     E )É a Courier10.Scn.FntE Oberon10i.Scn.FntSOÖâ 66 Î( J Oberon10b.Scn.FntWA†ÿ¥@)&Q©Ú"@Éd !*)0 ::: :: :::::922::‡##$€.WebDAV and DeltaV for Oberon  A Guide to WebDAV and DeltaV with Bluebottle Edgar Schwarz, edgar@edgarschwarz.de Release 0.1, 18.2.2003 0.1 Remarks This document will probably change a lot in the future or be splitted in multiple text. Now it just collects some information people are interested in. Comments welcome. 1. WebDAV and DeltaV WebDAV and DeltaV are two RFCs which extend HTTP to make the Web writeable. For more information see www.webdav.org. 1.1 WebDAV RFC 2518 "HTTP Extensions for Distributed Authoring -- WEBDAV" describes an extension to the HTTP/1.1 protocol that allows clients to perform remote web content authoring operations. This extension provides a coherent set of methods, headers, request entity body formats, and response entity body formats that provide operations for: Properties: The ability to create, remove, and query information about Web pages, such as their authors, creation dates, etc. Also, the ability to link pages of any media type to related pages. Collections: The ability to create sets of documents and to retrieve a hierarchical membership listing (like a directory listing in a file system). Locking: The ability to keep more than one person from working on a document at the same time. This prevents the "lost update problem," in which modifications are lost as first one author then another writes changes without merging the other author's changes. Namespace Operations: The ability to instruct the server to copy and move Web resources. In HTTP/1.1, method parameter information was exclusively encoded in HTTP headers. Unlike HTTP/1.1, WebDAV encodes method parameter information either in an Extensible Markup Language (XML) [REC-XML] request entity body, or in an HTTP header. WebDAV introduces the following new HTTP methods: PROPFIND, PROPPATCH, MKCOL, DELETE, COPY, MOVE, LOCK, UNLOCK. In addition existing methods get more functionality. 1.2 DeltaV RFC 3253 "Versioning Extensions to WebDAV" specifies the WebDAV (Web Distributed Authoring and Versioning) versioning extensions to the HTTP/1.1 protocol. WebDAV versioning will minimize the complexity of clients that are capable of interoperating with a variety of versioning repository managers, to facilitate widespread deployment of applications capable of utilizing the WebDAV Versioning services. WebDAV versioning includes automatic versioning for versioning-unaware clients, version history management, workspace management, baseline management, activity management, and URL namespace versioning. Versioning is concerned with tracking and accessing the history of important states of a web resource, such as a standalone web page. The benefits of versioning in the context of the worldwide web include: A resource has an explicit history and a persistent identity across the various states it has had during the course of that history. It allows browsing through past and alternative versions of a resource. Frequently the modification and authorship history of a resource is critical information in itself. Resource states (versions) are given stable names that can support externally stored links for annotation and link server support. Both annotation and link servers frequently need to store stable references to portions of resources that are not under their direct control. By providing stable states of resources, version control systems allow not only stable pointers into those resources, but also well defined methods to determine the relationships of those states of a resource. WebDAV Versioning defines both basic and advanced versioning functionality. Basic versioning allows users to: - Put a resource under version control - Determine whether a resource is under version control - Determine whether a resource update will automatically be captured as a new version - Create and access distinct versions of a resource Advanced versioning provides additional functionality for parallel development and configuration management of sets of web resources. DeltaV introduces the following new HTTP methods: VERSION-CONTROL, REPORT, CHECKOUT, CHECKIN, UNCHECKOUT, MKWORKSPACE, UPDATE, LABEL, MERGE, BASELINE-CONTROL, MKACTIVITY 1.2 ObeDAV ObeDAV (To coin a name for WebDAV for Oberon) doesn't have the ambition to completely implement these RFCs yet. As a first step a client and a server are implemented which allow distributed versioning of single files and also of sets of files as baselines. For this purpose some of the above mentioned methods are implemented as far as necessary to communicate between client and server: PROPFIND, MKCOL, DELETE, VERSION-CONTROL, REPORT, CHECKOUT, CHECKIN, UNCHECKOUT, UPDATE, MERGE, BASELINE-CONTROL As WebDAV uses XML for HTTP bodies it is implemented in BlueBottle. If XML would be ported to Native Oberon it should be easy to make a Native client. At the moment only flat baselines are allowed (No resources in subcollections). Subbaselines are also not available yet. 2. ObeDAV 2.1 WebDAV Versioning Concepts WebDAV knows a 'resource' (file). A resource under version control is a 'version resource' or 'version' for short. A set of resources is called 'configuration'. A configuration contains all the resources of a collection resource (directory) and it's subcollections (As long as the subcollection isn't itself a configuration). A version of a configuration is a 'baseline'. A baseline contains versions and optionally subbaselines. baseline = { version } { baseline } 2.2 Module Structure The diagram shows the most important modules and their relation.  2.3 Installation This is just a first overview. To really install you still need more information. Server Use a FAT partition (Which knows directories) for maintaining versioning data. FATTools.CreateDirectory "FAT:/es" FATTools.CreateDirectory "FAT:/es/repo" FATTools.CreateDirectory "FAT:/es/repo/temp" FATTools.CreateDirectory "FAT:/es/httproot" FATTools.CreateDirectory "FAT:/es/httproot/temp" Builder.Compile es.VCSBase.Mod es.DAVObjects.Mod es.DAVFonts.Mod es.DAVTexts.Mod es.DAVCond.Mod es.DAVXml.Mod es.DAVChain.Mod es.DAVDeltavBase.Modes.TFLog.Mod es.WebDAV.Mod es.WebDAVServer.Mod es.WebDAVPlugin.Mod es.WebDAVServerTools.Mod ~ WebDAVServer.SetLog Server.Log ~ WebDAVServer.CloseLog Aos.Call WebDAVServerTools.Start \r:FAT:/es/httproot \l:FAT:/es/httproot/WebDAV.Log ~ Aos.Call WebDAVServerTools.Stop ~ Client Builder.Compile es.WebDAV.Mod es.TFLog.Mod es.DAVCond.Mod es.DAVXml.Mod es.DAVChain.Mod es.DAVObjects.Mod es.DAVFonts.Mod es.DAVTexts.Mod es.VCSBase.Mod es.DAVDeltavBase.Mod es.WebDAVClient.Mod es.WebDAVClientTools.Mod ~ Perhaps some modules aren't necessary. 2.4 Usage Set a default prefix to allow remote and local use of the commands below. WebDAVClientTools.SetHost ^ "ketchup.ethz.ch" "127.0.0.0" System.OpenKernelLog ! Shows output. Some test scenarios as examples. version-control resource /vc1/Data.Text Configuration.DoCommands WebDAVClientTools.Delete "/vc1/" WebDAVClientTools.Mkcol "/vc1/" ! create initial version WebDAVClientTools.Put "/vc1/Data.Text" Data0.Text WebDAVClientTools.VersionControlFreeze "/vc1/Data.Text" "Edgar Schwarz" "Version 1" ! second version WebDAVClientTools.Checkout "/vc1/Data.Text" WebDAVClientTools.Uncheckout "/vc1/Data.Text" WebDAVClientTools.Checkout "/vc1/Data.Text" WebDAVClientTools.Put "/vc1/Data.Text" Data1.Text WebDAVClientTools.Checkin "/vc1/Data.Text" "Edgar Schwarz" "Version 2" ! third version WebDAVClientTools.Checkout "/vc1/Data.Text" WebDAVClientTools.Put "/vc1/Data.Text" Data2.Text WebDAVClientTools.Checkin "/vc1/Data.Text" "Edgar Schwarz" "Version 3" ! get some info WebDAVClientTools.Propfind "/vc1/Data.Text" WebDAVClientTools.Update "/vc1/Data.Text" 2 WebDAVClientTools.Propfind "/vc1/Data.Text" WebDAVClientTools.Update "/vc1/Data.Text" 1 WebDAVClientTools.Propfind "/vc1/Data.Text" WebDAVClientTools.ReportVersionTree "/vc1/Data.Text" ~ create two baselines in /ws1/ Configuration.DoCommands WebDAVClientTools.Delete "/ws1/" WebDAVClientTools.Mkcol "/ws1/" ! version-control Testa.Text, Testb.Text WebDAVClientTools.Put "/ws1/Testa.Text" Test1.Text WebDAVClientTools.VersionControlFreeze "/ws1/Testa.Text" "Edgar Schwarz" "Testa.Text version 1" WebDAVClientTools.Put "/ws1/Testb.Text" Test1.Text WebDAVClientTools.VersionControlFreeze "/ws1/Testb.Text" "Edgar Schwarz" "Testb.Text version 1" ! baseline-control ws1 WebDAVClientTools.BaselineControlFreeze "/ws1/" "Edgar Schwarz" "ws1 baseline 1" ! new version of Testa.Text WebDAVClientTools.Checkout "/ws1/Testa.Text" WebDAVClientTools.Put "/ws1/Testa.Text" Test2.Text WebDAVClientTools.Checkin "/ws1/Testa.Text" "Edgar Schwarz" "Version 2" ! new version of ws1/ WebDAVClientTools.Checkout "/ws1/" WebDAVClientTools.Checkin "/ws1/" "Edgar Schwarz" "ws1 baseline 2" WebDAVClientTools.ReportCompareBaseline "/hist/0ws1_.1" "/hist/0ws1_.2" WebDAVClientTools.ReportVersionTree "/ws1_" ! cleanup for restoreing baseline WebDAVClientTools.Delete "/ws2/" WebDAVClientTools.Mkcol "/ws2/" ! restore baseline to /ws2/ WebDAVClientTools.BaselineControlSelect "/ws2/" "0ws1_.1" WebDAVClientTools.Update "/ws2/" 1 WebDAVClientTools.Update "/ws2/" 2 WebDAVClientTools.ReportCompareBaseline "/hist/0ws1_.1" "/hist/0ws1_.2" ~ versioning ObeDAV itself WebDAVClientTools.Delete "/dav/" WebDAVClientTools.Mkcol "/dav/" WebDAVClientTools.Propfind "/dav/" WebDAVClientTools.Put "/dav/es.WebDAV.Mod" es.WebDAV.Mod WebDAVClientTools.Put "/dav/es.WebDAVServer.Mod" es.WebDAVServer.Mod WebDAVClientTools.Put "/dav/es.WebDAVServerTools.Mod" es.WebDAVServerTools.Mod WebDAVClientTools.Put "/dav/es.TFLog.Mod" es.TFLog.Mod WebDAVClientTools.Put "/dav/es.DAVCond.Mod" es.DAVCond.Mod WebDAVClientTools.Put "/dav/es.DAVXml.Mod" es.DAVXml.Mod WebDAVClientTools.Put "/dav/es.DAVChain.Mod" es.DAVChain.Mod WebDAVClientTools.Put "/dav/es.DAVObjects.Mod" es.DAVObjects.Mod WebDAVClientTools.Put "/dav/es.DAVFonts.Mod" es.DAVFonts.Mod WebDAVClientTools.Put "/dav/es.DAVTexts.Mod" es.DAVTexts.Mod WebDAVClientTools.Put "/dav/es.VCSBase.Mod" es.VCSBase.Mod WebDAVClientTools.Put "/dav/es.DAVDeltavBase.Mod" es.DAVDeltavBase.Mod WebDAVClientTools.Put "/dav/es.WebDAVPlugin.Mod" es.WebDAVPlugin.Mod WebDAVClientTools.Put "/dav/es.WebDAVClient.Mod" es.WebDAVClient.Mod WebDAVClientTools.Put "/dav/es.WebDAVClientTools.Mod" es.WebDAVClientTools.Mod WebDAVClientTools.Put "/dav/es.WebDAV.Text" es.WebDAV.Text WebDAVClientTools.VersionControlFreeze ^ "/dav/es.WebDAV.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAVServer.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAVServerTools.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.TFLog.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVCond.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVXml.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVChain.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVObjects.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVFonts.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVTexts.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.VCSBase.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.DAVDeltavBase.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAVPlugin.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAVClient.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAVClientTools.Mod" "Edgar Schwarz" "Initial ketchup.ethz.ch version" "/dav/es.WebDAV.Text" "Edgar Schwarz" "Initial ketchup.ethz.ch version" WebDAVClientTools.BaselineControlFreeze "/dav/" "Edgar Schwarz" "Initial baseline" ! Directory listing WebDAVClientTools.Propfind "/dav/" ! State info of baseline WebDAVClientTools.Propfind "/dav_" ! Get version list of baseline WebDAVClientTools.Get "/dav_" dav_ ÛBIERj<Ù<ñ56O6w6Ÿ67.7_7«7Ü7'8X8•8Æ8959Ž9¾9î9:N::Ï:;7;g;—;Ç;÷;(<"ÿÿ2µµÿÿÿÿC0µ¸ ÿÿÿÿCCmd"ÿÿ$¾¾ÿÿÿÿC"ÿÿ2µµÿÿÿÿCaÿÿÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ­ŒÿÿÿÿC"ÿÿ"··ÿÿÿÿC+îÏÿÿ´ÿ¤4ÿÿÿÿCFð#Oberon10.Scn.Fnt##es.WebDAVServerTools.Mod Server UI +îÏ ÿÿþºÿ�-ÿÿÿÿCEð#Oberon10.Scn.Fnt""es.WebDAVClientTools.Mod Client UI+îÏ ÿÿ Lÿ¤.ÿÿÿÿC7ð#Oberon10.Scn.Fntes.WebDAVServer.Mod +îÏ ÿÿüLÿŒ1ÿÿÿÿC8ð#Oberon10.Scn.Fntes.WebDAVClient.Mod +îÏÿÿîþ¬-ÿÿÿÿCSð#Oberon10.Scn.Fnt00es.WebDAVPlugin.Mod WebDAV method implementation*;bxÿ?ÿÿÿÿC*?8zÿCÿÿÿÿC*3dÿ7ÿÿÿÿC*)FÆþ-ÿÿÿÿC+îÏÿÿ�œþŽ-ÿÿÿÿCJð#Oberon10.Scn.Fnt''es.WebDAV.Mod WebDAV method definition +îÏÿÿ2œþj/ÿÿÿÿC1ð#Oberon10.Scn.Fntes.DAVXml.Mod *'GvÆþK+ÿÿÿÿC*S‡èÆþW‹ÿÿÿÿC*…LÈþ‰ÿÿÿÿC*'‡ºÈþ‹+ÿÿÿÿC+îÏÿÿœþW-ÿÿÿÿC<ð#Oberon10.Scn.Fntes.VCSBase.Mod VersioningTextGadgets.NewStyleProcBasicFigures.NewRectPanels.NewPanelTextGadgets.NewTexts.NewBasicFigures.NewLineÿÿ€