1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008, 2013-2014, 2016 - TortoiseGit
4 // Copyright (C) 2007 - TortoiseSVN
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 #include "PathUtils.h"
24 CLogFile::CLogFile(const CString
& repo
)
25 : m_maxlines(CRegStdDWORD(L
"Software\\TortoiseGit\\MaxLinesInLogfile", 4000))
30 CLogFile::~CLogFile(void)
38 CTGitPath logfile
= CTGitPath(CPathUtils::GetLocalAppDataDirectory() + L
"logfile.txt");
42 bool CLogFile::Open(const CTGitPath
& logfile
)
46 if (!logfile
.Exists())
48 CPathUtils::MakeSureDirectoryPathExists(logfile
.GetContainingDirectory().GetWinPath());
56 int retrycounter
= 10;
57 // try to open the file for about two seconds - some other TSVN process might be
58 // writing to the file and we just wait a little for this to finish
59 while (!file
.Open(logfile
.GetWinPath(), CFile::typeText
| CFile::modeRead
| CFile::shareDenyWrite
) && retrycounter
)
64 if (retrycounter
== 0)
67 while (file
.ReadString(strLine
))
68 m_lines
.push_back(strLine
);
71 catch (CFileException
* pE
)
73 TRACE("CFileException loading autolist regex file\n");
80 bool CLogFile::AddLine(const CString
& line
)
82 m_lines
.push_back(line
);
86 bool CLogFile::Close()
96 int retrycounter
= 10;
97 // try to open the file for about two seconds - some other TSVN process might be
98 // writing to the file and we just wait a little for this to finish
99 while (!file
.Open(m_logfile
.GetWinPath(), CFile::typeText
| CFile::modeWrite
| CFile::modeCreate
) && retrycounter
)
104 if (retrycounter
== 0)
107 for (const auto& line
: m_lines
)
109 file
.WriteString(line
);
110 file
.WriteString(L
"\n");
114 catch (CFileException
* pE
)
116 TRACE("CFileException loading autolist regex file\n");
123 bool CLogFile::AddTimeLine()
126 // first add an empty line as a separator
127 m_lines
.push_back(sLine
);
128 // now add the time string
129 TCHAR datebuf
[4096] = {0};
130 GetDateFormat(LOCALE_USER_DEFAULT
, DATE_SHORTDATE
, nullptr, nullptr, datebuf
, 4096);
132 GetTimeFormat(LOCALE_USER_DEFAULT
, 0, nullptr, nullptr, datebuf
, 4096);
137 m_lines
.push_back(sLine
);
141 void CLogFile::AdjustSize()
143 DWORD maxlines
= m_maxlines
;
145 while (m_lines
.size() > maxlines
)