| 1 | 
  | 
 <!doctype html public "-//w3c//dtd html 4.0 transitional//en"> | 
| 2 | 
 <html> | 
 <html> | 
| 3 | 
 <head> | 
 <head> | 
| 4 | 
  | 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> | 
| 5 | 
  | 
    <meta name="GENERATOR" content="Mozilla/4.76 [en] (X11; U; Linux 2.4.1 i686) [Netscape]"> | 
| 6 | 
  | 
    <meta name="Author" content="Chris Hill"> | 
| 7 | 
  | 
    <title>MITgcm CVS policy</title> | 
| 8 | 
 </head> | 
 </head> | 
| 9 | 
 <body> | 
 <body text="#000000" bgcolor="#FF99FF" link="#0000EF" vlink="#51188E" alink="#FF0000"> | 
| 10 | 
          GCMPACK CVS policies | 
  | 
| 11 | 
          ==================== | 
 <center> | 
| 12 | 
  | 
 <h1> | 
| 13 | 
 o Introduction | 
 MITgcm CVS policy</h1></center> | 
| 14 | 
  | 
  | 
| 15 | 
   This note describes policies that apply to the GCMPACK CVS repository | 
 <h2> | 
| 16 | 
   | 
 Introduction</h2> | 
| 17 | 
 o Why have a policy? | 
 This note describes policies that apply to the MITGCM CVS repository. | 
| 18 | 
  | 
 <h2> | 
| 19 | 
   CVS itself is a liberal free-for-all product that can be used in a variety | 
 Why have a policy?</h2> | 
| 20 | 
   of ways. It is designed to provide a system for storing arbitrary files  | 
 CVS itself is a liberal free-for-all product that can be used in a variety | 
| 21 | 
   in a way that allows the change history of the individual files to be  | 
 of ways. It is designed to provide a system for storing arbitrary files | 
| 22 | 
   tracked. If CVS is used without any other policy the result can be a  | 
 in a way that allows the change history of the individual files to be tracked. | 
| 23 | 
   collection of files each of which has complex, multiply branched set of  | 
 If CVS is used without any other policy the result can be a collection | 
| 24 | 
   interelated versions. This sort of CVS repository can be come like a  | 
 of files each of which has complex, multiply branched set of inter-related | 
| 25 | 
   library where books are simply stored in a huge heap. Although nothing is  | 
 versions. This sort of CVS repository can be come like a library where | 
| 26 | 
   actually lost, the task of finding a coherent collection of material soon  | 
 books are simply stored in a huge heap. Although nothing is actually lost, | 
| 27 | 
   becomes impossible. | 
 the task of finding a coherent collection of material soon becomes impossible. | 
| 28 | 
  | 
 <p>The policies we employ address tree areas | 
| 29 | 
   The policies we employ address two areas  | 
 <ol> | 
| 30 | 
     1. Maintaining an orderly and easily identifiable, coherent set of  | 
 <li> | 
| 31 | 
        evolving "products". | 
 Maintaining an orderly and easily identifiable, coherent set of evolving | 
| 32 | 
     2. Allowing concurrent, on-going development of products. | 
 "products".</li> | 
| 33 | 
    | 
  | 
| 34 | 
 o Development trees and checkpoint trees | 
 <li> | 
| 35 | 
    | 
 Allowing concurrent, on-going development of product components.</li> | 
| 36 | 
   A directory within the GCMPACK repository resides under either the | 
  | 
| 37 | 
   development branch or the checkpoint branch. Files within each branch | 
 <li> | 
| 38 | 
   follow different policies. | 
 Making the integration  of achieved developments easy, rapid, organized | 
| 39 | 
    | 
 and clear.</li> | 
| 40 | 
 o Development tree policies | 
 </ol> | 
| 41 | 
  | 
  | 
| 42 | 
   Development trees are intended to be flexible areas where arbitrary files | 
 <h2> | 
| 43 | 
   can be stored with multiple versions, many branches supporting multiple  | 
 Development trees and checkpoint trees</h2> | 
| 44 | 
   ongoing streams of development. Development trees have no policies in  | 
 A directory within the MITGCM repository resides under either the development | 
| 45 | 
   place to control complexity. Development trees might be associated with  | 
 branch or the checkpoint branch. Files within each branch follow different | 
| 46 | 
   a particular person, a certain project or a particular special piece of  | 
 policies. | 
| 47 | 
   work. These trees are intended to be useful areas for storing current  | 
 <h2> | 
| 48 | 
   work and for archiving partially finished work so that it doesn't get  | 
 Development tree policies</h2> | 
| 49 | 
   mislaid and s that some record of the development history can be easily  | 
 Development trees are intended to be flexible areas where arbitrary files | 
| 50 | 
   maintained. The only policy that applies to development trees is that  | 
 can be stored with multiple versions, many branches supporting multiple | 
| 51 | 
   this style of tree is not intended to be used for providing a  | 
 ongoing streams of development. Development trees have no policies in place | 
| 52 | 
   "checkpoint" distribution. Tagged configurations of tools built from this | 
 to control complexity. Development trees might be associated with a particular | 
| 53 | 
   style of tree can be distributed, but because these trees do not have any | 
 person, a certain project or a particular special piece of work. These | 
| 54 | 
   polcies regarding testing of functionality, platform coverage or  | 
 trees are intended to be useful areas for storing current work and for | 
| 55 | 
   documentation these trees are not allowed to form the basis of  | 
 archiving partially finished work so that it doesn't get mislaid and so | 
| 56 | 
   "checkpoint" distrbutions or formal model releases. Other policies can  | 
 that some record of the development history can be easily maintained. The | 
| 57 | 
   be defined by individuals users of these trees but there are no further  | 
 only policy that applies to development trees is that this style of tree | 
| 58 | 
   global policies. The GCMPACK repository development/ subdirectory is  | 
 is not intended to be used for providing a "checkpoint" distribution. Tagged | 
| 59 | 
   reserved for holding development trees. Development trees also serve as  | 
 configurations of tools built from this style of tree can be distributed, | 
| 60 | 
   experimental areas for exploring new code management policies. | 
 but because these trees do not have any policies regarding testing of functionality, | 
| 61 | 
  | 
 platform coverage or documentation these trees are not allowed to form | 
| 62 | 
 o Checkpoint tree policies | 
 the basis of "checkpoint" distributions or formal "releases". Other policies | 
| 63 | 
  | 
 can be defined by individuals users of these trees but there are no further | 
| 64 | 
   Checkpoint trees are intended to provide structured storage areas for  | 
 global policies. The MITGCM repository development_tree/ sub-directory | 
| 65 | 
   holding code that is intended for open distribution and is to be readily  | 
 is reserved for holding development trees. Development trees also serve | 
| 66 | 
   downloaded. There are policies governing the operation of these trees  | 
 as experimental areas for exploring new code management policies. | 
| 67 | 
   which are designed to ensure that distributed codes are clearly  | 
 <h2> | 
| 68 | 
   identified and meet certain levels of quality. | 
 Checkpoint tree policies</h2> | 
| 69 | 
  | 
 Checkpoint trees are intended to provide structured storage areas for holding | 
| 70 | 
   1. Check-out | 
 code that is intended for open distribution and is to be readily downloaded. | 
| 71 | 
  | 
 There are policies governing the operation of these trees which are designed | 
| 72 | 
      Just do it! Two mechanisms are available. cvsanon for read only access | 
 to ensure that distributed codes are early identified and meet certain | 
| 73 | 
      and regular cvs co .... for read/write access. | 
 levels of quality. | 
| 74 | 
  | 
 <ol> | 
| 75 | 
   2. Check-in. | 
 <li> | 
| 76 | 
  | 
 Check-out</li> | 
| 77 | 
      The code check in procedure for a "checkpoint" tree is as follows | 
  | 
| 78 | 
      2.1  Check out the latest main branch revision. | 
 <br>Just do it! Two mechanisms are available. cvsanon for read only access | 
| 79 | 
      2.2  Merge your changes into that revision. | 
 and regular cvs co .... for read/write access. | 
| 80 | 
      2.3  Build and validate new code.  | 
 <li> | 
| 81 | 
      2.4  Check that there have been no further changes to the | 
 Check-in</li> | 
| 82 | 
           repository. Repeat from 2.1 if repository has changed. | 
  | 
| 83 | 
      2.5  Get clearance from other developers to check in your changes. | 
 <br>The code check in procedure for a "checkpoint" tree is as follows | 
| 84 | 
      2.6  Check in your changed main branch. | 
 <ol> | 
| 85 | 
      2.8  Build and validate the new changes. | 
 <li> | 
| 86 | 
      2.9  Tag code as "checkpointNN". Add records to docs/tag-index. | 
 Check out the latest main branch revision.</li> | 
| 87 | 
      2.10 Build and validate test cases (see testing). | 
  | 
| 88 | 
      2.11 Create and install checkpointNN.tar.gz | 
 <li> | 
| 89 | 
  | 
 Merge your changes into that revision.</li> | 
| 90 | 
   3. Testing | 
  | 
| 91 | 
  | 
 <li> | 
| 92 | 
      Things in a checkpoint tree require a test case that | 
 Build and validate new code.</li> | 
| 93 | 
      can be used to validate the component.  | 
  | 
| 94 | 
  | 
 <li> | 
| 95 | 
   4. Checkpoint tagging | 
 Check that there have been no further changes to the repository. Repeat | 
| 96 | 
  | 
 from 2.1 if repository has changed.</li> | 
| 97 | 
      No code should be left in limbo. Checking in code and then | 
  | 
| 98 | 
      leaving it in the repository untagged is bad. When you check | 
 <li> | 
| 99 | 
      in code you are creating a new checkpoint. That means you don't | 
 Get clearance from other developers to check in your changes.</li> | 
| 100 | 
      check in some code which you "know" works 100% and then go away  | 
  | 
| 101 | 
      for two weeks. When you start checking in code you make sure | 
 <li> | 
| 102 | 
      you have time to do the process end-to-end as described in section | 
 Check in your changed main branch.</li> | 
| 103 | 
      2. | 
  | 
| 104 | 
  | 
 <li> | 
| 105 | 
   5. Release tagging | 
 Build and validate the new changes.</li> | 
| 106 | 
  | 
  | 
| 107 | 
      Releases are only based on checkpoint tree code. Maintenance fixes | 
 <li> | 
| 108 | 
      to releases are also maintained within the checkpoint tree. Files | 
 Tag code as "checkpointNN". Add records to docs/tag-index.</li> | 
| 109 | 
      within a release must have accompanying documentation. The form of this | 
  | 
| 110 | 
      documentation depends on the file type. | 
 <li> | 
| 111 | 
  | 
 Build and validate test cases (see testing).</li> | 
| 112 | 
   6. Branches | 
  | 
| 113 | 
  | 
 <li> | 
| 114 | 
      Branches are to be used for bug-fixes and code patches to releases  | 
 Create and install checkpointNN.tar.gz</li> | 
| 115 | 
      only. All other changes e.g. totally new features, bug-fixes to  | 
 </ol> | 
| 116 | 
      checkpoints are introduced by moving checkpoint levels forward. The  | 
  | 
| 117 | 
      only historical code maintenance that is employed is for fixes and  | 
 <li> | 
| 118 | 
      patches to formal releases - not checkpoints. | 
 Testing</li> | 
| 119 | 
  | 
  | 
| 120 | 
 o These policies are causing me a big problem, what can I do? | 
 <br>Things in a checkpoint tree require a test case that can be used to | 
| 121 | 
  | 
 validate the component. | 
| 122 | 
   The policies are not enforced by any mechanism other than mutual  | 
 <li> | 
| 123 | 
   agreement! If you think the policies are not appropriate then let us know  | 
 Checkpoint tagging</li> | 
| 124 | 
   and we can discuss changing them. However, if you simply ignore the  | 
  | 
| 125 | 
   policies regarding the checkpoint_release trees then your code may be  | 
 <br>No code should be left in limbo (un-tagged) for extended periods. On | 
| 126 | 
   removed and/or your access revoked. | 
 the other hand it's unnecessary to create a checkpoint tag for every little | 
| 127 | 
  | 
 change. Checkpoint tags should be made after a particularly significant | 
| 128 | 
 o What about bitkeeper | 
 code modification or otherwise on a regular basis, say bi-weekly. Very | 
| 129 | 
  | 
 often we set a list of goals to be reached by the next checkpoint which | 
| 130 | 
   We are looking at bitkeeper (www.bitkeeper.com). It looks cool, but  | 
 sometimes takes more than two weeks to achieve. Obviously, in this case | 
| 131 | 
   policies are still important. Any experience, suggestions let us know.  | 
 a bi-weekly checkpoint would not be useful. | 
| 132 | 
   Watch this space! | 
 <li> | 
| 133 | 
  | 
 Release tagging</li> | 
| 134 | 
  | 
  | 
| 135 | 
  | 
 <br>Releases are only based on checkpoint tree code. Maintenance fixes | 
| 136 | 
  | 
 to releases are also maintained within the checkpoint tree. Files within | 
| 137 | 
  | 
 a release must have accompanying documentation. The form of this documentation | 
| 138 | 
  | 
 depends on the file type. | 
| 139 | 
  | 
 <li> | 
| 140 | 
  | 
 Branches</li> | 
| 141 | 
  | 
  | 
| 142 | 
  | 
 <br>Branches are a useful tool for making changes prior to checkpoints | 
| 143 | 
  | 
 without breaking other working versions but it must be understood that | 
| 144 | 
  | 
 branches are short-lived and that releases and checkpoints not be made | 
| 145 | 
  | 
 from a branch. Branches are especially useful for adding totally | 
| 146 | 
  | 
 <br>new features. bug-fixes to checkpoints are introduced by moving checkpoint | 
| 147 | 
  | 
 levels forward. The only historical code maintenance that s employed is | 
| 148 | 
  | 
 for fixes and patches to formal releases - not checkpoints.</ol> | 
| 149 | 
  | 
  | 
| 150 | 
  | 
 <h1> | 
| 151 | 
  | 
 Someone checked-in broken code so not my code doesn't work?</h1> | 
| 152 | 
  | 
 You have several options: | 
| 153 | 
  | 
 <ol> | 
| 154 | 
  | 
 <li> | 
| 155 | 
  | 
 Politely email everyone at support@mitgcm.org asking what  has happened | 
| 156 | 
  | 
 and that it be fixed?</li> | 
| 157 | 
  | 
  | 
| 158 | 
  | 
 <li> | 
| 159 | 
  | 
 Figure out why the new code is broken, fix it, check it in and proudly | 
| 160 | 
  | 
 send a message to support@mitgcm.org to show how constructive you are.</li> | 
| 161 | 
  | 
  | 
| 162 | 
  | 
 <li> | 
| 163 | 
  | 
 Complain that the quality of work is too low and then do nothing to fix | 
| 164 | 
  | 
 the code.<br> | 
| 165 | 
  | 
 <BR></li> | 
| 166 | 
  | 
  | 
| 167 | 
  | 
 <br>We advise you to only use the third option if you are confident that | 
| 168 | 
  | 
 your own contributions to the code are bug-free, well written, documented | 
| 169 | 
  | 
 and fool proof.  :)</ol> | 
| 170 | 
  | 
  | 
| 171 | 
  | 
 <h2> | 
| 172 | 
  | 
 These policies are causing me a big problem, what can I do?</h2> | 
| 173 | 
  | 
 The policies are not enforced by any mechanism other than mutual agreement! | 
| 174 | 
  | 
 If you think the policies are not appropriate then let us know and we can | 
| 175 | 
  | 
 discuss changing them. However, if you simply ignore the policies regarding | 
| 176 | 
  | 
 the checkpoint_release trees then your code may be removed and/or your | 
| 177 | 
  | 
 access revoked. | 
| 178 | 
  | 
 <h2> | 
| 179 | 
  | 
 What about bitkeeper</h2> | 
| 180 | 
  | 
 We are looking at bitkeeper (www.bitkeeper.com). It looks cool, but policies | 
| 181 | 
  | 
 are still important. Any experience, suggestions let us know. Watch this | 
| 182 | 
  | 
 space! | 
| 183 | 
  | 
 <p>Questions, comments e-mail: code.czars@mitgcm.org | 
| 184 | 
  | 
 <br> | 
| 185 | 
  | 
 <hr WIDTH="100%"> | 
| 186 | 
  | 
 <table CELLSPACING=0 CELLPADDING=0 WIDTH="100%" NOSAVE > | 
| 187 | 
  | 
 <tr NOSAVE> | 
| 188 | 
  | 
 <td><font size=-1>Last modified on $Date$</font></td> | 
| 189 | 
  | 
  | 
| 190 | 
  | 
 <td> | 
| 191 | 
  | 
 <div align=right><font size=-1>CVS:  /u/gcmpack/mitgcm.org/../cvspolicy.html,v | 
| 192 | 
  | 
 $Revision$</font></div> | 
| 193 | 
  | 
 </td> | 
| 194 | 
  | 
 </tr> | 
| 195 | 
  | 
 </table> | 
| 196 | 
  | 
  | 
 | 
 Questions, comments e-mail: gcmpack.code.czars@mitgcm.org | 
  | 
| 197 | 
 </body> | 
 </body> | 
| 198 | 
 </html> | 
 </html> |