platform-vcm-home/docs/online/vcm_story2.0/vcm2story.html
Parent Directory
|
Revision Log
Revision 1.1 - (view) (download) (as text)
| 1 : | jlemieux | 1.1 | <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> |
| 2 : | <html> | ||
| 3 : | <head> | ||
| 4 : | <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | ||
| 5 : | <meta name="GENERATOR" content="Mozilla/4.5 [en] (WinNT; I) [Netscape]"> | ||
| 6 : | <title>VCM Component Development Resources</title> | ||
| 7 : | <link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css"> | ||
| 8 : | </head> | ||
| 9 : | <body text="#000000" bgcolor="#FFFFFF"> | ||
| 10 : | | ||
| 11 : | <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > | ||
| 12 : | <tr> | ||
| 13 : | <td ALIGN=LEFT VALIGN=TOP COLSPAN="2" BGCOLOR="#0080C0"><b><font face="Arial,Helvetica"><font color="#FFFFFF">VCM | ||
| 14 : | 2.0 Story</font></font></b></td> | ||
| 15 : | </tr> | ||
| 16 : | |||
| 17 : | <tr> | ||
| 18 : | <td>by Kevin McGuire | ||
| 19 : | <p>The intention of this document is to describe the overall direction | ||
| 20 : | that VCM (Version Configuration Management) is taking in Eclipse, targeted | ||
| 21 : | at our 2.0 release. It provides a first look into the overall design goals | ||
| 22 : | and strategy we are taking, and includes a first cut of an important interface. | ||
| 23 : | The goal is to initiate discussion in the open source community, and to | ||
| 24 : | garner feedback from repository vendors looking to integrate with Eclipse. | ||
| 25 : | <h3> | ||
| 26 : | Goals</h3> | ||
| 27 : | The goal of the VCM support in the Eclipse Project is to provide a mechanism | ||
| 28 : | by which repository vendors can plug in adapters to integrate the full, | ||
| 29 : | rich, functionality of their repository solution into the Eclipse workbench | ||
| 30 : | in a first class way. The problem with many IDE integration approaches | ||
| 31 : | today is that they provide only a simple and generic level of support that | ||
| 32 : | we feel is an unacceptable level of integration. It does not allow repository | ||
| 33 : | vendors to showcase the unique benefits of their offering and treats repository/IDE | ||
| 34 : | integration as a second class afterthought. By contrast, we believe it | ||
| 35 : | is critically important that the vendor be able to integrate their product's | ||
| 36 : | workflow model into the overall Eclipse user experience. Our success will | ||
| 37 : | be measured by the number of repositories that we can support, by the richness | ||
| 38 : | of this support, and by the degree of VCM integration afforded to third | ||
| 39 : | party plugins. | ||
| 40 : | <h3> | ||
| 41 : | Eclipse VCM 1.0</h3> | ||
| 42 : | While we felt we achieved reasonable CVS support in 1.0, through that process | ||
| 43 : | we understood the places where our model would not translate well to other | ||
| 44 : | repository types. Thus it was a difficult but an absolutely necessary decision | ||
| 45 : | to hold it back from API status in 1.0. The architecture for 2.0 is significantly | ||
| 46 : | different than that in 1.0. For one, the API is smaller. Second, and most | ||
| 47 : | importantly, the workflow in VCM 1.0 was specific to Eclipse and difficult | ||
| 48 : | to customize for a given repository. This led to numerous fundamental problems | ||
| 49 : | in compatibility between the abstract Eclipse VCM model and repositories | ||
| 50 : | with rich models. What resulted was a sort of “least common denominator” | ||
| 51 : | experience that was unsatisfactory to anyone who was already familiar with | ||
| 52 : | the underlying repository model. Third, in many places VCM 1.0 was trying | ||
| 53 : | to be “too helpful” by providing numerous built in mechanisms. While this | ||
| 54 : | potentially allowed rapid integration for some repositories, in general | ||
| 55 : | one ended up having to fight this helpfulness due to subtle semantic differences | ||
| 56 : | between repositories. By contrast, in VCM 2.0 the repository integrator | ||
| 57 : | will always be “in charge”. | ||
| 58 : | <h3> | ||
| 59 : | Approach</h3> | ||
| 60 : | Our technical approach to this problem has two parts - a common base integration | ||
| 61 : | API, together with an extension mechanism. Repository vendors implement | ||
| 62 : | a simple compact base API, which provides basic functionality. The vendor then | ||
| 63 : | uses the extension mechanism to provide a higher level of integration to | ||
| 64 : | achieve the rich integrated experience provided by the unique benefits | ||
| 65 : | of the repository/configuration management/workflow solution. This entails | ||
| 66 : | writing tool plugin views, reusing common views provided by Eclipse, and | ||
| 67 : | integrating vendor specific function into the appropriate extension points | ||
| 68 : | in Eclipse. This approach is consistent with the overall tool integration | ||
| 69 : | strategy for Eclipse, and allows each vendor to decide how rich and how | ||
| 70 : | integrated an experience they will provide to their customers. It also | ||
| 71 : | allows staged development, where increasingly rich plugins can be provided | ||
| 72 : | over time. Further, it allows different adapter implementations to be produced | ||
| 73 : | for the same repository that have different personalities... for example | ||
| 74 : | one could produce a CVS adapter designed for CVS hackers, or another for | ||
| 75 : | novice users. Both work with CVS, but provide different user experiences. | ||
| 76 : | <h3> | ||
| 77 : | Timeline</h3> | ||
| 78 : | Our plan is to have the VCM 2.0 design closed off by end of year, and an | ||
| 79 : | initial cut of our new CVS adapter written for VCM 2.0 in that same time | ||
| 80 : | frame. We are eager to work with repository vendors in the context of the | ||
| 81 : | Eclipse Project at eclipse.org in that same time frame, in order to validate | ||
| 82 : | our design, and to ensure that there will be first class integrations from | ||
| 83 : | the major vendors for the release of Eclipse 2.0. | ||
| 84 : | <h3> | ||
| 85 : | Current State </h3> | ||
| 86 : | The work is still at an early stage and we expect changes to occur, in | ||
| 87 : | particular in the areas of labels (a.k.a. tags). We want this API evolution | ||
| 88 : | process to be driven by the requirements of repository vendors. By mid | ||
| 89 : | November we hope to be releasing to dev.eclipse.org a preliminary code | ||
| 90 : | drop that could be used for prototyping repository providers. We expect | ||
| 91 : | that this will help clarify the story, since code speaks louder than words. | ||
| 92 : | <h3> | ||
| 93 : | Architecture</h3> | ||
| 94 : | The VCM 2.0 story can be broken down into the following pieces. | ||
| 95 : | <p><b>VCM Core</b> | ||
| 96 : | <ul> | ||
| 97 : | <li> | ||
| 98 : | VCM 2.0 will provide a base API (ITeamProvider interface, included below) | ||
| 99 : | representing the core set of VCM operations. </li> | ||
| 100 : | |||
| 101 : | <li> | ||
| 102 : | All providers must implement this interface. </li> | ||
| 103 : | |||
| 104 : | <li> | ||
| 105 : | An Eclipse project will be associated with one and only one ITeamProvider | ||
| 106 : | instance. </li> | ||
| 107 : | |||
| 108 : | <li> | ||
| 109 : | There will be support for looking up an ITeamProvider instance given a | ||
| 110 : | project. </li> | ||
| 111 : | </ul> | ||
| 112 : | In effect, ITeamProvider describes the abstract VCM model that other plugins | ||
| 113 : | can rely on for performing repository neutral operations. For example, | ||
| 114 : | a headless ISV consumer of this API could use it for writing build tools, | ||
| 115 : | code generation, etc. It is up to each repository vendor to implement this | ||
| 116 : | interface within the prescribed pre and post conditions, mapping the operations | ||
| 117 : | onto their native repository function. | ||
| 118 : | <p><b>VCM UI</b> | ||
| 119 : | <ul> | ||
| 120 : | <li> | ||
| 121 : | There will be a mechanism by which a provider can offer up a Team menu | ||
| 122 : | that other plugins can include in their views. There will be a standard | ||
| 123 : | menu which a provider may choose to use wholly, supplement with additional | ||
| 124 : | operations, or replace entirely. </li> | ||
| 125 : | |||
| 126 : | <li> | ||
| 127 : | Through this menu mechanism VCM acts as the intermediary between the third-party | ||
| 128 : | plugin that wishes to include VCM operations in their view, and the provider | ||
| 129 : | for that project who can offer up a Team menu specific to the workflows | ||
| 130 : | of their repository type. This allows repository specific VCM operations | ||
| 131 : | to be populated in views where the plugin writer and the repository provider | ||
| 132 : | don't know about each other. </li> | ||
| 133 : | |||
| 134 : | <li> | ||
| 135 : | VCM will supply some standard views that repository providers may wish | ||
| 136 : | make use of. At present this list includes the Synchronization view from | ||
| 137 : | Eclipse 1.0 and the History view. In order to use these views, the repository | ||
| 138 : | provider will need to conform to additional APIs. Customization or subclassing | ||
| 139 : | may also be required. This offers a code reuse story for leveraging common | ||
| 140 : | views so that all repository providers don't need to write each from scratch. </li> | ||
| 141 : | |||
| 142 : | <li> | ||
| 143 : | Alternatively, providers may wish to write their own custom views. This | ||
| 144 : | might be required in cases where the provider is unable to conform to the | ||
| 145 : | additional API, or in cases where the provider wishes to supply a view | ||
| 146 : | which is either richer or works substantially different than the Eclipse | ||
| 147 : | VCM supplied view. In all cases, it is the provider who is in charge. </li> | ||
| 148 : | |||
| 149 : | <li> | ||
| 150 : | Decorators can be implemented to show VCM related information of a resource, | ||
| 151 : | for example in the Eclipse navigator. </li> | ||
| 152 : | |||
| 153 : | <li> | ||
| 154 : | There will be an update mechanism to inform listeners of changes to the | ||
| 155 : | implied VCM properties (e.g. whether a resource is checked out or not). | ||
| 156 : | This would be used, among other places, to update the resource decorators | ||
| 157 : | above. </li> | ||
| 158 : | </ul> | ||
| 159 : | |||
| 160 : | <p> | ||
| 161 : | The figure below shows this architectural separation for two suggested repositories, CVS and ClearClase. | ||
| 162 : | </p> | ||
| 163 : | |||
| 164 : | <img SRC="image001.gif"> | ||
| 165 : | |||
| 166 : | <p> | ||
| 167 : | The dashed boxes denote those pieces that a repository integrator must implement. | ||
| 168 : | For example for ClearCase, one would implement the VCM Core APIs, as | ||
| 169 : | denoted by the box CC Impl, as well as certain UI components, as denoted by | ||
| 170 : | CC UI. The vendor has opportunity to make repository specific calls in order to | ||
| 171 : | support their UI components. However, third party tools remain agnostic with | ||
| 172 : | regards to individual repository APIs and semantics. | ||
| 173 : | The amount of effort required to implement the UI pieces will depend whether one | ||
| 174 : | wishes to leverage the Eclipse VCM supplied UI components, or whether one wishes | ||
| 175 : | to implement custom UI components that better express the workflow of that repository type. | ||
| 176 : | Together, the VCM Core and UI architectures provide the pervasiveness required | ||
| 177 : | for a well-integrated VCM experience, with the customization required for rich | ||
| 178 : | repository integration. | ||
| 179 : | </p> | ||
| 180 : | |||
| 181 : | <p> | ||
| 182 : | The vendor has opportunity to make repository specific calls in order to | ||
| 183 : | support their UI components. However, third party tools remain agnostic | ||
| 184 : | with regards to individual repository APIs and semantics. The amount of | ||
| 185 : | effort required to implement the UI pieces will depend whether one wishes | ||
| 186 : | to leverage the Eclipse VCM supplied UI components, or whether one wishes | ||
| 187 : | to implement custom UI components that better express the workflow of that | ||
| 188 : | repository type. | ||
| 189 : | <p>Together, the VCM Core and UI architectures provide the pervasiveness | ||
| 190 : | required for a well integrated VCM experience, with the customization required | ||
| 191 : | for rich repository integration. Included below is the interface | ||
| 192 : | ITeamProvider, the 'core' API described previously. As mentioned earlier, | ||
| 193 : | this is just a first cut and will be undergoing change. Other APIs supporting | ||
| 194 : | associating a provider with a project, looking up a provider for a project, | ||
| 195 : | Synchronization view, History view, and decorators will be coming. | ||
| 196 : | </p> | ||
| 197 : | <p>For a sneak preview of the provider API see <a href="ITeamProvider_sample.html">ITeamProvider</a><!-- END OF FILE --></td> | ||
| 198 : | </tr> | ||
| 199 : | </table> | ||
| 200 : | |||
| 201 : | </body> | ||
| 202 : | </html> |
| help@eclipse.org | ViewVC Help |
| Powered by ViewVC 1.0.3 |
