OSDN Git Service

some basic preparations to get TGitCache working
authorMyagi <snowcoder@gmail.com>
Mon, 26 Jan 2009 05:15:31 +0000 (06:15 +0100)
committerFrank Li <lznuaa@gmail.com>
Mon, 16 Feb 2009 23:27:54 +0000 (07:27 +0800)
src/TGitCache/CacheInterface.h
src/TGitCache/CachedDirectory.cpp
src/TGitCache/SVNStatusCache.cpp
src/TGitCache/StatusCacheEntry.cpp
src/TGitCache/StatusCacheEntry.h
src/TGitCache/TSVNCache.cpp
src/TGitCache/TSVNCache.vcproj
src/TortoiseShell/IconOverlay.cpp
src/TortoiseShell/RemoteCacheLink.cpp
src/TortoiseShell/RemoteCacheLink.h
src/TortoiseShell/TortoiseShell.vcproj

index fdd886b..4a28d78 100644 (file)
@@ -40,6 +40,17 @@ CString GetCacheMutexName();
 \r
 CString GetCacheID();\r
 \r
+\r
+typedef enum git_node_kind_t\r
+{\r
+       git_node_none,\r
+       git_node_file,\r
+       git_node_dir,\r
+       git_node_unknown,\r
+\r
+}git_node_kind;\r
+\r
+\r
 /**\r
  * \ingroup TSVNCache\r
  * A structure passed as a request from the shell (or other client) to the external cache\r
@@ -62,7 +73,7 @@ struct TSVNCacheResponse
 {\r
        git_wc_status2_t m_status;\r
 //     svn_wc_entry_t m_entry;\r
-//     svn_node_kind_t m_kind;\r
+       git_node_kind_t m_kind;\r
        char m_url[INTERNET_MAX_URL_LENGTH+1];\r
        char m_owner[255];              ///< owner of the lock\r
        char m_author[255];\r
index 53fa719..b77f0ad 100644 (file)
@@ -396,9 +396,10 @@ CStatusCacheEntry CCachedDirectory::GetStatusForMember(const CTGitPath& path, bo
                                m_currentStatusFetchingPathTicks = GetTickCount();\r
                        }\r
                        ATLTRACE(_T("svn_cli_stat for '%s' (req %s)\n"), m_directoryPath.GetWinPath(), path.GetWinPath());\r
-                       git_error_t* pErr;\r
-#if 0\r
-                        = svn_client_status4 (\r
+\r
+                       BOOL pErr = 0;//!wgEnumFiles(CStringA(sProjectRoot), lpszSubPath, WGEFF_NoRecurse|WGEFF_FullPath|WGEFF_DirStatusAll, &fillstatusmap, this);\r
+\r
+                       /*git_error_t* pErr = svn_client_status4 (\r
                                NULL,\r
                                m_directoryPath.GetSVNApiPath(subPool),\r
                                &revision,\r
@@ -412,8 +413,7 @@ CStatusCacheEntry CCachedDirectory::GetStatusForMember(const CTGitPath& path, bo
                                NULL,                                                                   //changelists\r
                                CGitStatusCache::Instance().m_svnHelp.ClientContext(),\r
                                subPool\r
-                               );\r
-#endif\r
+                               );*/\r
                        {\r
                                AutoLocker pathlock(m_critSecPath);\r
                                m_currentStatusFetchingPath.Reset();\r
index 5109a22..4b15ae5 100644 (file)
@@ -48,7 +48,7 @@ void CGitStatusCache::Create()
        TCHAR path2[MAX_PATH];\r
        if (SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path)==S_OK)\r
        {\r
-               _tcscat_s(path, MAX_PATH, _T("\\TSVNCache"));\r
+               _tcscat_s(path, MAX_PATH, _T("\\TGitCache"));\r
                if (!PathIsDirectory(path))\r
                {\r
                        if (CreateDirectory(path, NULL)==0)\r
@@ -148,7 +148,7 @@ bool CGitStatusCache::SaveCache()
        TCHAR path[MAX_PATH];           //MAX_PATH ok here.\r
        if (SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path)==S_OK)\r
        {\r
-               _tcscat_s(path, MAX_PATH, _T("\\TSVNCache"));\r
+               _tcscat_s(path, MAX_PATH, _T("\\TGitCache"));\r
                if (!PathIsDirectory(path))\r
                        CreateDirectory(path, NULL);\r
                _tcscat_s(path, MAX_PATH, _T("\\cache"));\r
index 8e7b424..7556094 100644 (file)
@@ -27,7 +27,7 @@ DWORD cachetimeout = (DWORD)CRegStdWORD(_T("Software\\TortoiseGit\\Cachetimeout"
 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
@@ -65,17 +65,17 @@ bool CStatusCacheEntry::SaveToDisk(FILE * pFile)
        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
@@ -125,7 +125,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 +140,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
@@ -228,7 +228,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
index 7610722..f453087 100644 (file)
@@ -22,7 +22,7 @@ struct TSVNCacheResponse;
 #define CACHETIMEOUT   0x7FFFFFFF\r
 extern DWORD cachetimeout;\r
 \r
-#include "GitStatus.h"\r
+#include "CacheInterface.h"\r
 \r
 /**\r
  * \ingroup TSVNCache\r
@@ -39,14 +39,14 @@ public:
        bool DoesFileTimeMatch(__int64 testTime) const;\r
        bool ForceStatus(git_wc_status_kind forcedStatus);\r
        git_wc_status_kind GetEffectiveStatus() const { return m_highestPriorityLocalStatus; }\r
-       bool IsKindKnown() const { return true;/*((m_kind != git_node_none)&&(m_kind != git_node_unknown));*/ }\r
+       bool IsKindKnown() const { return ((m_kind != git_node_none)&&(m_kind != git_node_unknown)); }\r
        void SetStatus(const git_wc_status2_t* pGitStatus);\r
        bool HasBeenSet() const;\r
        void Invalidate();\r
-       bool IsDirectory() const {return true; /*((m_kind == git_node_dir)&&(m_highestPriorityLocalStatus != git_wc_status_ignored));*/}\r
+       bool IsDirectory() const { return ((m_kind == git_node_dir)&&(m_highestPriorityLocalStatus != git_wc_status_ignored)); }\r
        bool SaveToDisk(FILE * pFile);\r
        bool LoadFromDisk(FILE * pFile);\r
-//     void SetKind(git_node_kind_t kind) {m_kind = kind;}\r
+       void SetKind(git_node_kind_t kind) {m_kind = kind;}\r
 private:\r
        void SetAsUnversioned();\r
 \r
@@ -56,7 +56,7 @@ private:
        git_wc_status2_t        m_GitStatus;\r
        __int64                         m_lastWriteTime;\r
        bool                            m_bSet;\r
-//     git_node_kind_t         m_kind;\r
+       git_node_kind_t         m_kind;\r
        bool                            m_bReadOnly;\r
 \r
        // Values copied from the 'entries' structure\r
@@ -67,5 +67,5 @@ private:
        CStringA                        m_sPresentProps;\r
        git_revnum_t            m_commitRevision;\r
 \r
-//     friend class CGitStatusCache;\r
+       friend class CGitStatusCache;\r
 };\r
index 2b13785..a6f49c8 100644 (file)
@@ -44,7 +44,7 @@
 \r
 #pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")\r
 \r
-CCrashReport crasher("tortoisegit-bug@googlegroups.com", "Crash Report for TSVNCache " APP_X64_STRING " : " STRPRODUCTVER, TRUE);// crash\r
+CCrashReport crasher("tortoisegit-bug@googlegroups.com", "Crash Report for TGitCache " APP_X64_STRING " : " STRPRODUCTVER, TRUE);// crash\r
 \r
 DWORD WINAPI           InstanceThread(LPVOID); \r
 DWORD WINAPI           PipeThread(LPVOID);\r
@@ -122,7 +122,7 @@ void DebugOutputLastError()
        }\r
 \r
        // Display the string.\r
-       OutputDebugStringA("TSVNCache GetLastError(): ");\r
+       OutputDebugStringA("TGitCache GetLastError(): ");\r
        OutputDebugString((LPCTSTR)lpMsgBuf);\r
        OutputDebugStringA("\n");\r
 \r
@@ -136,8 +136,8 @@ int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*
 \r
        if (hReloadProtection == 0 || GetLastError() == ERROR_ALREADY_EXISTS)\r
        {\r
-               // An instance of TSVNCache is already running\r
-               ATLTRACE("TSVNCache ignoring restart\n");\r
+               // An instance of TGitCache is already running\r
+               ATLTRACE("TGitCache ignoring restart\n");\r
                return 0;\r
        }\r
 \r
index f626f97..c1c4d98 100644 (file)
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Utils\PathUtils.h"\r
+                               RelativePath="..\Git\GitAdminDir.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Utils\registry.h"\r
+                               RelativePath="..\Git\GitStatus.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\resource.h"\r
+                               RelativePath=".\GitStatusCache.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Utils\RWSection.h"\r
+                               RelativePath="..\Utils\PathUtils.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\TortoiseShell\ShellCache.h"\r
+                               RelativePath="..\Utils\registry.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\ShellUpdater.h"\r
+                               RelativePath=".\resource.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\StatusCacheEntry.h"\r
+                               RelativePath="..\Utils\RWSection.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\stdafx.h"\r
+                               RelativePath="..\TortoiseShell\ShellCache.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Svn\SVNAdminDir.h"\r
+                               RelativePath=".\ShellUpdater.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\SVN\SVNGlobal.h"\r
+                               RelativePath=".\StatusCacheEntry.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Svn\SVNHelpers.h"\r
+                               RelativePath=".\stdafx.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Svn\SVNStatus.h"\r
+                               RelativePath="..\Git\TGitPath.h"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Svn\TSVNPath.h"\r
-                               >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\Utils\UnicodeUtils.h"\r
                                >\r
                        </File>\r
index 28a59a0..791ca32 100644 (file)
@@ -22,7 +22,7 @@
 #include "PreserveChdir.h"\r
 #include "UnicodeUtils.h"\r
 #include "GitStatus.h"\r
-//#include "..\TSVNCache\CacheInterface.h"\r
+#include "..\TGitCache\CacheInterface.h"\r
 \r
 // "The Shell calls IShellIconOverlayIdentifier::GetOverlayInfo to request the\r
 //  location of the handler's icon overlay. The icon overlay handler returns\r
index 48ae11c..a56d2e2 100644 (file)
@@ -19,8 +19,8 @@
 #include "StdAfx.h"\r
 #include "Remotecachelink.h"\r
 #include "ShellExt.h"\r
-//#include "..\TSVNCache\CacheInterface.h"\r
-//#include "TSVNPath.h"\r
+#include "..\TGitCache\CacheInterface.h"\r
+#include "TGitPath.h"\r
 #define GetCachePipeName() _T("HH")\r
 #define GetCacheCommandPipeName() _T("CC")\r
 \r
@@ -28,11 +28,11 @@ CRemoteCacheLink::CRemoteCacheLink(void)
        : m_hPipe(INVALID_HANDLE_VALUE)\r
        , m_hCommandPipe(INVALID_HANDLE_VALUE)\r
 {\r
-//     SecureZeroMemory(&m_dummyStatus, sizeof(m_dummyStatus));\r
-//     m_dummyStatus.text_status = svn_wc_status_none;\r
-//     m_dummyStatus.prop_status = svn_wc_status_none;\r
-//     m_dummyStatus.repos_text_status = svn_wc_status_none;\r
-//     m_dummyStatus.repos_prop_status = svn_wc_status_none;\r
+       SecureZeroMemory(&m_dummyStatus, sizeof(m_dummyStatus));\r
+       m_dummyStatus.text_status = git_wc_status_none;\r
+       m_dummyStatus.prop_status = git_wc_status_none;\r
+//     m_dummyStatus.repos_text_status = git_wc_status_none;\r
+//     m_dummyStatus.repos_prop_status = git_wc_status_none;\r
        m_lastTimeout = 0;\r
        m_critSec.Init();\r
 }\r
@@ -193,7 +193,7 @@ void CRemoteCacheLink::CloseCommandPipe()
        {\r
                // now tell the cache we don't need it's command thread anymore\r
                DWORD cbWritten; \r
-/*             TSVNCacheCommand cmd;\r
+               TSVNCacheCommand cmd;\r
                SecureZeroMemory(&cmd, sizeof(TSVNCacheCommand));\r
                cmd.command = TSVNCACHECOMMAND_END;\r
                WriteFile( \r
@@ -205,11 +205,10 @@ void CRemoteCacheLink::CloseCommandPipe()
                DisconnectNamedPipe(m_hCommandPipe); \r
                CloseHandle(m_hCommandPipe); \r
                m_hCommandPipe = INVALID_HANDLE_VALUE;\r
-*/\r
        }\r
 }\r
 \r
-bool CRemoteCacheLink::GetStatusFromRemoteCache(const CTSVNPath& Path, TSVNCacheResponse* pReturnedStatus, bool bRecursive)\r
+bool CRemoteCacheLink::GetStatusFromRemoteCache(const CTGitPath& Path, TSVNCacheResponse* pReturnedStatus, bool bRecursive)\r
 {\r
        if(!EnsurePipeOpen())\r
        {\r
@@ -227,7 +226,7 @@ bool CRemoteCacheLink::GetStatusFromRemoteCache(const CTSVNPath& Path, TSVNCache
                startup.cb = sizeof(startup);\r
                memset(&process, 0, sizeof(process));\r
 \r
-               CRegString cachePath(_T("Software\\TortoiseGit\\CachePath"), _T("TSVNCache.exe"), false, HKEY_LOCAL_MACHINE);\r
+               CRegString cachePath(_T("Software\\TortoiseGit\\CachePath"), _T("TGitCache.exe"), false, HKEY_LOCAL_MACHINE);\r
                CString sCachePath = cachePath;\r
                if (CreateProcess(sCachePath.GetBuffer(sCachePath.GetLength()+1), _T(""), NULL, NULL, FALSE, 0, 0, 0, &startup, &process)==0)\r
                {\r
@@ -308,7 +307,7 @@ bool CRemoteCacheLink::GetStatusFromRemoteCache(const CTSVNPath& Path, TSVNCache
 \r
        if (fSuccess)\r
        {\r
-               if(nBytesRead == sizeof(TSVNCacheResponse))\r
+/*             if(nBytesRead == sizeof(TSVNCacheResponse))\r
                {\r
                        // This is a full response - we need to fix-up some pointers\r
                        pReturnedStatus->m_status.entry = &pReturnedStatus->m_entry;\r
@@ -318,14 +317,14 @@ bool CRemoteCacheLink::GetStatusFromRemoteCache(const CTSVNPath& Path, TSVNCache
                {\r
                        pReturnedStatus->m_status.entry = NULL;\r
                }\r
-\r
+*/\r
                return true;\r
        }\r
        ClosePipe();\r
        return false;\r
 }\r
 \r
-bool CRemoteCacheLink::ReleaseLockForPath(const CTSVNPath& path)\r
+bool CRemoteCacheLink::ReleaseLockForPath(const CTGitPath& path)\r
 {\r
        EnsureCommandPipeOpen();\r
        if (m_hCommandPipe != INVALID_HANDLE_VALUE) \r
index 4677b5f..c4b7956 100644 (file)
@@ -19,7 +19,9 @@
 #pragma once\r
 \r
 struct TSVNCacheResponse;\r
-class CTSVNPath;\r
+class CTGitPath;\r
+\r
+#include "GitStatus.h"\r
 \r
 /**\r
  * \ingroup TortoiseShell\r
@@ -28,12 +30,12 @@ class CTSVNPath;
 class CRemoteCacheLink\r
 {\r
 public:\r
-       CRemoteCacheLink(void){};\r
-       ~CRemoteCacheLink(void){};\r
+       CRemoteCacheLink(void);\r
+       ~CRemoteCacheLink(void);\r
 \r
 public:\r
-       bool GetStatusFromRemoteCache(const CTSVNPath& Path, TSVNCacheResponse* pReturnedStatus, bool bRecursive);\r
-       bool ReleaseLockForPath(const CTSVNPath& path);\r
+       bool GetStatusFromRemoteCache(const CTGitPath& Path, TSVNCacheResponse* pReturnedStatus, bool bRecursive);\r
+       bool ReleaseLockForPath(const CTGitPath& path);\r
 \r
 private:\r
        bool EnsurePipeOpen();\r
@@ -51,7 +53,7 @@ private:
 \r
 \r
        CComCriticalSection m_critSec;\r
-//     git_wc_status2_t m_dummyStatus;\r
+       git_wc_status2_t m_dummyStatus;\r
        long m_lastTimeout;\r
 \r
 };\r
index 3b1db93..1805c66 100644 (file)
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\RemoteCacheLink.cpp"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\ShellExt.cpp"\r
                                >\r
                        </File>\r