Show GUI friendly diffstat after pull
[TortoiseGit.git] / src / Utils / TempFile.cpp
blobbbfdfe674a50a245179b0a9a378841a7d47af02d
1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #include "StdAfx.h"
20 #include "Registry.h"
21 #include "TempFile.h"
23 CTempFiles::CTempFiles(void)
27 CTempFiles::~CTempFiles(void)
29 m_TempFileList.DeleteAllFiles(false);
32 CTempFiles& CTempFiles::Instance()
34 static CTempFiles instance;
35 return instance;
38 CTSVNPath CTempFiles::GetTempFilePath(bool bRemoveAtEnd, const CTSVNPath& path /* = CTSVNPath() */, const SVNRev revision /* = SVNRev() */)
40 DWORD len = ::GetTempPath(0, NULL);
41 TCHAR * temppath = new TCHAR[len+1];
42 TCHAR * tempF = new TCHAR[len+50];
43 ::GetTempPath (len+1, temppath);
44 CTSVNPath tempfile;
45 CString possibletempfile;
46 if (path.IsEmpty())
48 ::GetTempFileName (temppath, TEXT("svn"), 0, tempF);
49 tempfile = CTSVNPath(tempF);
51 else
53 int i=0;
56 if (revision.IsValid())
58 possibletempfile.Format(_T("%s%s-rev%s.svn%3.3x.tmp%s"), temppath, (LPCTSTR)path.GetFileOrDirectoryName(), (LPCTSTR)revision.ToString(), i, (LPCTSTR)path.GetFileExtension());
60 else
62 possibletempfile.Format(_T("%s%s.svn%3.3x.tmp%s"), temppath, (LPCTSTR)path.GetFileOrDirectoryName(), i, (LPCTSTR)path.GetFileExtension());
64 tempfile.SetFromWin(possibletempfile);
65 i++;
66 } while (PathFileExists(tempfile.GetWinPath()));
68 //now create the temp file, so that subsequent calls to GetTempFile() return
69 //different filenames.
70 HANDLE hFile = CreateFile(tempfile.GetWinPath(), GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
71 CloseHandle(hFile);
72 delete [] temppath;
73 delete [] tempF;
74 if (bRemoveAtEnd)
75 m_TempFileList.AddPath(tempfile);
76 return tempfile;