post by tommy @ 18 十月, 2006 18:57
這個 patch 可以修正這個問題.
diff -Nur src.utf8/engine/sftpcontrolsocket.cpp src/engine/sftpcontrolsocket.cpp
--- src.utf8/engine/sftpcontrolsocket.cpp Wed Oct 18 17:48:38 2006
+++ src/engine/sftpcontrolsocket.cpp Wed Oct 18 17:57:55 2006
@@ -995,12 +995,17 @@
int CSftpControlSocket::ChangeDirParseResponse(bool successful, const wxString& reply)
{
- if (!successful || !m_pCurOpData)
+ if (!m_pCurOpData)
{
ResetOperation(FZ_REPLY_ERROR);
return FZ_REPLY_ERROR;
}
CSftpChangeDirOpData *pData = static_cast<CSftpChangeDirOpData *>(m_pCurOpData);
+ if (!successful && pData->opState != cwd_cwd)
+ {
+ ResetOperation(FZ_REPLY_ERROR);
+ return FZ_REPLY_ERROR;
+ }
bool error = false;
switch (pData->opState)
@@ -1198,6 +1203,9 @@
if (download)
{
wxString filename = remotePath.FormatFilename(remoteFile);
+ // Create local directory
+ wxFileName fn(localFile);
+ wxFileName::Mkdir(fn.GetPath(), 0777, wxPATH_MKDIR_FULL);
LogMessage(Status, _("Starting download of %s"), filename.c_str());
}
else
這個 patch 可以在這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/filezilla3_beta2_sftp_transfer_dir.patch
不過在加上這個 patch 之後, 在我測試的時候, 多數的情形下都可以正常使用. 但是有時候會把原本不同目錄的檔案, 上傳到相同的目錄. 這個問題看起來像是作者提過的這個問題. 似乎是一個 race condition, 要抓出問題點可能需要一段時間吧.
另外就是在下載之後, local 端的 tree 並不會更新. 上傳之後, remote 端的 tree 會更新, 但是不完整.
剛剛又發現另一個問題, 如果 sftp 的 remote 端是一個 soft link 的目錄的話, 傳送該目錄會造成 loop, 然後 FileZilla 就當在那邊沒回應了.
2006/10/18: 這個修正作者修改後已進入目前的 CVS 中了.