.load

.load [-o] [-e] [-v] [-j] [<relative_path>/]<filename>
.load -r|-p <registername>
.load -s `<command name>`

在執行 .load 指令的步驟之後,.load 指令會從 XML 檔載入專案,並將載入專案的步驟新增至現行專案,讓專案能夠在執行時期動態建立及載入步驟。您可以使用選項來讓 .load 指令從暫存器或指令的輸出提取資料。

如果要撰寫 .load 指令的 XML 檔,請先使用現有專案的匯出檔案,以提供您適當的基本結構。您也可以在系統中建立專案,然後將其匯出,以用於 .load 指令。這個主題包含範例 XML 程式碼。

.load 指令所載入的步驟可包含列入或鏈結專案的參照。依預設,系統會在 XML 檔中尋找列入專案的定義,並載入其步驟;請參閱本主題後面的 -e 選項,以瞭解如何讓系統從資料庫取得列入專案定義。若為通過鏈結專案或失敗鏈結專案,系統一律會在資料庫中尋找專案定義。

註: 如果是從 .load 來執行 JPO 步驟,else-inline 所識別的專案或程式庫,必須是系統中已存在的專案或程式庫,否則,就不會執行列入。

XML 檔中的多個專案

因為系統會將列入專案與其呼叫端專案一起匯出,所以 XML 檔可能會包含數個專案。.load 指令會執行檔案中標示為主要的專案。這個專案的 <project> 元素上有 primary="1" 屬性。

指令的選項和參數

最簡單的指令形式是 .load <filename>。您可以選擇在檔名前面加上路徑名稱(工作目錄的相對路徑)。例如,指令
.load ../../project.xml

會從伺服器目錄(包含專案及工作目錄的目錄)載入 project.xml 檔,並假設該步驟的路徑內容為 "/"(預設值)。

註: 當正常的步驟啟動列入專案時,系統會到資料庫取得該專案的現行定義;當 .load 指令所匯入的步驟啟動列入專案時,系統則會在 XML 檔中尋找列入專案的定義。請參閱下面 -e 選項的說明,以了解如何避免這種狀況。
註: 從 Build Forge 7.1 版之前的版本產生的步驟 XML 不受支援且可能會失敗,因為這些元素是透過名稱而非 ID 來參照。
註: .load 會使用匯入公用程式,進而根據匯入公用程式的設定來套用存取群組所有權。請參閱如何將存取群組指派給匯入的物件以取得進一步資訊。
該指令有下列選項:
-r 或 -p
這些選項會使系統從暫存器載入步驟。請搭配這些選項來使用指令行。
.load -r|-p <registername>
-r 選項會從原始暫存器載入步驟,而 -p 選項會從專案暫存器載入步驟。您可以在專案的前幾個步驟中,於暫存器內建置資料,然後使用此指令從暫存器載入步驟。
-s
這個選項會使系統執行某個指令,並利用這個指令的輸出作為要載入的資料。請使用下列指令行
.load -s `<command name>`
-e
當設定 -e 選項時,系統會從資料庫取得列入的專案,而不是從載入的 XML 檔取得。它會將 chainID 的值當作對資料庫中之專案 ID 的參照。這樣會使 XML 檔參照最新版的列入專案(而不是 XML 檔中的專案),或是參照沒有包含在 XML 檔中的專案。
-o
使用 -o 選項可停用 XML 檔中的列入專案。使用這個選項時,系統會忽略主要專案中的任何列入專案。步驟中若有包含對列入專案的參照,則會執行其指令,但會忽略其列入。
-j
如果 XML 檔中的最後一組步驟是採用執行緒,而且 .load 指令後面的步驟也採用執行緒,請使用 -j 選項。-j 選項會將最後一個含執行緒作業的步驟轉換成一個結合步驟。否則,含執行緒作業的步驟就會成為 .load 指令後面的執行緒步驟區塊一部分。
-v
傳送所要載入的 XML 檔內容,以便顯示終端機以供檢視。

範例 XML

下列範例顯示要搭配 .load 指令來使用的 XML 檔。該 XML 是藉由匯出一個名為 HelloWorldPlusInline 的專案而建立的。

請注意範例 XML 的下列詳細資料:
  • XML 包含兩個 <project> 元素。
  • XML 中的第一個專案是主要專案;其具有 name="HelloWorldPlusInline"primary="1" 屬性。
  • XML 中的第二個專案名為 Sleepytime,並具有 primary="0" 屬性,表示它不是主要專案。
  • HelloWorldPlusInline 的第一個步驟是名稱為 EchoHelloWorld 的步驟,它包含 echo 指令和 chainID 屬性。chainID 屬性的值為 2,表示系統應列入含 ID 2 的專案,也就是 Sleepytime 專案。
    註: 請忽略步驟屬性 inline;這是已不再使用的淘汰屬性。所有步驟都有這個屬性,且值為 N。如果要判斷步驟中是否有列入專案,請尋找 chainID 屬性。chainID 的值會參照專案的 ID。依預設,系統會在 XML 檔中尋找列入專案,但如果您在 .load 指令中使用 -e 選項,系統就會將該值視為資料庫中的專案 ID。如此可讓您建立您自己的 .load 檔,而不需要在檔案中併入列入專案。
    註: 將 .load 與 Build Forge 7.0.x 版和更舊的版本所產生的 XML 檔搭配使用,不但不受支援,而且還無法正常運作,因為舊的語法是透過名稱而非 UUID 來參照物件。
  • 每個專案都有 id 屬性。這個 ID 值與資料庫中的專案 ID 相同。您可以從安裝目錄執行下列指令,來取得專案 ID 的清單:
    bfexport -l 
  • commandStore 屬性包含 <command> 元素內容的副本,但某些字元會跳離 XML。例如,在 <command> 中可能有 "、'、&、<、> 或新行。這些字元在 commandStore 中是以 &quot;、&apos;、&amp;、&lt;、&gt; 和 &#10; 來表示。

<?xml version="1.0" encoding="UTF-8"?>

<buildforge schema="7.115014" comment="">
  <project access="6" active="Y" name="HelloWorldPlusInline" primary="1" 
   selectorId="Choose_local" maxthread="0" increment="Y" tagsync="0" 
   buildclass="Production" sticky="N" envId="0" tag="BUILD_$B" id="19" exclusive="0">
    <tagvar autoincrement="Y" name="B" id="1">2</tagvar>
    <step absolute="N" failwait="N" selectorId="" dir="/" broadcast="N" 
     timeout="300" id="1" passwait="N" inline="N" threadable="N" chainId="2" 
     access="6" active="Y" passnotify="0" description="EchoHelloWorld" onfail=" " 
     failnotify="0" envId="0" commandStore="echo Hello World">
      <command>echo Hello World</command>
    </step>
    <step absolute="N" failwait="N" selectorId="" dir="/" broadcast="N" 
     timeout="300" id="2" passwait="N" inline="N" threadable="N" access="6" 
     active="Y" passnotify="0" description="export proj to build and server folders" 
     onfail=" " failnotify="0" envId="0" 
     commandStore=".export $BF_PROJECTNAME_PHYS.xml&#10;copy /Y $BF_PROJECTNAME_PHYS.xml ..\..">
      <command>.export $BF_PROJECTNAME_PHYS.xml
copy /Y $BF_PROJECTNAME_PHYS.xml ..\..</command>
    </step>
  </project>
  <project access="6" active="Y" name="Sleepytime" primary="0" 
   selectorId="Choose_local" maxthread="0" increment="Y" tagsync="0" 
   buildclass="Production" sticky="N" envId="0" tag="SLEEP_$B" id="2" exclusive="0">
    <tagvar autoincrement="Y" name="B" id="1">21</tagvar>
    <step absolute="N" failwait="N" selectorId="" dir="/" broadcast="N" 
     timeout="300" id="1" passwait="N" inline="N" threadable="N" access="6" 
     active="Y" passnotify="0" description="Sleep, perchance to dream" onfail=" " 
     failnotify="0" envId="0" commandStore=".sleep 0">
      <command>.sleep 0</command>
    </step>
  </project>
  <class maxdays="0" access="1" entranceprojectId="1" name="Production" keepfiles="B"
   deletechangedata="N" purgeprojectId="2" exitProjectId="5" candidates="AnyBuild "
   maxbuilds="0"></class>
    <selector operator="" required="" access="6" value="" name="Choose_local" 
   selectorId="" property=""></selector>
</buildforge>


意見