OSDN Git Service

BrowseRefs: Implemented an example of how to use the BrowseRefs dialog as ref-picker.
[tortoisegit/TortoiseGitJp.git] / src / TGitCache / StatusCacheEntry.cpp
index 0c90500..5bedb4e 100644 (file)
 #include "CacheInterface.h"\r
 #include "registry.h"\r
 \r
-DWORD cachetimeout = (DWORD)CRegStdWORD(_T("Software\\TortoiseSVN\\Cachetimeout"), CACHETIMEOUT);\r
+DWORD cachetimeout = (DWORD)CRegStdWORD(_T("Software\\TortoiseGit\\Cachetimeout"), CACHETIMEOUT);\r
 \r
 CStatusCacheEntry::CStatusCacheEntry()\r
        : m_bSet(false)\r
        , m_bSVNEntryFieldSet(false)\r
-//     , m_kind(svn_node_unknown)\r
+       , m_kind(git_node_unknown)\r
        , m_bReadOnly(false)\r
        , m_highestPriorityLocalStatus(git_wc_status_none)\r
 {\r
@@ -37,7 +37,7 @@ CStatusCacheEntry::CStatusCacheEntry()
 CStatusCacheEntry::CStatusCacheEntry(const git_wc_status2_t* pGitStatus, __int64 lastWriteTime, bool bReadOnly, DWORD validuntil /* = 0*/)\r
        : m_bSet(false)\r
        , m_bSVNEntryFieldSet(false)\r
-//     , m_kind(svn_node_unknown)\r
+       , m_kind(git_node_unknown)\r
        , m_bReadOnly(false)\r
        , m_highestPriorityLocalStatus(git_wc_status_none)\r
 {\r
@@ -61,21 +61,21 @@ bool CStatusCacheEntry::SaveToDisk(FILE * pFile)
        WRITEVALUETOFILE(m_lastWriteTime);\r
        WRITEVALUETOFILE(m_bSet);\r
        WRITEVALUETOFILE(m_bSVNEntryFieldSet);\r
-       WRITEVALUETOFILE(m_commitRevision);\r
+       CStringA srev(m_commitRevision); WRITESTRINGTOFILE(srev);\r
        WRITESTRINGTOFILE(m_sUrl);\r
        WRITESTRINGTOFILE(m_sOwner);\r
        WRITESTRINGTOFILE(m_sAuthor);\r
-//     WRITEVALUETOFILE(m_kind);\r
+       WRITEVALUETOFILE(m_kind);\r
        WRITEVALUETOFILE(m_bReadOnly);\r
        WRITESTRINGTOFILE(m_sPresentProps);\r
 \r
        // now save the status struct (without the entry field, because we don't use that)      WRITEVALUETOFILE(m_GitStatus.copied);\r
 //     WRITEVALUETOFILE(m_GitStatus.locked);\r
-//     WRITEVALUETOFILE(m_GitStatus.prop_status);\r
+       WRITEVALUETOFILE(m_GitStatus.prop_status);\r
 //     WRITEVALUETOFILE(m_GitStatus.repos_prop_status);\r
 //     WRITEVALUETOFILE(m_GitStatus.repos_text_status);\r
 //     WRITEVALUETOFILE(m_GitStatus.switched);\r
-//     WRITEVALUETOFILE(m_GitStatus.text_status);\r
+       WRITEVALUETOFILE(m_GitStatus.text_status);\r
        return true;\r
 }\r
 \r
@@ -92,7 +92,19 @@ bool CStatusCacheEntry::LoadFromDisk(FILE * pFile)
                LOADVALUEFROMFILE(m_lastWriteTime);\r
                LOADVALUEFROMFILE(m_bSet);\r
                LOADVALUEFROMFILE(m_bSVNEntryFieldSet);\r
-               LOADVALUEFROMFILE(m_commitRevision);\r
+               LOADVALUEFROMFILE(value);\r
+               if (value != 0)\r
+               {\r
+                       CStringA s;\r
+                       if (fread(s.GetBuffer(value+1), sizeof(char), value, pFile)!=value)\r
+                       {\r
+                               s.ReleaseBuffer(0);\r
+                               m_commitRevision.Empty();\r
+                               return false;\r
+                       }\r
+                       s.ReleaseBuffer(value);\r
+                       m_commitRevision = s;\r
+               }\r
                LOADVALUEFROMFILE(value);\r
                if (value != 0)\r
                {\r
@@ -125,7 +137,7 @@ bool CStatusCacheEntry::LoadFromDisk(FILE * pFile)
                        }\r
                        m_sAuthor.ReleaseBuffer(value);\r
                }\r
-//             LOADVALUEFROMFILE(m_kind);\r
+               LOADVALUEFROMFILE(m_kind);\r
                LOADVALUEFROMFILE(m_bReadOnly);\r
                LOADVALUEFROMFILE(value);\r
                if (value != 0)\r
@@ -140,11 +152,11 @@ bool CStatusCacheEntry::LoadFromDisk(FILE * pFile)
                SecureZeroMemory(&m_GitStatus, sizeof(m_GitStatus));\r
 //             LOADVALUEFROMFILE(m_GitStatus.copied);\r
 //             LOADVALUEFROMFILE(m_GitStatus.locked);\r
-//             LOADVALUEFROMFILE(m_GitStatus.prop_status);\r
+               LOADVALUEFROMFILE(m_GitStatus.prop_status);\r
 //             LOADVALUEFROMFILE(m_GitStatus.repos_prop_status);\r
 //             LOADVALUEFROMFILE(m_GitStatus.repos_text_status);\r
 //             LOADVALUEFROMFILE(m_GitStatus.switched);\r
-//             LOADVALUEFROMFILE(m_GitStatus.text_status);\r
+               LOADVALUEFROMFILE(m_GitStatus.text_status);\r
 //             m_GitStatus.entry = NULL;\r
                m_discardAtTime = GetTickCount()+cachetimeout;\r
        }\r
@@ -167,8 +179,7 @@ void CStatusCacheEntry::SetStatus(const git_wc_status2_t* pGitStatus)
                m_GitStatus = *pGitStatus;\r
 \r
                // Currently we don't deep-copy the whole entry value, but we do take a few members\r
-#if 0\r
-        if(pGitStatus->entry != NULL)\r
+/*        if(pGitStatus->entry != NULL)\r
                {\r
                        m_sUrl = pGitStatus->entry->url;\r
                        m_commitRevision = pGitStatus->entry->cmt_rev;\r
@@ -179,14 +190,13 @@ void CStatusCacheEntry::SetStatus(const git_wc_status2_t* pGitStatus)
                        if (pGitStatus->entry->present_props)\r
                                m_sPresentProps = pGitStatus->entry->present_props;\r
                }\r
-               else\r
+               else*/\r
                {\r
                        m_sUrl.Empty();\r
-                       m_commitRevision = 0;\r
+                       m_commitRevision = GIT_INVALID_REVNUM;\r
                        m_bSVNEntryFieldSet = false;\r
                }\r
-               m_GitStatus.entry = NULL;\r
-#endif\r
+//             m_GitStatus.entry = NULL;\r
        }\r
        m_discardAtTime = GetTickCount()+cachetimeout;\r
        m_bSet = true;\r
@@ -219,7 +229,7 @@ void CStatusCacheEntry::BuildCacheResponse(TSVNCacheResponse& response, DWORD& r
        if(m_bSVNEntryFieldSet)\r
        {\r
                response.m_status = m_GitStatus;\r
-//             response.m_entry.cmt_rev = m_commitRevision;\r
+               wcscpy_s(response.m_entry.cmt_rev, 41, m_commitRevision.GetString());\r
 \r
                // There is no point trying to set these pointers here, because this is not \r
                // the process which will be using the data.\r
@@ -228,7 +238,7 @@ void CStatusCacheEntry::BuildCacheResponse(TSVNCacheResponse& response, DWORD& r
 //             response.m_status.entry = NULL;\r
 //             response.m_entry.url = NULL;\r
 \r
-//             response.m_kind = m_kind;\r
+               response.m_kind = m_kind;\r
                response.m_readonly = m_bReadOnly;\r
 \r
                if (m_sPresentProps.Find("svn:needs-lock")>=0)\r