summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-06-28 16:15:05 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-06-28 16:15:05 +0900
commitcaa6e331414e7ad44ce087abe4a8c491a61980c8 (patch)
tree18ef3fa2d2224b4be4f591b78a6b8f7993992e1d
parentbddb43436cfd5148c26bcfc33dbe6128ecdf6aae (diff)
downloadkdiff3-caa6e331.tar.gz
kdiff3-caa6e331.zip
Fixed detection of files in kdiff3_part.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
-rw-r--r--src/fileaccess.cpp39
-rw-r--r--src/fileaccess.h2
-rw-r--r--src/kdiff3_part.cpp19
3 files changed, 50 insertions, 10 deletions
diff --git a/src/fileaccess.cpp b/src/fileaccess.cpp
index 0dc0511..205b75e 100644
--- a/src/fileaccess.cpp
+++ b/src/fileaccess.cpp
@@ -46,7 +46,14 @@
ProgressDialog* g_pProgressDialog=0;
-FileAccess::FileAccess( const TQString& name, bool bWantToWrite )
+FileAccess::FileAccess( const TQString& name, bool bWantToWrite ) :
+ m_workingDir(TQString::null)
+{
+ setFile( name, bWantToWrite );
+}
+
+FileAccess::FileAccess( const TQString& workingDir, const TQString& name, bool bWantToWrite ) :
+ m_workingDir(workingDir)
{
setFile( name, bWantToWrite );
}
@@ -111,7 +118,15 @@ void FileAccess::setFile( const TQString& name, bool bWantToWrite )
// 1. When the local file exists and the remote location is wanted nevertheless. (unlikely)
// 2. When the local file doesn't exist and should be written to.
- bool bExistsLocal = TQDir().exists(name);
+ bool bExistsLocal = false;
+ if (!m_workingDir.isEmpty())
+ {
+ bExistsLocal = TQDir(m_workingDir).exists(name);
+ }
+ else
+ {
+ bExistsLocal = TQDir().exists(name);
+ }
if ( m_url.isLocalFile() || !m_url.isValid() || bExistsLocal ) // assuming that invalid means relative
{
TQString localName = name;
@@ -119,7 +134,15 @@ void FileAccess::setFile( const TQString& name, bool bWantToWrite )
{
localName = m_url.path(); // I want the path without preceding "file:"
}
- TQFileInfo fi( localName );
+ TQFileInfo fi;
+ if (!m_workingDir.isEmpty())
+ {
+ fi = TQFileInfo( m_workingDir, localName );
+ }
+ else
+ {
+ fi = TQFileInfo( localName );
+ }
#if defined(TQ_WS_WIN)
// On some windows machines in a network this takes very long.
// and it's not so important anyway.
@@ -158,7 +181,15 @@ void FileAccess::setFile( const TQString& name, bool bWantToWrite )
TQString cmd = "cleartool get -to \"" + m_localCopy + "\" \"" + m_absFilePath + "\"";
::system( cmd.local8Bit() );
- TQFileInfo fi( m_localCopy );
+ TQFileInfo fi;
+ if (!m_workingDir.isEmpty())
+ {
+ fi = TQFileInfo( m_workingDir, m_localCopy );
+ }
+ else
+ {
+ fi = TQFileInfo( m_localCopy );
+ }
#if defined(TQ_WS_WIN)
m_bReadable = true;//fi.isReadable();
m_bWritable = true;//fi.isWritable();
diff --git a/src/fileaccess.h b/src/fileaccess.h
index 9338a85..d6afad0 100644
--- a/src/fileaccess.h
+++ b/src/fileaccess.h
@@ -31,6 +31,7 @@ public:
FileAccess();
~FileAccess();
FileAccess( const TQString& name, bool bWantToWrite=false ); // name: local file or dirname or url (when supported)
+ FileAccess( const TQString& workingDir, const TQString& name, bool bWantToWrite=false ); // name: local file or dirname or url (when supported)
void setFile( const TQString& name, bool bWantToWrite=false );
bool isValid() const;
@@ -101,6 +102,7 @@ private:
bool m_bHidden;
long m_fileType; // for testing only
+ TQString m_workingDir;
TQString m_linkTarget;
TQString m_user;
TQString m_group;
diff --git a/src/kdiff3_part.cpp b/src/kdiff3_part.cpp
index 82da11a..8c4e9c3 100644
--- a/src/kdiff3_part.cpp
+++ b/src/kdiff3_part.cpp
@@ -98,7 +98,7 @@ void KDiff3Part::setModified(bool /*modified*/)
*/
}
-static void getNameAndVersion( const TQString& str, const TQString& lineStart, TQString& fileName, TQString& version )
+static void getNameAndVersion( const TQString& workingDir, const TQString& str, const TQString& lineStart, TQString& fileName, TQString& version )
{
if ( str.left( lineStart.length() )==lineStart && fileName.isEmpty() )
{
@@ -110,7 +110,12 @@ static void getNameAndVersion( const TQString& str, const TQString& lineStart, T
while (pos2>pos && str[pos2]!=' ' && str[pos2]!='\t') --pos2;
fileName = str.mid( pos, pos2-pos );
std::cerr << "KDiff3: " << fileName.latin1() << std::endl;
- if ( FileAccess(fileName).exists() ) break;
+ FileAccess fa(workingDir, fileName);
+ if (fa.exists())
+ {
+ fileName = fa.absFilePath();
+ break;
+ }
--pos2;
}
@@ -135,6 +140,8 @@ bool KDiff3Part::openFile()
// our example widget is text-based, so we use TQTextStream instead
// of a raw TQDataStream
+ TQFileInfo fileinfo(m_file);
+ TQString workingDir = fileinfo.dirPath(true);
TQTextStream stream(&file);
TQString str;
TQString fileName1;
@@ -144,8 +151,8 @@ bool KDiff3Part::openFile()
while (!stream.eof() && (fileName1.isEmpty() || fileName2.isEmpty()) )
{
str = stream.readLine() + "\n";
- getNameAndVersion( str, "---", fileName1, version1 );
- getNameAndVersion( str, "+++", fileName2, version2 );
+ getNameAndVersion( workingDir, str, "---", fileName1, version1 );
+ getNameAndVersion( workingDir, str, "+++", fileName2, version2 );
}
file.close();
@@ -156,8 +163,8 @@ bool KDiff3Part::openFile()
return false;
}
- FileAccess f1(fileName1);
- FileAccess f2(fileName2);
+ FileAccess f1(workingDir, fileName1);
+ FileAccess f2(workingDir, fileName2);
if ( f1.exists() && f2.exists() && fileName1!=fileName2 )
{