Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 May 2014 01:29:54 GMT
From:      Ed Maste <emaste@FreeBSD.org>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   ports/190158: textproc/kdiff3 fails to save output with -o relative path
Message-ID:  <201405240129.s4O1Tso8015054@freefall.freebsd.org>
Resent-Message-ID: <201405240130.s4O1U02v015126@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         190158
>Category:       ports
>Synopsis:       textproc/kdiff3 fails to save output with -o relative path
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat May 24 01:30:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator:     Ed Maste
>Release:        FreeBSD 11.0-CURRENT amd64
>Organization:
FreeBSD
>Environment:
System: FreeBSD freefall.freebsd.org 11.0-CURRENT FreeBSD 11.0-CURRENT #0 r265336: Sun May 4 20:43:08 UTC 2014 peter@freefall.freebsd.org:/usr/obj/usr/src/sys/FREEFALL amd64

>Description:
Using kdiff3 as "git mergetool" fails to save output specified as a relative
path.

Upstream fix here: http://sourceforge.net/p/kdiff3/code/ci/23ad423e4255c80ee22b269f73e20333f7c06678/

>How-To-Repeat:
printf '1\n' > file.BASE
printf '0\n1\n' > file.r0
printf '1\n2\n' > file.r1
kdiff3 --auto -o ./file file.BASE file.r0 file.r1

(From https://bugs.archlinux.org/task/31813)

>Fix:

--- patch-23ad423 begins here ---
commit 23ad423e4255c80ee22b269f73e20333f7c06678
Author: joachim99 <joachim.eibl@gmx.de>
Date:   Sat Sep 22 23:02:12 2012 +0200

    - Fix for saving files on KDE with relative path specified via
      command line option -o.
    
    Signed-off-by: joachim99 <joachim.eibl@gmx.de>

diff --git src-QT4/fileaccess.cpp src-QT4/fileaccess.cpp
index 134fc26..b6e01f0 100644
--- src-QT4/fileaccess.cpp
+++ src-QT4/fileaccess.cpp
@@ -183,7 +183,8 @@ static QString nicePath( const QFileInfo& fi )
 
 void FileAccess::setFile( const QFileInfo& fi, FileAccess* pParent )
 {
-   m_filePath   = nicePath( fi.filePath() ); // remove "./" at start   
+   m_filePath   = pParent == 0 ? fi.absoluteFilePath() : 
+                                 nicePath( fi.filePath() ); // remove "./" at start   
 
    m_bSymLink   = fi.isSymLink();
    if ( m_bSymLink || (!m_bExists  && m_filePath.contains("@@") ) )
@@ -566,7 +567,16 @@ QString FileAccess::absoluteFilePath() const
    if ( parent() != 0 )
       return parent()->absoluteFilePath() + "/" + m_filePath;
    else
-      return m_filePath;
+   {
+      if ( m_filePath.isEmpty() )
+	 return QString();
+      
+      QFileInfo fi( m_filePath );
+      if ( fi.isAbsolute() )
+	 return m_filePath;
+      else
+	 return fi.absoluteFilePath(); // Probably never reached
+   }
 }  // Full abs path
 
 // Just the name-part of the path, without parent directories
@@ -1184,7 +1194,7 @@ bool FileAccessJobHandler::rename( const QString& dest )
       m_bSuccess = false;
       KIO::FileCopyJob* pJob = KIO::file_move( m_pFileAccess->url(), kurl, permissions, KIO::HideProgressInfo );
       connect( pJob, SIGNAL(result(KJob*)), this, SLOT(slotSimpleJobResult(KJob*)));
-      connect( pJob, SIGNAL(percent(KJob*,unsigned long)), this, SLOT(slotPercent(KJob*, unsigned long)));
+      connect( pJob, SIGNAL(percent(KJob*,unsigned long)), &pp, SLOT(slotPercent(KJob*, unsigned long)));
 
       ProgressProxy::enterEventLoop( pJob,
          i18n("Renaming file: %1 -> %2",m_pFileAccess->prettyAbsPath(),dest) );
@@ -1673,7 +1683,7 @@ bool FileAccessJobHandler::listDir( t_DirectoryList* pDirList, bool bRecursive,
                   &pp,      SLOT( slotListDirInfoMessage(KJob*, const QString&) ));
 
          // This line makes the transfer via fish unreliable.:-(
-         //connect( pListJob, SIGNAL(percent(KJob*,unsigned long)), this, SLOT(slotPercent(KJob*, unsigned long)));
+         //connect( pListJob, SIGNAL(percent(KJob*,unsigned long)), &pp, SLOT(slotPercent(KJob*, unsigned long)));
 
          ProgressProxy::enterEventLoop( pListJob,
             i18n("Listing directory: %1",m_pFileAccess->prettyAbsPath()) );
diff --git src-QT4/kdiff3.cpp src-QT4/kdiff3.cpp
index 165602f..de7cc9c 100644
--- src-QT4/kdiff3.cpp
+++ src-QT4/kdiff3.cpp
@@ -211,6 +211,8 @@ KDiff3App::KDiff3App(QWidget* pParent, const char* /*name*/, KDiff3Part* pKDiff3
       m_outputFilename = args->getOption("output");
       if ( m_outputFilename.isEmpty() )
          m_outputFilename = args->getOption("out");
+      if ( ! m_outputFilename.isEmpty() )
+         m_outputFilename = FileAccess( m_outputFilename, true ).absoluteFilePath();
    }
 
    m_bAutoFlag = args!=0  && args->isSet("auto");
--- patch-23ad423 ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201405240129.s4O1Tso8015054>