SccGet 函式
此函式會擷取一或多個檔案的複本,以供檢視和編譯,但不用於編輯。 在大部分系統中,檔案會標記為唯讀。
語法
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
參數
pvContext
[in]原始檔控制外掛程式的內容結構。
hWnd
[in]原始檔控制外掛程式可作為其提供之任何對話框之父代的 IDE 視窗句柄。
nFiles
[in]陣列中指定的 lpFileNames
檔案數目。
lpFileNames
[in]要擷取之檔案的完整名稱陣列。
fOptions
[in]命令旗標 (SCC_GET_ALL
, SCC_GET_RECURSIVE
)。
pvOptions
[in]原始檔控制外掛程式特定選項。
傳回值
此函式的原始檔控制外掛程式實作應該會傳回下列其中一個值:
值 | Description |
---|---|
SCC_OK | 取得作業的成功。 |
SCC_E_FILENOTCONTROLLED | 檔案不在原始檔控制之下。 |
SCC_E_OPNOTSUPPORTED | 原始檔控制系統不支援這項作業。 |
SCC_E_FILEISCHECKEDOUT | 無法取得使用者目前已取出的檔案。 |
SCC_E_ACCESSFAILURE | 存取原始檔控制系統時發生問題,可能是因為網路或爭用問題。 建議重試。 |
SCC_E_NOSPECIFIEDVERSION | 指定了無效的版本或日期/時間。 |
SCC_E_NONSPECIFICERROR | 非特定失敗;檔案未同步處理。 |
SCC_I_OPERATIONCANCELED | 作業在完成前已取消。 |
SCC_E_NOTAUTHORIZED | 用戶無權執行這項作業。 |
備註
呼叫此函式時,會使用要擷取之檔名的計數和數位。 如果 IDE 傳遞 旗標 SCC_GET_ALL
,這表示 中的專案 lpFileNames
不是檔案,而是目錄,而且要擷取指定目錄中原始檔控制下的所有檔案。
SCC_GET_ALL
旗標也可以與 SCC_GET_RECURSIVE
旗標結合,以擷取指定目錄和所有子目錄中的所有檔案。
注意
SCC_GET_RECURSIVE
不應該在沒有的情況下 SCC_GET_ALL
傳遞 。 此外,請注意,如果目錄 C:\A 和 C:\A\B 都傳遞在遞歸 get 上, C:\A\B 及其所有子目錄實際上將會擷取兩次。 這是 IDE 的責任,而不是原始檔控制外掛程式,以確保這類重複專案會保留在數位中。
最後,即使原始檔控制外掛程式在初始化時指定 SCC_CAP_GET_NOUI
旗標,表示它沒有 Get 命令的使用者介面,IDE 仍可能會呼叫此函式來擷取檔案。 旗標只是表示 IDE 不會顯示 [取得] 功能表項,而且外掛程式不會提供任何 UI。
重新命名檔案和 SccGet
情況:用戶簽出檔案,例如 a.txt,並加以修改。 簽入 a.txt 之前,第二位使用者會將 a.txt 重新命名為原始檔控制資料庫中的 b.txt、取出 b.txt、對檔案進行一些修改,以及檢查中的檔案。 第一個使用者想要第二個使用者所做的變更,因此第一個使用者會將其本機版本的 a.txt 檔案重新命名為 b.txt,並執行檔案上的取得。 不過,追蹤版本號碼的 本機快取仍會認為第一個版本的 a.txt 儲存在本機,因此原始檔控制無法解決差異。
有兩種方式可以解決此情況:原始檔控制版本的本機快取與原始檔控制資料庫不同步:
不允許在目前取出的原始檔控制資料庫中重新命名檔案。
執行 「delete old」 的對等專案,後面接著 「add new」。 下列演算法是完成這項作業的其中一種方式。