OSDN Git Service

Add Diff with work copy and file list
[tortoisegit/TortoiseGitJp.git] / src / Git / GitRev.cpp
index 2aaab15..88a24ed 100644 (file)
@@ -2,11 +2,23 @@
 #include "GitRev.h"\r
 #include "Git.h"\r
 \r
+// provide an ASSERT macro for when compiled without MFC\r
+#if !defined ASSERT\r
+       // Don't use _asm here, it isn't supported by x64 version of compiler. In fact, MFC's ASSERT() is the same with _ASSERTE().\r
+       #define ASSERT(x) _ASSERTE(x)\r
+#endif\r
+\r
+\r
 GitRev::GitRev(void)\r
 {\r
        m_Action=0;\r
        m_IsFull = 0;\r
        m_IsUpdateing = 0;\r
+       // fetch local machine timezone info\r
+       if ( GetTimeZoneInformation( &m_TimeZone ) == TIME_ZONE_ID_INVALID )\r
+       {\r
+               ASSERT(false);\r
+       }\r
 }\r
 \r
 GitRev::~GitRev(void)\r
@@ -36,7 +48,7 @@ void GitRev::Clear()
        m_Mark=0;\r
 \r
 }\r
-int GitRev::CopyFrom(GitRev &rev)\r
+int GitRev::CopyFrom(GitRev &rev,bool OmitParentAndMark)\r
 {\r
        m_AuthorName    =rev.m_AuthorName       ;\r
        m_AuthorEmail   =rev.m_AuthorEmail      ;\r
@@ -47,10 +59,14 @@ int GitRev::CopyFrom(GitRev &rev)
        m_Subject               =rev.m_Subject          ;\r
        m_Body                  =rev.m_Body                     ;\r
        m_CommitHash    =rev.m_CommitHash       ;\r
-       m_ParentHash    =rev.m_ParentHash       ;\r
        m_Files                 =rev.m_Files                    ;       \r
        m_Action                =rev.m_Action           ;\r
-       m_Mark                  =rev.m_Mark;\r
+\r
+       if(!OmitParentAndMark)\r
+       {\r
+               m_ParentHash    =rev.m_ParentHash       ;\r
+               m_Mark                  =rev.m_Mark;\r
+       }\r
        return 0;\r
 }\r
 int GitRev::ParserFromLog(BYTE_VECTOR &log,int start)\r
@@ -65,7 +81,6 @@ int GitRev::ParserFromLog(BYTE_VECTOR &log,int start)
        this->m_Files.Clear();\r
     m_Action=0;\r
        int begintime=0;\r
-       BYTE *p=&log[0];\r
        int filebegin=-1;\r
 \r
        while( pos < log.size() && pos>=0)\r
@@ -168,13 +183,40 @@ int GitRev::ParserFromLog(BYTE_VECTOR &log,int start)
 \r
 CTime GitRev::ConverFromString(CString input)\r
 {\r
+       // pick up date from string\r
        CTime tm(_wtoi(input.Mid(0,4)),\r
                         _wtoi(input.Mid(5,2)),\r
                         _wtoi(input.Mid(8,2)),\r
                         _wtoi(input.Mid(11,2)),\r
                         _wtoi(input.Mid(14,2)),\r
                         _wtoi(input.Mid(17,2)),\r
-                        _wtoi(input.Mid(20,4)));\r
+                        0);\r
+       // pick up utc offset\r
+       CString sign = input.Mid(20,1);         // + or -\r
+       int hoursOffset =  _wtoi(input.Mid(21,2));\r
+       int minsOffset = _wtoi(input.Mid(23,2));\r
+       if ( sign == "-" )\r
+       {\r
+               hoursOffset = -hoursOffset;\r
+               minsOffset = -minsOffset;\r
+       }\r
+       // make a timespan object with this value\r
+       CTimeSpan offset( 0, hoursOffset, minsOffset, 0 );\r
+       // we have to subtract this from the time given to get UTC\r
+       tm -= offset;\r
+       // get local timezone\r
+       SYSTEMTIME sysTime;\r
+       tm.GetAsSystemTime( sysTime );\r
+       SYSTEMTIME local;\r
+       if ( SystemTimeToTzSpecificLocalTime( &m_TimeZone, &sysTime, &local ) )\r
+       {\r
+               sysTime = local;\r
+       }\r
+       else\r
+       {\r
+               ASSERT(false);\r
+       }\r
+       tm = CTime( sysTime, 0 );\r
        return tm;\r
 }\r
 \r