Changed the rules to allow for partial installation and removal of fars.
[mirror_edk2.git] / Tools / XMLSchema / FarManifest.xsd
index 5993208..744ec58 100644 (file)
@@ -169,22 +169,22 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       3.1 A platform q is said to depend on a package p, iff p, or some module m contained in p, is necessary to build q.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      4.  A far f may be installed into the workspace w, iff for each module m in f, m’s dependencies are met by the packages in w.\r
+      4.  A far f may be installed into the workspace w, iff for each module m in f, m's dependencies are met by the packages in w or f.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      a. (If the dependencies are not met, then no part of far f will be installed. It is not legal to partially install a far into the workspace.)\r
+      a.  It is supported to "partially" install a far. A partial installation of a far means that 1 or more packages and/or platforms are installed into the workspace from the far. For each package or platform p in f, p's dependencies must be satisfied by a package in the workspace.\r
     </xs:documentation>\r
     <xs:documentation>\r
       5.  A far f may be removed from the workspace w, iff for each module m in w, and for each package p in f, m does not depend on p.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      a. (If there is some dependency on f, then no part of f may be uninstalled from w. It is not legal to partially uninstall a far from the workspace.)\r
+      a.  It is supported to "partially" remove a far. In this case, one or more of the packages or platforms in the far can be removed, provided that for each package and platform p in the workspace w, there does not exist a module m such that m depends on p.\r
     </xs:documentation>\r
     <xs:documentation>\r
       6.  When installing a far f into workspace w, for each package p in f, allow the user to install in p's default location, or choose a new location l (which must be unoccupied) within the workspace. Record this location l in the database. Each package p in f will be recorded in the database, associated with the GUID of f, as well as the actual install location l. (So we will know which far each package belongs to.)\r
     </xs:documentation>\r
     <xs:documentation>\r
-      7.  When installing a far f into workspace w, if there exists a package p in w, and p is in f, then the user must be prompted to choose a location that does not collide with the location of p in workspace w. We will end up with two instances of p in w at two distinct locations.\r
+      7.  When installing a far f into workspace w, if there exists a package p in w, and p is in f, then the user must be prompted to choose a location that does not collide with the location of p in workspace w. We will end up with two instances of p in w at two distinct locations. Alternately, the user may elect to partially install the far, leaving out the redundant package.\r
     </xs:documentation>\r
     <xs:documentation>\r
       8.  A far f may replace a far g in the workspace w, iff for each module m contained in w, if m depends on a package p, and p is only contained in g, then there must exist a package q in f, such that m depends on q. The net effect is that g is removed and f is installed, in one operation. The normal rules for installing f still apply--the dependencies of the modules of f must be satisfied. After the replacement, it must be the case that all the modules dependencies in the workspace are satisfied. Note that it is possible to backrev a package in this way. \r
@@ -199,31 +199,25 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       10. When a far f is removed from the workspace w, for each package p in f, we will remove p from w.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      11. If a package p belongs to a far f, then it is not legal to remove p from the workspace w unless f is removed from w.\r
+      11. If a package or platform p belongs to a far f, then it is legal to remove p from the workspace w iff, there does not exist a module m in w such that m depends on p.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      11.1 If a platform p belongs to a far f, then it is not legal to remove p from the workspace w unless f is removed from w.\r
+      12. When a far f is removed from the workspace, the we will remove all the files in f from the workspace tree. If a file has been modified from the original as installed from the far (per md5sum) then the user should be asked if he is "sure" he wants to remove it.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      12. A package p may be removed from the workspace, provided there does not exist a far f that contains p. (Newly created or cloned packages will not exist within a far, and thus may be removed from the workspace directly.)\r
+      13. When a far is created, a GUID is generated and assigned to the far. If a far is created from the same components at a later time, it would have a different GUID.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      13. When a far f is removed from the workspace, the we will remove all the files in f from the workspace tree. If a file has been modified from the original as installed from the far (per md5sum) then the user should be asked if he is "sure" he wants to remove it.\r
+      14. If a package p is marked with p->RePackage==false, then p may not be added to a far.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      14. When a far is created, a GUID is generated and assigned to the far. If a far is created from the same components at a later time, it would have a different GUID.\r
+      15. When constructing a far f that contains at least one platform, then f may optionally be constructed such that for each platform q in f, every package p on which q depends should be included in f, unless p->RePackage==false. The far will have all the packages required, and may then be installed as a self-inflating executable that will create a brand new workspace on the developer's workstation.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      15. If a package p is marked with p->RePackage==false, then p may not be added to a far.\r
+      16. A far f is identical to a far g, iff f->Guid == g->Guid.\r
     </xs:documentation>\r
     <xs:documentation>\r
-      16. When constructing a far f that contains at least one platform, then f may optionally be constructed such that for each platform q in f, every package p on which q depends should be included in f, unless p->RePackage==false. The far will have all the packages required, and may then be installed as a self-inflating executable that will create a brand new workspace on the developer's workstation.\r
-    </xs:documentation>\r
-    <xs:documentation>\r
-      17. A far f is identical to a far g, iff f->Guid == g->Guid.\r
-    </xs:documentation>\r
-    <xs:documentation>\r
-      18. A far f may be installed into the workspace w, iff there is no far g in w such that f->Guid==g->Guid.\r
+      17. A far f may be installed into the workspace w, iff there is no far g in w such that f->Guid==g->Guid. In that case, it is called "updating" the far in the workspace. The user may select some subset of packages or platforms to reinstall or update, to ensure that the files in the workspace are correct.\r
     </xs:documentation>\r
   </xs:annotation>\r
 </xs:schema>\r