comparison kdiff3/src-QT4/directorymergewindow.cpp @ 96:9000a9763f6f

Fixed problem where destination directory would be renamed or deleted during copy operation. Now if the destination directory exists only the files inside will be copied.
author joachim99
date Thu, 25 Mar 2010 20:37:37 +0000
parents 6f42f5bd218e
children 236f1c9c3fbf
comparison
equal deleted inserted replaced
95:6f42f5bd218e 96:9000a9763f6f
2498 bool DirectoryMergeWindow::copyFLD( const QString& srcName, const QString& destName ) 2498 bool DirectoryMergeWindow::copyFLD( const QString& srcName, const QString& destName )
2499 { 2499 {
2500 if ( srcName == destName ) 2500 if ( srcName == destName )
2501 return true; 2501 return true;
2502 2502
2503 if ( FileAccess(destName, true).exists() ) 2503 FileAccess fi( srcName );
2504 FileAccess faDest(destName, true);
2505 if ( faDest.exists() && !( fi.isDir() && faDest.isDir() && (fi.isSymLink()==faDest.isSymLink())) )
2504 { 2506 {
2505 bool bSuccess = deleteFLD( destName, m_pOptions->m_bDmCreateBakFiles ); 2507 bool bSuccess = deleteFLD( destName, m_pOptions->m_bDmCreateBakFiles );
2506 if ( !bSuccess ) 2508 if ( !bSuccess )
2507 { 2509 {
2508 m_pStatusInfo->addText(i18n("Error: copy( %1 -> %2 ) failed." 2510 m_pStatusInfo->addText(i18n("Error: copy( %1 -> %2 ) failed."
2509 "Deleting existing destination failed.",srcName,destName)); 2511 "Deleting existing destination failed.",srcName,destName));
2510 return false; 2512 return false;
2511 } 2513 }
2512 } 2514 }
2513 2515
2514 FileAccess fi( srcName );
2515 2516
2516 if ( fi.isSymLink() && ((fi.isDir() && !m_bFollowDirLinks) || (!fi.isDir() && !m_bFollowFileLinks)) ) 2517 if ( fi.isSymLink() && ((fi.isDir() && !m_bFollowDirLinks) || (!fi.isDir() && !m_bFollowFileLinks)) )
2517 { 2518 {
2518 m_pStatusInfo->addText(i18n("copyLink( %1 -> %2 )",srcName,destName)); 2519 m_pStatusInfo->addText(i18n("copyLink( %1 -> %2 )",srcName,destName));
2519 #if defined(_WIN32) || defined(Q_OS_OS2) 2520 #if defined(_WIN32) || defined(Q_OS_OS2)
2537 #endif 2538 #endif
2538 } 2539 }
2539 2540
2540 if ( fi.isDir() ) 2541 if ( fi.isDir() )
2541 { 2542 {
2542 bool bSuccess = makeDir( destName ); 2543 if ( faDest.exists() )
2543 return bSuccess; 2544 return true;
2545 else
2546 {
2547 bool bSuccess = makeDir( destName );
2548 return bSuccess;
2549 }
2544 } 2550 }
2545 2551
2546 int pos=destName.lastIndexOf('/'); 2552 int pos=destName.lastIndexOf('/');
2547 if ( pos>0 ) 2553 if ( pos>0 )
2548 { 2554 {