TextDocs.NewDocOberon12b.Scn.FntTOberon10.Scn.FntpOberon10b.Scn.Fnt A ($rDistributed Authoring and Versioning with Oberon System3 based on WebDAV Versioning Edgar Schwarz, Edgar@EdgarSchwarz.de Contribution to the Oberon Event at JMLC 2000 Zrich, September 6th, 2000  The Problem Developers from around the world who band together to develop software need distributed source control. When it comes to working on the design documents, test cases specifications and source code that compromises the project, individual team members need to work on pieces in isolation and then integrate those pieces with the modifications of their coworkers, without clobbering anyones changes. A Possible Solution New work that has started in the Internet Engineering Taskforce (IETF) promises to make it easier to perform remote collaborative project work over the Web. The effort is called Delta-V, and it's goal is to provide versioning and configuration management capabilities for the Web by extending the Web's core protocol, HTTP. The standard process isn't finished yet. Though WebDAV is still in the early stages of adoption, Internet Explorer 5 and the Office 2000 suite have already integrated WebDAV support via a feature called "Web Folders". Recently the Apache Software Foundation announced support for WebDAV with mod_dav version 1.0. And a lot more companies already support WebDAV. Information can be found at "http://www.webdav.org/". WebDAV and Oberon The following describes requirements, design and implementation of a package for version control for local and remote files with Oberon System3 (OberonDAV) . Client and server are implemented on Oberon System3. The protocol is based on WebDAV versioning. So if sometime the full WebDAV protocol is implemented the restriction on Oberon client and server can be lifted. The package is far from complete, but it's a foundation with which it's possible to coordinate distributed development for Oberon projects which aren't simple enough that one lone developer can shoulder it. General Description Implementing a simple remote versioning system for Oberon System3. A protocol based on WebDAV versioning is used for communicating between client and server. For a GUI there is VCS.Panel. Oberon doesn't know access rights to files yet so the idea is that anybody can READ the files on the server. For working on a project it is possible to define workspaces (That's WebDAV lingo). A workspace can contain working resources (editable files) of versioned resources (files under version control). A workspace is realized at the moment just by a bunch of files having the workspace name as a common prefix. So it is nice if it ends with a '.' to easily see where the workspace is ending and the filename begins. Access to a workspace is controlled by a username/password pair which is given by an administrator of the server on request. Having access to a workspace means that you can checkout a resource (create a editable working resource). Change this working resource and create a new version. Afterwards you can tell your collaborators who also work in the workspace that you created a new version and they can download it if they are interested. For defining a release of a project its enough to have a list of the files and their versions which belong to it. Stuff for this already exist as you can see in some buttons VCS.Panel (PartVersions, CheckParts, ExtractParts). For checking differences between versions of resources Architecture An overview of the fundamental modules.  The Graphical User Interface An example of VCS.Panel.  How to get DAV and more Information Have a look at the Native Oberon homepage "http://www.oberon.ethz.ch/native/" and search for the contributions directory to download it. Also you can download it from my homepage at "http://www.edgarschwarz.de". For more information on WebDAV itself try "http://www.webdav.org/". And if you have questions or want to help with improving OberonDAV just tell me. Edgar@EdgarSchwarz.de. BIER00HJmJ~7Z5AqgC:k\H+T% %!w!!}""+#f##$p$$$"dd C"dd C  "$%') YjC+,-./0123456789:;<=>?@ABCDEF C*C@ C2 C?#Oberon10.Scn.FntremoteD# C>#Oberon10.Scn.Fntlocal< C+ JC.#Oberon10.Scn.Fnt NetSystem*;?C+ 6JC/#Oberon10.Scn.Fnt NetSystem  C* C*'+C*q7ZF;uC*P C+J2Cg#Oberon10.Scn.FntDDVCSNet interfacing either to versioning on local or remote machine. +4CE#Oberon10.Scn.Fnt""VCS.Panel graphical user interface+4l*CF#Oberon10.Scn.Fnt##DAVServer.Mod A simple HTTP server*%)C*?CC*;F?C*%)C*P##C+'CE#Oberon10.Scn.Fnt""VCS versioning on remote machine. +!j#CC#Oberon10.Scn.Fnt DAVClient A simple HTTP client. +##CD#Oberon10.Scn.Fnt!!VCS versioning on local machine. *!%C+&~x1CY#Oberon10.Scn.Fnt66es.CTapplication.Mod octetstream PUT (at the moment).+(1Ca#Oberon10.Scn.Fnt>>DAVctNone generic handler for requests without a context type.+*1CI#Oberon10.Scn.Fnt&&DAVhsVersion HTTP service versioning. 0*.VCS\dN@CNameDirPatternfDir.CCmdVCSNet.Directory '&H.Value ' '&W.Value ' '&DirPattern.Value 'i@.V => @6CCmdSystem.CopyFiles &D.Value .V&V.Value => &W.Value &D.Value ~&pCNameHCmdKOpen(CCmdDesktops.OpenDoc &W.Value &D.ValuefCheckOut6CCmdVCSNet.CheckOut '&H.Value ' '&W.Value ' &D.Value &V.ValueVUnCO$CCmdVCSNet.UncheckOut &H.Value &W.Value &D.ValueDiff$CCmdVCS.ExecAttrCmdsCmd0VCSDiff.Do &Optionen.Value &W.Value &D.ValueCmd1 &D.Value .V&V.ValueZPutFCCmdDAVClient.OctetPut '&H.Value ' '&W.Value ' &D.Value'$CNameOptionen#es.@7CNameWZGet`CCmdDAVClient.OctetGet '&H.Value ' '&W.Value ' &D.Value;Target ^4CCmdVCS.SetTarget ^*$CNameExtractOpts^ExtractParts ^PCCmdVCSPacket.ExtractParts &ExtractOpts.Value ^FCheckParts ^VFCCmdVCSPacket.CheckParts ^JPartVersions ^NCCmdVCSPacket.PartVersions ^LHelpV&CCmdDesktops.OpenDoc VCS.ToolColor[PropFind`.CCmdVCSNet.PropFind '&H.Value ' &D.Value &V.ValueCheckIn2,CCmdVCS.ExecAttrCmdsCmd0VCSNet.CheckIn '&H.Value ' '&W.Value ' &D.ValueCmd1 '&A.Value ' '&Log.Value ' '&M.YesVal 'LReport*CCmdVCSNet.Report '&H.Value ' &D.ValueVTruncV&CCmdVCS.HandleTrunc &D.Value &V.ValueColor5Edgar@EdgarSchwarz.deCNameAJhost and workspace added to OctetGet/Put^CNameLogX8CNameVCmdVCSNet.PropFind '&H.Value ' &D.Value &V.ValueVDAVClient.ModCNameDCmdDesktops.OpenDoc &W.Value &D.Value /CYesValexpandNameM+GvC5 Oberon10.Scn.Fnt  s  sOberon10i.Scn.Fnt=:  A Builder.Compile * System.Free ^ Watson.ShowDef \S ^ TextDocs.Show ^ Builder.MarkErrors ^ Builder.NextError * Builder.ClearErrors * Hex.Open ^ AsciiCoder.CodeFiles % ^ Diff.Do ^ Find.Panel TextDocs.Show ^ PPP DAV  DAV.Pkt DAV.Tool VCS.Panel DAV.Text VCS.Tool DAVTest.Mod DAVClient.Mod DAVctText.Mod DAVctApplication.Mod DAVctNone.Mod DAVhsVersion.Mod DAVServer.Mod DAVWatchDog.Mod DAVAuth.Mod VCSNet.Mod VCSPacket.Mod VCS.Mod VCSBase.Mod VCSDiff.Mod DAVClient.SetUser edgar DAVClient.SetUser schwarz NetSystem.SetUser dav:edgar@shaun.inf.ethz.ch ~ NetSystem.SetUser dav:schwarz:schwarz@es.shaun.inf.ethz.ch ~ DAV.hello.shaun.Mail  SpreadSheet  BIER/0(-.@.`bOberon10.Scn.Fnt:< N VCSPacket.NewPacket es.PPP.Pkt source1.arc Compiler.Compile es.PPPDebug.Mod\s es.PPPTools.Mod es.PPPHDLC.Mod es.PPPFSM.Mod es.PPPIPCP.Mod es.PPPPAP.Mod es.PPPLCP.Mod es.PPPMain.Mod\s es.PPPTest.Mod\s ~ es.PPP.Tool ~ PPPTest.LogOn PPPTest.LogOff PPPTest.ShowLog PPPDebug.Init PPPTest.LCPDecode ^ PPPTest.IPCPDecode ^ PPPTest.PAPDecode ^ Compress ET.Call System.CopyFiles "es.* => *" ~ *PPP *Mail *Bug* AsciiCoder.CodeFiles ^BIER--*W,-IOberon10.Scn.FntOberon12.Scn.Fnt VCSPacket.ExtractPacket ^ es.PPP.Pkt es.PPP*.VCS VCSPacket.DeletePartVersions es.VCS.Pkt ~ VCSPacket.CheckPacketParts ^ gendert: PPPDebug, PPPMain Diff.Do Outlines.Expand * ET.Call Diff.Do "\m es.* * " ~ BIER+,A,, COutlines.NewOutline CN*Oberon10.Scn.Fnt Compress.Add es.PPP.1.0.0.Arc PPP.Pkt PPPDebug.Mod ppp.* PPPTools.Mod PPPHDLC.Mod PPPFSM.Mod PPPIPCP.Mod PPPPAP.Mod PPPLCP.Mod PPPMain.Mod PPPTest.Mod SPHIPPEN.PPPLOG.Text PPP.Tool ~ BIER--\- COutlines.NewOutline C COutlines.NewOutline C C C8Oberon10.Scn.Fntz  Gadgets.Insert SpreadSheets.New ~ Diff.Do \d ^ SpreadSheetGuide.Book SpreadSheetControl.Panel SpreadSheet.Arc Builder.Compile \2x \D=es Formulas.Mod Cells.Mod SpreadModel.Mod Tables.Mod FancyFields.Mod SpreadSheets.Mod SmartGadgets.Mod ~ Builder.Compile \2 \D=es * BIER/// COutlines.NewOutline COutlines.NewOutline TextGadgets.NewStyleProcPanels.NewPanelBasicFigures.NewLineOutlines.NewOutlineTextFields.NewCaptionTextGadgets.NewTexts.NewTextFields.NewTextFieldBasicGadgets.NewButtonBasicGadgets.NewCheckBox