199 lines
8.0 KiB
C++
199 lines
8.0 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef IP4_H
|
|
#define IP4_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "appframework/IAppSystem.h"
|
|
#include "tier1/utlstring.h"
|
|
#include "tier1/utlsymbol.h"
|
|
#include "tier1/utlvector.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Current perforce file state
|
|
//-----------------------------------------------------------------------------
|
|
enum P4FileState_t {
|
|
P4FILE_UNOPENED = 0,
|
|
P4FILE_OPENED_FOR_ADD,
|
|
P4FILE_OPENED_FOR_EDIT,
|
|
P4FILE_OPENED_FOR_DELETE,
|
|
P4FILE_OPENED_FOR_INTEGRATE,
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: definition of a file
|
|
//-----------------------------------------------------------------------------
|
|
struct P4File_t {
|
|
CUtlSymbol m_sName; // file name
|
|
CUtlSymbol m_sPath; // residing folder
|
|
CUtlSymbol m_sDepotFile; // the name in the depot
|
|
CUtlSymbol m_sClientFile; // the name on the client in Perforce syntax
|
|
CUtlSymbol m_sLocalFile; // the name on the client in local syntax
|
|
CUtlSymbol
|
|
m_sFileType; // the type according to the server, see p4 help filetypes
|
|
int m_iHeadRevision; // head revision number
|
|
int m_iHaveRevision; // the revision the clientspec has synced locally
|
|
bool m_bDir; // directory
|
|
bool m_bDeleted; // deleted
|
|
P4FileState_t m_eOpenState; // current change state
|
|
int m_iChangelist; // changelist current opened in
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: a single revision of a file
|
|
//-----------------------------------------------------------------------------
|
|
struct P4Revision_t {
|
|
int m_iChange; // changelist number
|
|
int m_nYear, m_nMonth, m_nDay;
|
|
int m_nHour, m_nMinute, m_nSecond;
|
|
|
|
CUtlSymbol m_sUser; // submitting user
|
|
CUtlSymbol m_sClient; // submitting client
|
|
CUtlString m_Description;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: a single clientspec
|
|
//-----------------------------------------------------------------------------
|
|
struct P4Client_t {
|
|
CUtlSymbol m_sName;
|
|
CUtlSymbol m_sUser;
|
|
CUtlSymbol m_sHost; // machine name this client is on
|
|
CUtlSymbol m_sLocalRoot; // local path
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Interface to accessing P4 commands
|
|
//-----------------------------------------------------------------------------
|
|
#define P4_INTERFACE_VERSION "VP4002"
|
|
|
|
abstract_class IP4 : public IAppSystem {
|
|
public:
|
|
// name of the current clientspec
|
|
virtual P4Client_t &GetActiveClient() = 0;
|
|
|
|
// changes the current client
|
|
virtual void SetActiveClient(const char *clientname) = 0;
|
|
|
|
// Refreshes the current client from p4 settings
|
|
virtual void RefreshActiveClient() = 0;
|
|
|
|
// translate filespecs into the desired syntax
|
|
virtual void GetDepotFilePath(char *depotFilePath, const char *filespec,
|
|
int size) = 0;
|
|
virtual void GetClientFilePath(char *clientFilePath, const char *filespec,
|
|
int size) = 0;
|
|
virtual void GetLocalFilePath(char *localFilePath, const char *filespec,
|
|
int size) = 0;
|
|
|
|
// retreives the list of files in a path
|
|
virtual CUtlVector<P4File_t> &GetFileList(const char *path) = 0;
|
|
|
|
// returns the list of files opened for edit/integrate/delete
|
|
virtual void GetOpenedFileList(CUtlVector<P4File_t> & fileList) = 0;
|
|
virtual void GetOpenedFileList(const char *pRootDirectory,
|
|
CUtlVector<P4File_t> &fileList) = 0;
|
|
virtual void GetOpenedFileListInPath(const char *pPathID,
|
|
CUtlVector<P4File_t> &fileList) = 0;
|
|
|
|
// retrieves revision history for a file or directory
|
|
virtual CUtlVector<P4Revision_t> &GetRevisionList(const char *path,
|
|
bool bIsDir) = 0;
|
|
|
|
// returns a list of clientspecs
|
|
virtual CUtlVector<P4Client_t> &GetClientList() = 0;
|
|
|
|
// changes the clientspec to remove the specified path (cloaking)
|
|
virtual void RemovePathFromActiveClientspec(const char *path) = 0;
|
|
|
|
// sets the name of the changelist to open files under, NULL for "Default"
|
|
// changelist
|
|
virtual void SetOpenFileChangeList(const char *pChangeListName) = 0;
|
|
|
|
// file manipulation
|
|
virtual bool OpenFileForAdd(const char *pFullPath) = 0;
|
|
virtual bool OpenFileForEdit(const char *pFullPath) = 0;
|
|
virtual bool OpenFileForDelete(const char *pFullPath) = 0;
|
|
|
|
// submit/revert
|
|
virtual bool SubmitFile(const char *pFullPath,
|
|
const char *pDescription) = 0;
|
|
virtual bool RevertFile(const char *pFullPath) = 0;
|
|
|
|
// file checkin/checkout for multiple files
|
|
virtual bool OpenFilesForAdd(int nCount, const char **ppFullPathList) = 0;
|
|
virtual bool OpenFilesForEdit(int nCount, const char **ppFullPathList) = 0;
|
|
virtual bool OpenFilesForDelete(int nCount,
|
|
const char **ppFullPathList) = 0;
|
|
|
|
// submit/revert for multiple files
|
|
virtual bool SubmitFiles(int nCount, const char **ppFullPathList,
|
|
const char *pDescription) = 0;
|
|
virtual bool RevertFiles(int nCount, const char **ppFullPathList) = 0;
|
|
|
|
// Is this file in perforce?
|
|
virtual bool IsFileInPerforce(const char *pFullPath) = 0;
|
|
|
|
// Get the perforce file state
|
|
virtual P4FileState_t GetFileState(const char *pFullPath) = 0;
|
|
|
|
// depot root
|
|
virtual const char *GetDepotRoot() = 0;
|
|
virtual int GetDepotRootLength() = 0;
|
|
|
|
// local root
|
|
virtual const char *GetLocalRoot() = 0;
|
|
virtual int GetLocalRootLength() = 0;
|
|
|
|
// Gets a string for a symbol
|
|
virtual const char *String(CUtlSymbol s) const = 0;
|
|
|
|
// Returns which clientspec a file lies under. This will
|
|
// search for p4config files in root directories of the file
|
|
// It returns false if it didn't find a p4config file.
|
|
virtual bool GetClientSpecForFile(const char *pFullPath, char *pClientSpec,
|
|
int nMaxLen) = 0;
|
|
virtual bool GetClientSpecForDirectory(const char *pFullPathDir,
|
|
char *pClientSpec, int nMaxLen) = 0;
|
|
|
|
// Returns which clientspec a filesystem path ID lies under. This will
|
|
// search for p4config files in all root directories of the all paths in
|
|
// the search path. NOTE: All directories in a path need to use the same
|
|
// clientspec or this function will return false. It returns false if it
|
|
// didn't find a p4config file.
|
|
virtual bool GetClientSpecForPath(const char *pPathId, char *pClientSpec,
|
|
int nMaxLen) = 0;
|
|
|
|
// Opens a file in p4 win
|
|
virtual void OpenFileInP4Win(const char *pFullPath) = 0;
|
|
|
|
// have we connected? if not, nothing works
|
|
virtual bool IsConnectedToServer(bool bRetry = true) = 0;
|
|
|
|
// Returns file information for a single file
|
|
virtual bool GetFileInfo(const char *pFullPath, P4File_t *pFileInfo) = 0;
|
|
|
|
// Reopens a file for edit or add with the specified filetype. To see the
|
|
// valid strings for filetypes, see p4 help fileinfo. Perforce has to know
|
|
// about files before the filetype can be changed (so for new files, they
|
|
// must be added first, then the filetype modified).
|
|
virtual bool SetFileType(const char *pFullPath, const char *pFileType) = 0;
|
|
|
|
// retreives the list of files in a path, using a known client spec
|
|
virtual CUtlVector<P4File_t> &GetFileListUsingClientSpec(
|
|
const char *pPath, const char *pClientSpec) = 0;
|
|
|
|
// retrieves the last error from the last op (which is likely to span
|
|
// multiple lines) this is only valid after OpenFile[s]For{Add,Edit,Delete}
|
|
// or {Submit,Revert}File[s]
|
|
virtual const char *GetLastError() = 0;
|
|
};
|
|
|
|
#endif // IP4_H
|