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
)
26 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()
97 int retrycounter
= 10;
98 // try to open the file for about two seconds - some other TSVN process might be
99 // writing to the file and we just wait a little for this to finish
100 while (!file
.Open(m_logfile
.GetWinPath(), CFile::typeText
| CFile::modeWrite
| CFile::modeCreate
) && retrycounter
)
105 if (retrycounter
== 0)
108 for (const auto& line
: m_lines
)
110 file
.WriteString(line
);
111 file
.WriteString(L
"\n");
115 catch (CFileException
* pE
)
117 TRACE("CFileException loading autolist regex file\n");
124 bool CLogFile::AddTimeLine()
127 // first add an empty line as a separator
128 m_lines
.push_back(sLine
);
129 // now add the time string
130 TCHAR datebuf
[4096] = {0};
131 GetDateFormat(LOCALE_USER_DEFAULT
, DATE_SHORTDATE
, nullptr, nullptr, datebuf
, 4096);
133 GetTimeFormat(LOCALE_USER_DEFAULT
, 0, nullptr, nullptr, datebuf
, 4096);
138 m_lines
.push_back(sLine
);
142 void CLogFile::AdjustSize()
144 DWORD maxlines
= m_maxlines
;
146 while (m_lines
.size() > maxlines
)